问个比较土的问题 关于entry address的问题

softwarewander 2009-04-09 05:32:56
我在一个贴子上看到如下信息,是mips平台下的2.6xx的linux 内核, 但是有点奇怪和困惑

Booting from previous image (0xbe020000) ...
Code Address: 0x80010000, Entry Address: 0x80257018
Decompression OK!
Entry at 0x80257018

为什么code address 和 entry address 差那么远呢?

entry address 不就是内核code的起始执行点吗?那一般也就是txt段的开始,那应该和内核的展开地址一样才对啊?
...全文
144 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
softwarewander 2009-04-10
  • 打赏
  • 举报
回复
是啊,虽然不一定是bin的起始位置
但是我就想问一下, elf的entry point 竟然和 code address 相差1M多, 就奇怪了, 那么在链接的时候前面都链了些什么东西,竟然那么大。
独孤过儿 2009-04-10
  • 打赏
  • 举报
回复
個人覺得,Entry address是實際執行的第一條指令的首地址。這個地址看上去應該是個虛擬地址,在OS啟動的時

候,應該會有虛擬地址到物理地址的映射轉換。

而0x80010000,這個應該是整個程序映像載入的虛擬首地址。很顯然這兩個地址之間存在有偏移,而偏移應該載

入的是一些描述這個程序映像的信息,也就是一些頭。

fly_new 2009-04-10
  • 打赏
  • 举报
回复
首先你那个code address是不是指RO_BASE_ADDR,就是代码段(.text)的起始地址?

编译器在排列你的text里的符号的时候,有默认规则的,这个需要查对应链接器,entry address和这个排列顺序没必然联系,通常entry只要在代码段那就是了。比如:
有两个函数void fun()和main()
我链接的时候,指定main为入口;如果链接器按照每个输入符号的首字母依次排序,来安排一个text的内容,那fun函数当然就比main函数靠前了,而程序的entry入口点或许在它后面很多。

如果你要指定每个输入符号或者section的排列顺序,可以使用对应选项,具体不记得,很少用。
morris88 2009-04-09
  • 打赏
  • 举报
回复
貌似你说的 Entry Address 指的就是 kernel_entry 函数吧,这个是由 lds 指定的。至于包含 kernel_entry 函数的文件是否一定位于bin可执行文件的起始位置,貌似应该由 Makefile 指定的连接次序决定。ELF 头只需要指明这个 bin 文件的 entry point 就行了,打印的 Entry Address 就是 bootloader 从 ELF 头中提取的 entry point。
softwarewander 2009-04-09
  • 打赏
  • 举报
回复
恳请大家说一下阿,很疑惑。

softwarewander 2009-04-09
  • 打赏
  • 举报
回复
完全不一样, 一个cache 一个不可以cache 这个我当然知道。
这个是boot过程的信息。 至于用什么boot是uboot还是其他的hardcoded bootloader我们就不好说了。

Booting from previous image (0xbe020000) ...
这肯定是还在flash的时候打印的。
Code Address: 0x80010000, Entry Address: 0x80257018
有可能是根据一些ld文件的地址符号而打印出来的。

但是不管什么bootloader, 我的问题是为什么 Code Address 和Entry Address: 不是一样, 而且还差那么远?
morris88 2009-04-09
  • 打赏
  • 举报
回复
那个是MIPS硬件相关的,启动代码从0xb000,0000段启动后跳转到0x8000,0000段继续执行,当然这两段也有其特殊含义。其实0xb000,0000和0x8000,0000段的内容是一样的。貌似一个是cacheable,一个是uncached的吧。

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧