u-boot编译构成之 MLO(1)
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 的编译构成结束。