Boot option

From Rockchip open source Document
Revision as of 14:13, 21 March 2017 by Kever (talk | contribs)
Jump to: navigation, search



Boot introduce


First, let's make the concept clear, there are many boot stages when we boot up a Linux OS;

Then we need to know about how the image should packaged, where the image locate;

At lase, we will explain how to write to different media and boot from there.

Boot stage

Here is a table show the detail what we may use in Rockchip platform, for 2 boot stage:

- optionally can use U-Boot SPL;

-  or use Rockchp idbLoader which is combinded by Rockchip ddr init bin and miniloader bin;

| Boot   | Terminology #1 | Actual   | Rockchip  |
| stage  |                | program  |  Loader   |
| number |                | name     |   Name    |
| 1      |  Primary       | ROM code | BootRom   |
|        |  Program       |          |           |
|        |  Loader        |          |           |
|        |                |          |           |
| 2      |  Secondary     | U-Boot   | idbLoader | 0x40
|        |  Program       | SPL      |           |
|        |  Loader (SPL)  |          |           |
|        |                |          |           |
| 3      |  -             | U-Boot   |  U-Boot   | 0x4000
|        |                |          |           |
|        |                |          |           |
| 4      |  -             | kernel   |  kernel   | 0x8000
|        |                |          |           |
| 5      |  -             | rootfs   |  rootfs   | 0x40000

Then when we talking about boot from eMMC/SD/U-Disk/net, they are in different concept:

  • Stage 1 is always in boot rom, it loads stage 2 and may load stage 3(when SPL_BACK_TO_BROM option enabled).
  • Boot from SPI flash means firmware for stage 2 and 3(SPL and U-Boot only) in SPI flash and stage 4/5 in other place;
  • Boot from eMMC means all the firmware(including stage 2, 3, 4, 5) in eMMC;
  • Boot from SD card means all the firmware(including stage 2, 3, 4, 5) in SD card;
  • Boot from U-Disk means firmware for stage 4 and 5(not including SPL and U-Boot) in Disk, optionally only including stage 5;
  • Boot from net/tftp means firmeware for stage 4 and 5(not including SPL and U-Boot) on the network;

Package option

After we know about the boot stages,

Here are the file list before package for stage 2~4:

  • From source code:
    • From U-Boot: u-boot-spl.bin, u-boot.bin(may use u-boot-nodtb.bin and u-boot.dtb instead),
    • From kernel: kernel Image/zImage file, kernel dtb,
    • From ATF: bl31.bin;
  • From Rockchip binary:
    • ddr, usbplug, miniloader, bl31, (all with chip 'rkxx_'  prefix and with version '_x.xx.bin' postfix);

Here are the types to package image from those files:


U-Boot SPL, with SPL_BACK_TO_BROM option disabled.

mkimage -n rkxxxx -T rksd -d spl/u-boot-spl.bin idbspl.img

Flash the idbspl.img to offset 0x40 which only including stage 2, and need flash stage 3  image to 0x200(which is defineded by CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR), the stage 3 image may be u-boot.bin directly(when there no ATF requirement), or FIT image bl3.itb(for ATF load from SPL, including bl31.bin, u-boot-nodtb.bin and u-boot.dtb).


U-Boot SPL, with SPL_BACK_TO_BROM option enabled:

tools/mkimage -n rkxxxx -T rksd -d spl/u-boot-spl.bin idbloader.img
cat u-boot.bin >> idbloader.img

Flash the idbloader.img to offset 0x40 which including boot stage 2 and 3.

Package the image from Rockchip binary:

tools/mkimage -n rkxxxx -T rksd -d rkxx_ddr_vx.xx.bin idbloader.img
cat rkxx_miniloader_vx.xx.bin >> idbloader.img

Flash the idbloader.img to offset 0x40 which including stage 2, and you will need a uboot.img for boot stage 3.


When using SPL to load the ATF, package the bl31.bin, u-boot-nodtb.bin and uboot.dtb into one FIT image.

tools/mkimage -f fit4spl.its -E bl3.itb

Flash the bl3.itb to offset 0x200, while need idbspl.img flasht to offset 0x40.


When using idbLoader from Rockchip miniloader, need package u-boot.bin into miniloader loadable format by Rockchip tool loaderimage.

tools/loaderimage --pack --uboot u-boot.bin uboot.img

Flash the uboot.img to offset 0x4000 which is stage 3;


When using idbLoader from Rockchip miniloader, need package bl31.bin into miniloader loadable format by Rockchip tool trustmerge.

tools/trustmerge tools/rk_tools/RKTRUST_RKXXXXTRUST.ini

Flash the trust.img to offset 0x6000 which is for using Rockchip miniloader

This is provide by Rockchip in binary mode, which is used for firmware upgrade to eMMC with rkdeveloptool.


This image is package the kernel Image and dtb file into a know filesystem(FAT or EXT2) image for distro boot.

See Install kernel for detail about generate boot.img from kernel zImage/Image, dtb.

Flash the boot.img to offset 0x8000 which is stage 4.


Flash the rootfs.img to offset 0x40000 which is stage 5.

Flash and boot from Media device

Here we introduce how to write image to different Medeia device.

Boot from eMMC

 To get tool 


Flash to the board by USB

In order to flash by USB,you must get your board into ROM boot mode, either by erasing
your MMC or holding the maskrom button when you boot the board.



To create a suitable image and flash it to the board:

tools/mkimage -n rk3288 -T rksd -d spl/u-boot-spl-dtb.bin out<br/> cat u-boot-dtb.bin >> out<br/> sudo upgrade_tool db  ../rkbin/rk32/RK3288UbootLoader_V2.30.06.bin<br/> sudo upgrade_tool wl 64 out<br/> sudo upgrade_tool rd

others : firefly(Recommend using sd card)




To create a suitable image and flash it to the board:

tools/mkimage -n rk3036 -T rksd -d spl/u-boot-spl-dtb.bin out
cat u-boot-dtb.bin >> out
sudo upgrade_tool db  ../rkbin/rk30/RK3036MiniLoaderAll_V2.19.bin
sudo upgrade_tool wl 64 out
sudo upgrade_tool rd



cd ..
./rkbin/tools/trust_merger ./rkbin/tools/RK3399TRUST.ini
cd uboot

../rkbin/tools/loaderimage --pack --uboot u-boot-dtb.bin uboot.img

sudo upgrade_tool UL   ../rkbin/rk33/RK3399MiniLoaderAll_V1.05.bin
sudo upgrade_tool DI uboot uboot.img  ../rkbin/tools/rk3399_parameter.txt 
sudo upgrade_tool DI trust ../trust.img  ../rkbin/tools/rk3399_parameter.txt
sudo upgrade_tool rd





 To flash kernel and rootfs

Enter into the uboot and issue the following command on uboot: (otg should be connected)

gpt write mmc 0 $partitions
ums 0 mmc 0

Now the board will act as an USB-drive.
In host: (assuming sdb is ur device)

sudo mkfs.fat /dev/sdb6

Copy zimage and dts file to dev/sdb6

cp arch/arm/boot/zImage /media/chen/9F35-9565/
cp arch/arm/boot/dts/rk3288-fennec.dtb /media/chen/9F35-9565/rk3288-fennec.dtb

Add extlinux/extlinux.conf to dev/sdb6
(Please notice "mmcblk2p7" and "115200n8" is decide on your chip, Please refer to  Linux_user_guide)

label kernel-4.4
    kernel /zImage
    fdt /rk3288-fennec.dtb
    append  earlyprintk console=tty1 console=ttyS2,115200n8 rw root=/dev/mmcblk2p7 rootfstype=ext4 init=/sbin/init

To flash rootfs

sudo dd if=linaro-rootfs.img of=/dev/sdb7 conv=notrunc


Boot from SD/TF Card

Creating Image

Follow Linux user guide to build kernel and U-Boot.
get uboot-spl.img and u-boot-dtb.img

tools/mkimage -n rk3288 -T rksd -d spl/u-boot-spl-dtb.bin uboot-spl.img


build boot.img

sudo dd if=/dev/zero of=boot.img bs=1M count=128
sudo mkfs.fat boot.img
mkdir boot
sudo mount  boot.img boot
sudo cp zImage boot
sudo cp rk3288-fennec.dtb boot
sudo mkdir boot/extlinux
sudo cp extlinux.conf boot/extlinux
sudo umount boot

Download rootfs image and rename it

mv linaro-rootfs.img rootfs.img


Making a SD Card for updating

Download ramdisk source and build.

sh ./

Format SD card

chen@chen-HP-ProDesk-680-G1-TWR:~/work/linaro-alip/ramdisk/update$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-126613470, default = 2048) or {+-}size{KMGTP}: 8192
Last sector (8192-126613470, default = 126613470) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
sudo umount /dev/sdb1
sudo mkfs.fat /dev/sdb1
tools/mkimage -n rk3288 -T rksd -d spl/u-boot-spl-dtb.bin out&&
sudo dd if=out of=/dev/sdb seek=64&&sudo dd if=u-boot-dtb.img of=/dev/sdb seek=256

Copy zimage, dts and ramdisk to /dev/sdb1

cp arch/arm/boot/zImage /media/chen/9F35-9565/
cp arch/arm/boot/dts/rk3288-fennec.dtb /media/chen/9F35-9565/rk3288-fennec.dtb
cp ../rk-initrd-build/initrd.img /media/chen/9F35-9565/

Add extlinux/extlinux.conf to /dev/sdb1

label kernel-4.4
    kernel /zImage
    fdt /rk3288-fennec.dtb
    initrd /initrd.img
    append  earlyprintk console=ttyS2,115200n8 rw root=/dev/ram0 rootfstype=ext4 init=/sbin/init ramdisk_size=49152

Copy u-boot-dtb.img uboot-spl.img boot.img rootfs.img and to /dev/sdb1

mkdir /media/chen/9F35-9565/update
cp u-boot-dtb.img /media/chen/9F35-9565/update
cp uboot-spl.img /media/chen/9F35-9565/update
cp boot.img /media/chen/9F35-9565/update
cp rootfs.img /media/chen/9F35-9565/update
cp /media/chen/9F35-9565/update

Updating the board

Boot the board and it will flash image to eMMC


Boot from USB-Disk

Same as boot-from-sdcard, but please note that U-Boot aren't allowed to boot from usb-disk because of restrict of maskrom, only kernel and rootfs can load from USB-Disk.


label kernel-4.4
    kernel /zImage
    fdt /rk3288-fennec.dtb
    append  earlyprintk console=ttyS2,115200n8 rw root=/dev/sda1 rootfstype=ext4 init=/sbin/init
gpt write usb 0 $partitions
ums 0 usb 0

Boot from Network