



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、linux 模块编译步骤(原)本文将直接了当的带你进入 linux 的模块编译。当然在介绍的过程当中,我也会添加一些必要的注释,以便初学者能够看懂。之所以要写这篇文章,主要是因为从书本上学的话,可能要花更长的时间才能学会整个过程,因为看书的话是一个学习过程,而我这篇文章更像是一个培训。所以实践性和总结性更强。通过本文你将会学到编译一个模块和模块 makefile 的基本知识。以及加载(卸载)模块,查看系统消息的一些知识;声明:本文为初学者所写,如果你已经是一个 linux 模块编译高手,还请指正我文章中的错误和不足,谢谢第一步:准备源代码首先我们还是要来编写一个符合 linux 格式的模块文件
2、,这样我们才能开始我们的模块编译。假设我们有一个源文件 mymod.c。它的源码如下:mymodules.c1. #include/*引入与模块相关的宏*/2. #include/*引入 module_init()module_exit()函数*/3. #include/*弓 I 入 module_param()*/45. MODULE_AUTHOR(YuQiang);6. MODULE_LICENSE(GPL);7.8. staticintnbr=10;9. module_param(nbr,int,S_IRUGO);10.11. staticint_inityuer_init(void)1
3、2. 13.inti;14.for(i=0;inbr;i+)15.16.printk(KERN_ALERTHello,Howareyou.%dn,i);17.18.return0;19. 20.21. staticvoid_exityuer_exit(void)22. 23. printk(KERN_ALERTIcomefromyuersmodule,Ihavebeenunlad.n);24. 25.26. module_init(yuer_init);27. module_exit(yuer_exit);我们的源文件就准备的差不多了,这就是一个 linux 下的模块的基本结构。第 9 行是导
4、出我们的符号变量 nbr。这样在你加载这个模块的时候可以动态修改这个变量的值。稍后将演示。yuer_init()函数将在模块加载的时候运行,通过输出的结果可以看到我们的模块是否加载成功。第二步:编写 Makefile 文件首先还是来看看我们 Makefile 的源文件,然后我们再来解释;Makefileobj-m:=modules.o#要生成的模块名modules-objs:=mymod.o#生成这个模块名所需要的目标文件KDIR:=/lib/modules/uname-r/buildPWD:=$(shellpwd)default:make-C$(KDIR)M=$(PWD)modulescle
5、an:rm-rf*.o.*.cmd*.ko*.mod.c.tmp_versions现在我来说明一下这个 Makefile。请记住是大写的 Makefile 而不是小写的 makefile;obj-m:这个变量是指定你要声称哪些模块模块的格式为 obj-m:=模块名.omodules-objs:这个变量是说明声称模块 modules 需要的目标文件格式要求模块名-objs:=目标文件切记:模块的名字不能取与目标文件相同的名字。如在这里模块名不能取成 mymod;KDIR:这是我们正在运行的操作系统内核编译目录。也就是编译模块需要的环境M=:指定我们源文件的位置PWD:这是当前工作路径$(shel
6、l)是 make 的一个内置函数。用来执行 shell 命令。第三步:编译模块现在我们已经准备好了我们所需要的源文件和相应的 Makefile。我们现在就可以编译了。在终端进入源文件目录输入 make运行结果:make1:Enteringdirectory/usr/src/linux-headers-2.6.24-24-genericCCM/home/yuqiang/桌面/mymodule/mymodules.oLDM/home/yuqiang/桌面/mymodule/modules.oBuildingmodules,stage2.MODPOST1modulesCC/home/yuqiang/
7、桌面/mymodule/modules.mod.oLDM/home/yuqiang/桌面/mymodule/modules.komake1:Leavingdirectory/usr/src/linux-headers-2.6.24-24-generic第四步:加载/卸载我们的模块从上面的编译中我可以看到。已经有一个 modules.ko 生成了。这就是我们的模块了。现在我们就可以来加载了。首先在终端输入:sudoinsmodmodules.ko现在我们来看看我们的模块加载成功没有呢?在终端车入:dmesg|tail-12 这是查看内核输出信息的意思。tail-12 显示最后 12 条;显示结果
8、如下:17945.024417sd9:0:0:0:Attachedscsigenericsg2type018046.790019usb5-8:USBdisconnect,address919934.224812Hello,Howareyou.019934.224817Hello,Howareyou.119934.224818Hello,Howareyou.219934.224820Hello,Howareyou.319934.224821Hello,Howareyou.419934.224822Hello,Howareyou.519934.224824Hello,Howareyou.61993
9、4.224825Hello,Howareyou.719934.224826Hello,Howareyou.819934.224828Hello,Howareyou.9看到了吧。我们的模块的初始化函数 yuer_init();已经成功运行了。说明我们的模块已经加载成功;现在我们再来卸载模块试试看。在终端输入:sudormmodmodules在终端车入:dmesg|tail-319934.224826Hello,Howareyou.819934.224828Hello,Howareyou.920412.046932Icomefromyuersmodule,Ihavebeenunlad.可以从打印的
10、信息中看到,我们的模块的退出函数已经被执行了。说明我们的模块已经被成功的卸载了。到目前位置我们就已经算是对模块的编译到编译运行算是有了一个整体上的认识了。对于以后深入的学习还是应该有点帮助的。下面我们将在看看于模块相关的一些简单的操作。第五步:加载模块时传递参数在终端输入:sudoinsmodmodule_name.konbr=4在终端输入:dmesg|tail-6显示结果如下:20800.655694Hello,Howareyou.921318.675593Icomefromonefilemodule,Ihavebeenunlad.21334.425373Hello,Howareyou.02
11、1334.425378Hello,Howareyou.121334.425380Hello,Howareyou.221334.425381Hello,Howareyou.3这样我们就可以看到在模块加载的时候动态设置了我们的一个变量。初始化函数中的循环只执行了 4 次。可能你会问我怎么知道一个模块可以设置那些变量呢。当然,你可以先不设变量加载一次。然后可以在终端输入ls/sys/module/parameters/来查看。在这里我们是这样输入的在终端输入:ls/sys/moedle/modules/parameters/显不结果:nbr如果我们的模块加载成功了。最后我们还可以通过 modinfo
12、 来查看我们的模块信息。如下在终端输入:sudomodinfomodules.ko显不结果:filename:modules.kolicense:GPLauthor:YuQiangsrcversion:20E9c3c4E02D130E6E92533depends:vermagic:2.6.24-24-genericSMPmod_unload586parm:nbr:int本文总结:本文的相关知识都好像有一点浅尝辙止的感觉。因为本篇文章主要是通过一条线式方式来讲解了模块编写的相关过程,其实在这个过程中还有很多可以发散的地方。例如:在写到 MODULE_AUTHOR(YuQiang)的时候,你应该想到还有MODULE_DESCRIPTION(模块用途的简单描述);MODULE_VERSION(模块的版本字符串);MODULE_ALIAS(模
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 武昌职业学院《功能高分子材料》2023-2024学年第二学期期末试卷
- 成都理工大学《材料分析测试技术(B)》2023-2024学年第二学期期末试卷
- 湖南邮电职业技术学院《广告美学》2023-2024学年第二学期期末试卷
- 沈阳药科大学《护理传染学》2023-2024学年第二学期期末试卷
- 山西传媒学院《太阳能光伏发电系统设计》2023-2024学年第二学期期末试卷
- 铁岭师范高等专科学校《数字图像处理B》2023-2024学年第二学期期末试卷
- 山西铁道职业技术学院《电力系统分析课程设计》2023-2024学年第二学期期末试卷
- 三门峡社会管理职业学院《传感器与自动检测技术实验》2023-2024学年第二学期期末试卷
- 2024年射频同轴电缆组件资金申请报告代可行性研究报告
- 2024年印布油墨项目投资申请报告代可行性研究报告
- 化工仪表及自动化期末A卷
- 2023年国家基本药物制度
- 阿里巴巴java开发手册-阿里系
- 太阳能-自动跟踪-系统设计32
- 神经重症康复中国专家共识-医学课件
- 机电一体化技术专业简历
- 河南省铭玮昊化工科技有限公司年产1000吨溴硝醇、100吨磺酰胺、200吨叔丁酯项目环境影响报告书
- 书画艺术品买卖合同
- 小石狮【经典绘本】
- 大学计算机基础实验教程(高守平第2版)
- 2023年广东深圳市检察机关招录劳动合同制书记员150人笔试模拟试题及答案解析
评论
0/150
提交评论