天天看點

u-boot編譯構成之 MLO(1)UBOOT啟動過程本文檔硬體:Ti J6entry (Dra71x )Uboot 源碼:Ti 官網下載下傳

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晶片手冊上有定義的

u-boot編譯構成之 MLO(1)UBOOT啟動過程本文檔硬體:Ti J6entry (Dra71x )Uboot 源碼:Ti 官網下載下傳
  1. MLO 構成

① u-boot-spl.multidtb.fit  dra71-dcard.dtb鏡像檔案

u-boot編譯構成之 MLO(1)UBOOT啟動過程本文檔硬體:Ti J6entry (Dra71x )Uboot 源碼:Ti 官網下載下傳

利用mkimage工具将dra71-dcard.dtb檔案制作為鏡像

② u-boot-spl

u-boot編譯構成之 MLO(1)UBOOT啟動過程本文檔硬體:Ti J6entry (Dra71x )Uboot 源碼:Ti 官網下載下傳

将編譯的.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 的編譯構成結束。