Difference between revisions of "Boot option"
Line 157: | Line 157: | ||
**boot.img or boot folder with zImage, dtb and exitlinulx inside | **boot.img or boot folder with zImage, dtb and exitlinulx inside | ||
**rootfs.img | **rootfs.img | ||
+ | |||
Line 169: | Line 170: | ||
Example commands for flash image to target. | Example commands for flash image to target. | ||
− | *For armv7 with SPL with SPL_BACK_TO_BROM option enabled: | + | *For armv7 with SPL with SPL_BACK_TO_BROM option enabled(rk3036, rk3188, rk3288): |
<pre style="margin-left: 40px;">rkdeveloptool db rkxx_loader_vx.xx.bin | <pre style="margin-left: 40px;">rkdeveloptool db rkxx_loader_vx.xx.bin | ||
rkdeveloptool wl 0x40 idbLoader.img | rkdeveloptool wl 0x40 idbLoader.img | ||
Line 177: | Line 178: | ||
</pre> | </pre> | ||
− | *For armv7 with SPL with SPL_BACK_TO_BROM option disabled: | + | *For armv7 with SPL with SPL_BACK_TO_BROM option disabled(rk3288): |
− | |||
<pre style="margin-left: 40px;">rkdeveloptool db rkxx_loader_vx.xx.bin | <pre style="margin-left: 40px;">rkdeveloptool db rkxx_loader_vx.xx.bin | ||
rkdeveloptool wl 0x40 idbspl.img | rkdeveloptool wl 0x40 idbspl.img | ||
Line 187: | Line 187: | ||
</pre> | </pre> | ||
− | *For armv7 with miniloader | + | *For armv7 with miniloader(rk3036, rk3188, rk3288) |
− | |||
<pre style="margin-left: 40px;">rkdeveloptool db rkxx_loader_vx.xx.bin | <pre style="margin-left: 40px;">rkdeveloptool db rkxx_loader_vx.xx.bin | ||
rkdeveloptool wl 0x40 idbLoader.img | rkdeveloptool wl 0x40 idbLoader.img | ||
Line 199: | Line 198: | ||
| | ||
− | *For armv8 with SPL: | + | *For armv8 with SPL(rk3399): |
<pre style="margin-left: 40px;">rkdeveloptool db rkxx_loader_vx.xx.bin | <pre style="margin-left: 40px;">rkdeveloptool db rkxx_loader_vx.xx.bin | ||
rkdeveloptool wl 0x40 idbspl.img | rkdeveloptool wl 0x40 idbspl.img | ||
Line 208: | Line 207: | ||
</pre> | </pre> | ||
− | *For armv8 with miniloader | + | *For armv8 with miniloader(rk3399, rk3328) |
− | |||
<pre style="margin-left: 40px;">rkdeveloptool db | <pre style="margin-left: 40px;">rkdeveloptool db | ||
rkdeveloptool wl 0x40 idbLoader.img | rkdeveloptool wl 0x40 idbLoader.img |
Revision as of 04:07, 22 March 2017
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:
idbspl.img
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).
idbloader.img
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.
bl3.itb
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.
uboot.img
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;
trust.img
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
rkxx_loader_vx.xx.xxx.bin
This is provide by Rockchip in binary mode, which is used for firmware upgrade to eMMC with rkdeveloptool.
boot.img
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.
rootfs.img
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.
Get image Ready:
- For armv7 with SPL with SPL_BACK_TO_BROM option enabled:
- idbLoader.img
- boot.img or boot folder with zImage, dtb and exitlinulx inside
- rootfs.img
- For armv7 with SPL with SPL_BACK_TO_BROM option disabled:
- idbspl.img
- uboot.bin
- boot.img or boot folder with zImage, dtb and exitlinulx inside
- rootfs.img
- For armv7 with miniloader
- idbLoader.img
- uboot.img
- boot.img or boot folder with zImage, dtb and exitlinulx inside
- rootfs.img
- For armv8 with SPL:
- idbspl.img
- bl3.itb
- boot.img or boot folder with zImage, dtb and exitlinulx inside
- rootfs.img
- For armv8 with miniloader
- idbLoader.img
- uboot.img
- trust.img
- boot.img or boot folder with zImage, dtb and exitlinulx inside
- rootfs.img
Boot from eMMC
The eMMC is on the hardware board, so we need:
- Get the board into maskrom mode;
- Connect the target to PC with USB cable;
- Flash the image to eMMC with rkdeveloptool
Example commands for flash image to target.
- For armv7 with SPL with SPL_BACK_TO_BROM option enabled(rk3036, rk3188, rk3288):
rkdeveloptool db rkxx_loader_vx.xx.bin rkdeveloptool wl 0x40 idbLoader.img rkdeveloptool wl 0x8000 boot.img rkdeveloptool wl 0x40000 rootfs.img rkdeveloptool rd
- For armv7 with SPL with SPL_BACK_TO_BROM option disabled(rk3288):
rkdeveloptool db rkxx_loader_vx.xx.bin rkdeveloptool wl 0x40 idbspl.img rkdeveloptool wl 0x200 uboot.bin rkdeveloptool wl 0x8000 boot.img rkdeveloptool wl 0x40000 rootfs.img rkdeveloptool rd
- For armv7 with miniloader(rk3036, rk3188, rk3288)
rkdeveloptool db rkxx_loader_vx.xx.bin rkdeveloptool wl 0x40 idbLoader.img rkdeveloptool wl 0x4000 uboot.img rkdeveloptool wl 0x8000 boot.img rkdeveloptool wl 0x40000 rootfs.img rkdeveloptool rd
- For armv8 with SPL(rk3399):
rkdeveloptool db rkxx_loader_vx.xx.bin rkdeveloptool wl 0x40 idbspl.img rkdeveloptool wl 0x200 bl3.itb rkdeveloptool wl 0x8000 boot.img rkdeveloptool wl 0x40000 rootfs.img rkdeveloptool rd
- For armv8 with miniloader(rk3399, rk3328)
rkdeveloptool db rkdeveloptool wl 0x40 idbLoader.img rkdeveloptool wl 0x4000 uboot.img rkdeveloptool wl 0x6000 trust.img rkdeveloptool wl 0x8000 boot.img rkdeveloptool wl 0x40000 rootfs.img rkdeveloptool r
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 ./mk-initrd.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 PARTITIONS!! 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 update.sh 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 update.sh /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.
Difference:
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