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芯片手册上有定义的

  1. 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 的编译构成结束。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值