u-boot.lds 文件分析
指定輸出的格式是32bits ARM 小端
OUTPUT_FORMAT原型為 OUTPUT_FORMAT(default, big, little),在鏈接的時候,如果使用了-EB的命令行參數,則使用這里的big參數指定的字節序,如果使用了-EL的命令行參數,則使用這里的little參數指定的字節序,如果沒有使用任何命令行參數,則使用這里的default參數指定的字節序。由uboot.lds中的定義可見,不管在鏈接的時候使用了何種命令行參數,輸出的目標文件都是使用elf32-littlearm方式的字節序。
28 OUTPUT_ARCH(arm)
指出輸出可執行文件的平臺是armd
29 ENTRY(_start)
指定輸出可執行文件的起始代碼段是_start
31 {
32 ? ? . = 0x00000000;
33
34 ? ? . = ALIGN(4);
35 ? ? .text ? :
36 ? ? {
37 ? ? ? ? cpu/arm_cortexa8/start.o ? ?(.text)
38 ? ? ? ? *(.text)
39 ? ? }
32行對定位計數器進行賦值,.=0x00000000對定位計數器初始化為0x0
34 行使得當前定位計數器向四字節對齊
35~39定義了一個輸出節 .text,冒號是語法需要。.text后花括號中,列出了所有應當放到這個輸出節中的輸入節的名字,*是一個通配符,匹配任何文件名,
37行表示要把/cpu/arm_cortexa8/start.o中的.text輸入節放入這個輸出文件的.text輸出節。
38行*(.text)的意思是所有的輸入文件中的.text輸入節;
42 ? ? .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
41 修改當前定位寄存器,使的下面的.rodata輸出節與4bytes對齊
42 定義.rodata輸出節為所有文件的.rodata輸入節
45 ? ? .data : { *(.data) }
46
47 ? ? . = ALIGN(4);
48 ? ? .got : { *(.got) }
44 ~ 48 .data和.got輸出節的定義類似于.rodata,要求這兩個輸出節要以4 bytes對齊
51 ? ? .u_boot_cmd : { *(.u_boot_cmd) }
52 ? ? __u_boot_cmd_end = .;
50 把__u_boot_cmd_start設置為當前定位技術器,即.u_boot_cmd節的起始位置
52 把__u_boot_cmd_end設置為當前定位計數器,即.u_boot_cmd節的結束位置
51 定義.u_boot_cmd輸出節為所有輸入文件的.u_boot_cmd輸入節
55 ? ? __bss_start = .;
56 ? ? .bss : { *(.bss) }
57 ? ? _end = .;
58 }
定義.bss輸出節,并且把__bss_start定義為__bss_start輸出節的起始位置,把_end定義為__bss節的結束位置
轉載于:https://blog.51cto.com/7090376/1264611
總結
以上是生活随笔為你收集整理的u-boot.lds 文件分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习PHP时的一些总结(五)
- 下一篇: centos6实现kvm嵌套虚拟化