- 论坛徽章:
- 0
|
5可用积分
交谈中请勿轻信汇款、中奖消息,勿轻易拨打陌生电话。
请教大侠帮忙
这是一个uboot的连接文件,
/*u-boot.lds*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0x00000000;//能否解释一下 “.=”“.”是什么意思?
. = ALIGN(4);
.text :
{
cpu/arm920t/start.o (.text)
*(.text)
}
//另外,也不知道下面这几句代码的具体作用,只是知道是代码。
. = ALIGN(4);
.rodata : { *(.rodata) }
. = ALIGN(4);
.data : { *(.data) }
. = ALIGN(4);
.got : { *(.got) }
. = .; //这一句这样写是什么意思?天书啊。。
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) }
_end = .;
}
问题如下:
上述文件指定bootloader连接的入口点(_start),同时又定bootloader在flash中的地址为0x0。对吧?指定bootloader在flash中的地址0x0,是不是多此一举呢?因为即使不指定的话,bootloader编译好后,烧写的时候也可以吧bootloader烧写到到flash中的地址0x0处。
这种奇怪的语法格式,各位大侠能不能解释一下。。很多的“点”不知道什么意思。。。什么作用。。
谢谢。 |
最佳答案
查看完整内容
我想明白了,这应该类似于宏,而不是变量代码中出现N个__u_boot_cmd_start,遍好的文件中会为分配N个存储空间,并对应着N个Elf32_Rel重定位项. 连接器还会分配一个Elf32_Sym,指明__u_boot_cmd_start的值,最后连接或者动态连接时,更新N个Elf32_Rel重定位项,既更新了N个存储空间.虽然确实有分配空间,但是却不是变量, __u_boot_cmd_start对应的全部都是重定位项,显然不能&__u_boot_cmd_start.说宏也有些勉强,因为编译成位置无关的话,,在 ...
|