UBOOT啟動過程
SOC内部ROM,依據外部硬體設定的啟動跳線,從相應的媒體啟動系統。啟動跳線設定請看晶片手冊。
1.系統上電;
2.SOC 内部ROM啟動;
3.依據硬體設定的啟動方式,從相應的媒體下載下傳MLO到soc内部的ram中運作;
4. MLO運作以後再去加載u-boot.img 到RAM中以後;
5.此時MLO退出,U-Boot.img運作;
本文檔硬體:Ti J6entry (Dra71x )
Uboot 源碼:Ti 官網下載下傳
制作MLO, 請檢視.MLO.cmd:
cmd_MLO := ./tools/mkimage -T omapimage -a 0x40300000 -d spl/u-boot-spl.bin MLO > /dev/null
參數 –a 表示MLO運作的入口位址;
①上面指令的含義是用mkimage工具給u-boot-spl.bin加了一個0x40位元組的header,指明了MLO被soc内部程式加載到内部ram 0x40300000位址上執行。
②該入口位址是soc晶片手冊上有定義的
- MLO 構成
① u-boot-spl.multidtb.fit dra71-dcard.dtb鏡像檔案
利用mkimage工具将dra71-dcard.dtb檔案制作為鏡像
② u-boot-spl
将編譯的.o 檔案連結為u-boot-spl
注意連結過程中使用了: –T u-boot-spl.lds -Ttext 0x40300000
-Ttext:指明bootloader程式在以0x40300000為起始的位址空間内。
③ u-boot-spl.lds 連結腳本,arch/arm/mach-omap2/u-boot-spl.lds
MEMORY { .sram : ORIGIN = 0x40300000, LENGTH = ((0x4037C000 - 0x00000400) - 0x40300000) } 片内記憶體 MEMORY { .sdram : ORIGIN = 0x80a00000, LENGTH = 0x80000 } 片外記憶體 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { .text : 代碼段 { __start = .; *(.vectors) arch/arm/cpu/armv7/start.o (.text*) *(.text*) } >.sram . = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.sram . = ALIGN(4); .data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram 代碼段,資料段位于40300000, . = ALIGN(4); .u_boot_list : { KEEP(*(SORT(.u_boot_list*))); } >.sram . = ALIGN(4); __image_copy_end = .; .end : { *(.__end) } _image_binary_end = .; .bss : { . = ALIGN(4); __bss_start = .; *(.bss*) BSS 段資料存放在0x80a00000這個位址為開始,長度 . = ALIGN(4); 為0x800000的空間内 __bss_end = .; } >.sdram } 檢視u-boot-spl.map檔案可以觀察編譯後的位址配置設定。 |
④ u-boot-spl-nodtb.bin(spl/u-boot-sp-> u-boot-spl-nodtb.bin )
arm-linux-gnueabihf-objcopy -j .text -j .secure_text -j .secure_data -j .rodata -j .hash -j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn -j .binman_sym_table -j .dtb.init.rodata -O binary spl/u-boot-spl spl/u-boot-spl-nodtb.bin |
⑤ u-boot-spl-dtb.bin
cat spl/u-boot-spl-nodtb.bin spl/u-boot-spl.multidtb.fit > spl/u-boot-spl-dtb.bin |
⑥ u-boot-spl.bin
cp spl/u-boot-spl-dtb.bin spl/u-boot-spl.bin |
至此,MLO 的編譯構成結束。