没有合适的资源?快使用搜索试试~ 我知道了~
首页Linker+Script+in+Linux
资源详情
资源评论
资源推荐

Linker Script in Linux
1
Linker
Linker
Linker
Linker
Script
Script
Script
Script
in
in
in
in
Linux
Linux
Linux
Linux
——
——
——
——
vmlinux_32.lds.S
vmlinux_32.lds.S
vmlinux_32.lds.S
vmlinux_32.lds.S
与
与
与
与
vmlinux
vmlinux
vmlinux
vmlinux
Author:
Author:
Author:
Author:
ZX_WING
ZX_WING
ZX_WING
ZX_WING
(xing5820@163.com)
(xing5820@163.com)
(xing5820@163.com)
(xing5820@163.com)
(本文基于 2.6.27-rc2
2.6.27-rc2
2.6.27-rc2
2.6.27-rc2
内核版本)

Linker Script in Linux
2
写在前面的话
经常在内核中看到一些由链接脚本提供的全局变量,但一直不清楚链接脚本的工作原
理,这是件非常不爽的事情。最近刚做完一个 task ,于是抽了点时间学习了一下连接脚本 的
语法,配合 Linux 下 x86 平台的 vmlinux_32.lds.S 文件及编译生成的未压缩的内核
—— vmlinux ,学习了内核是如何通过链接脚本生成最后的 image 的。写下这篇文章,供感
兴趣的朋友参考。小弟对链接器知之甚少,文中难免有错, 希望发现错误的朋友发信到
xing5820@163.com
,我好及时纠正: )
( 版权声明:本文欢迎转载。但未经允许不得用于商业目的 )

Linker Script in Linux
3
内容提要
本文简单的介绍了理解内核链接脚本需要的链接器知识和链接脚本语法,从
vmlinux_32.lds.S 文件分析了内核 image 的构成,并着重讲解了使用自定义 section 配合链 接
脚本动态创建表的方法。这里或许有一些你经常看到但不了解原理的东西,例如 “ 内核导出
符号表是如何创建的? ”
、
“ __initcall 修饰的函数在什么时候被内核调用? ”
、
“ __initdata 是 否
会被释放? ” 等。

Linker Script in Linux
4
Revision
Revision
Revision
Revision
History
History
History
History
日期
版本
描述
2008.9.18
1.0
最初发表版本

Linker Script in Linux
5
1.
1.
1.
1.
什么是链接脚本
链接器主要有两个作用, 一是将若干输入文件 ( .o 文件) 根据一定规则合并为一个输 出
文件(例如 ELF 格式的可执行文件) ;一是将符号与地址绑定(当然加载器也要完成这一 部
分工作) 。关于链接器的工作机制可以参考《 Linker and Loader 》一书,本文只关心它的第 一
个功能,即如何根据一定规则将一个或多个输入文件合并成输出文件。这里的 “ 一定规则 ”
是通过链接脚本描述的。 链接器有一个编译到其二进制代码中的默认链接脚本, 大多数情 况
下使用它链接输入文件并生成目标文件。 当然, 我们也可以提供自定义的脚本以精确控制 目
标文件的格 式,如同 Linux 内核做得那样,链接器 “ - T ” 参数用于指定自定义的脚本文件。
链接脚本有自己的一套语法,本文无意对它进行过多论述,后文描述 vmlinux_32.lds.S
内容时会对内核用到的语法进行解释。 如果你希望了解完整的脚本语法, 可以阅读参考文 献
1 。
2.
2.
2.
2.
一些准备知识
说起链接器, ELF 文件格式通常是绕不开的,介绍它的文档多不胜数。 实际上, 对于 了
解链接脚本,我们完全没必要去学习 ELF 的具体格式,有一个全局的视图就足够了(当然
,
了解 ELF 格式会让事情变得轻松,你可以很轻易的将脚本中的某些元素和 ELF 格式中的 一
些字段联系起来,例如后面看到的 PHDRS 关键字就很容易和 ELF
的程序头部表关联) 。
图 1. 链接器视图 overview (摘自《 ELF 文件格式分析》 ,滕启明)
图 1 展示了从链接器的角度, 如何看待输入文件和输出文件的视图。 左边的 “ 链接视图 ”
剩余21页未读,继续阅读

















mmzhij
- 粉丝: 5
- 资源: 50
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- ARM Cortex-A(armV7)编程手册V4.0.pdf
- ABB机器人保养总结解析.ppt
- 【超详细图解】菜鸡如何理解双向链表的python代码实现
- 常用网络命令的使用 ipconfig ping ARP FTP Netstat Route Tftp Tracert Telnet nslookup
- 基于单片机控制的DC-DC变换电路
- RS-232接口电路的ESD保护.pdf
- linux下用time(NULL)函数和localtime()获取当前时间的方法
- Openstack用户使用手册.docx
- KUKA KR 30 hA,KR 60 hA机器人产品手册.pdf
- Java programming with JNI
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0