之前都是使用 uboot 通過 zImage+dtb的方式來啓動內核。後面需要通過 uImage來啓動。方式如下:
先編譯好 uImage 參考我之前的一篇博客編譯uImage
uboot傳遞設備樹
uboot從v1.1.3開始支持設備樹,爲了使用設備樹,需要在config文件裏配置
#define CONFIG_OF_LIBFDT
在uboot中可以從nandflash mmc sd tftp 任意介質中讀取.dtb,假設 .dtb文件在內存的地址爲 0x71000000,之後可以再uboot中運行fdt addr 命令設置.dtb的地址
Uboot> fdt addr 0x71000000
fdt的其他命令就變得可以使用,如
fdt resize
fdt print
然後下載 uImage dtb
對於arm來講,啓動命令的格式
bootm kernel_addr initrd_addr dtb_addr
第一個參數是內核地址,第二個參數是initrd的地址(如果不存在initrd,可以用 “-”代替),第三個參數是設備樹地址
這裏向kernel_addr地址下載的文件是 uImage
編譯 uImage是需要指定loadaddr,loadaddr的值就是這裏的kernel_addr值
編譯uImage的命令如下:
make -j 16 ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- LOADADDR=0x12000000 uImage