主题 : .lds文件如何确定代码入口 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 110267
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2014-11-19
最后登录: 2017-01-15
楼主  发表于: 2015-04-20 14:04

 .lds文件如何确定代码入口

以下是韦东山书本里的示例代码,如何确定代码的入口在哪呢?
SECTIONS {
    . = 0x30000000;
    .text          :   { *(.text) }
    .rodata ALIGN(4) : {*(.rodata)}
    .data ALIGN(4) : { *(.data) }
    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }
}

在U_BOOT的连接文件里有下面几行代码:

. = 0x00000000;/*;从0x0位置开始*/
. = ALIGN(4);/*代码以4字节对齐*/
.text :
{
  cpu/arm920t/start.o (.text)
    /*代码的第一个代码部分*/  
  *(.text)
}
这一段代码可以看出入口是在start.o   但是我第一个例子是如何确定的,求教!!!
级别: 新手上路
UID: 110267
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2014-11-19
最后登录: 2017-01-15
1楼  发表于: 2015-04-20 15:36

 回 楼主(yaktu) 的帖子

纠结了一个下午,在makefile里面有这么一行:
objs :=head.o init.o interrupt.o main.o
连接用到的文件  head.o在第一位  在链接脚本没确定链接顺序的前提下默认按照上面的顺序 把文件链接起来!
经实验:在调换顺序的情况下,把生成的.bin文件用反汇编生成汇编文件查看,确实不一样,程序入口不一样了!
所以本人大胆猜测在链接脚本没确定入口的请况下,makefile的objs :=head.o init.o interrupt.o main.o确定了链接顺序,程序入口就是第一个文件。
因为找不到相关资料也不敢说自己正确,希望有大神给个明确答案!