- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.4. 编译和加载
2.4. 编译和加载
2.4. 编译和加载
本章开头的 hello world 例⼦包含了⼀个简短的建⽴并加载模块到系统中去的演⽰.
当然, 整个 程⽐我们⽬前看到的多. 本节提供了更多细节关于⼀个模块作者如何将源
码转换成内核中的运⾏的⼦系统.
2.4.1. 编译模块
第⼀步, 我们需要看⼀下模块如何必须被建⽴. 模块的建⽴ 程与⽤户空间的应⽤程序
的建⽴ 程有显著不同; 内核是⼀个⼤的, 独⽴的程序, 对于它的各个部分如何组合在
⼀起有详细的明确的要求. 建⽴ 程也与以前版本的内核的 程不同; 新的建⽴系统⽤
起来更简单并且产⽣更正确的结果, 但是它看起来与以前⾮常不同. 内核建⽴系统是⼀
头负责的野兽, 我们就看它⼀⼩部分. 在内核源码的 Document/kbuild ⽬录下发现的⽂
件, 任何想理解表⾯之下的真实情况的⼈都要阅读⼀下.
有⼏个前提, 你必须在能建⽴内核模块前解决. 第⼀个是保证你有版本⾜够新的编译器,
模块⼯具, 以及其他必要⼯具. 在内核⽂档⽬录下的⽂件 Documentation/Changes ⼀直
列出了需要的⼯具版本; 你应当在向前⾛之前参考⼀下它. 试图建⽴⼀个内核(包括它
的模块), ⽤错误的⼯具版本, 可能导致不尽的奇怪的难题. 注意, 偶尔地, 编译器的版本
太新可能会引起和太⽼的版本引起的⼀样的问题. 内核源码对于编译器做了很⼤的假
设, 新的发⾏版本有时会⼀时地破坏东西.
如果你仍然没有⼀个内核树在⼿边, 或者还没有配置和建⽴内核, 现在是时间去做了.
没有源码树在你的⽂件系统上, 你⽆法为 2.6 内核建⽴可加载的模块. 实际运⾏为其⽽
建⽴的内核也是有帮助的( 尽管不是必要的 ) .
⼀旦你已建⽴起所有东西, 给你的模块创建⼀个 makefile 就是直截了当的. 实际上, 对
于本章前⾯展⽰的 hello world 例⼦, 单⾏就够了
obj-m := hello.o
熟悉 make , 但是对 2.6 内核建⽴系统不熟悉的读者, 可能奇怪这个 makefile 如何⼯作.
毕竟上⾯的这⼀⾏不是⼀个传统的 makefile 的样⼦. 答案, 当然, 是内核建⽴系统处理
了余下的⼯作. 上⾯的安排( 它利⽤了由 GNU make 提供的扩展语法 )表明有⼀个模块
要从⽬标⽂件 hello .o 建⽴. 在从⽬标⽂件建⽴后结果模块命名为 hello .ko .
反之, 如果你有⼀个模块名为 module .ko , 是来⾃ 2 个源⽂件( 姑且称之为, file 1.c 和
file2.c ), 正确的书写应当是
obj-m := module.o
module-objs := file1.o file2.o
对于⼀个象上⾯展⽰的要⼯作的 makefile , 它必须在更⼤的内核建⽴系统的上下⽂被调
⽤. 如果你的内核源码数位于, 假设, 你的 ~/kernel-2.6 ⽬录, ⽤来建⽴你的模块的 make
命令( 在包含模块源码和 makefile 的⽬录下键⼊ )会是
make -C ~/kernel-2.6 M=`pwd` modules
这个命令开始是改变它的⽬录到⽤ -C 选项提供的⽬录下( 就是说, 你的内核源码⽬录
) . 它在那⾥会发现内核的顶层 makefile . 这个 M= 选项使 makefile 在试图建⽴模块⽬标
前, 回到你的模块源码⽬录. 这个⽬标, 依次地, 是指在 obj -m 变量中发现的模块列表,
在我们的例⼦⾥设成了 module .o .
键⼊前⾯的 make 命令⼀会⼉之后就会感觉烦, 所以内核开发者就开发了⼀种 makefile
⽅式, 使得⽣活容易些对于那些在内核树之外建⽴模块的⼈. 这个窍门是如下书写你的
makefile
If KERNELRELEASE is defined, weve been invoked from the
kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
Otherwise we were called directly from the command
line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD :
您可能关注的文档
- 02Creo渲染之外观库.pdf
- 02汉字结构信息编码速查手册使用说明.pdf
- 03-2 关系数据库标准语言SQL(续1).ppt
- 03--PS--在PS中怎样将选区转换为图层蒙版.pdf
- 03-防火墙配置.pdf
- 03-802.1x典型配置案例.pdf
- 03-并行计算_多核开发技术.pdf
- 03第三章 数据类型、运算符与表达式.ppt
- 04-PPP配置.pdf
- 04-认证及安全配置.pdf
- 2024年民主生活会前集中学习研讨发言提纲.docx
- 单位领导班子2024年民主生活会对照检查材料(围绕“四个带头”).docx
- 教育系统党组班子2024年民主生活会个人对照检查材料(会前准备工作+四个带头+典型案例).docx
- 国有企业领导人员2024年度民主生活会对照检查材料.docx
- 区委书记2024年度民主生活会个人对照检视发言材料.docx
- 领导干部2024年民主生活会、组织生活会对照检查发言提纲(四个带头).docx
- 在2024年总结表彰暨2025年工作部署大会上的讲话.docx
- 乡镇领导干部2024年度专题民主生活会、组织生活会对照检查材料.docx
- 领导干部2024年民主生活会、组织生活会对照检查材料(四个带头+落实意识形态责任制).docx
- 区委社会工作部副部长2024年度民主生活会发言提纲.docx
文档评论(0)