- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式Linux内核模块的配置与编译
嵌入式Linux内核模块的配置与编译一、简介 ??? 随着 Linux操作系统在嵌入式领域的快速发展,越来越多的人开始投身到这方面的开发中来。但是,面对庞大的Linux内核源代码,开发者如何开始自己的开发工作,在完成自己的代码后,该如何编译测试,以及如何将自己的代码编译进内核中,所有的这些问题都直接和Linux的驱动的编译以及Linux的内核配置系统相关。 ??? 内核模块是一些在操作系统内核需要时载入和执行的代码,它们扩展了操作系统内核的功能却不需要重新启动系统,在不需要时可以被操作系统卸载,又节约了系统的资源占用。设备驱动程序模块就是一种内核模块,它们可以用来让操作系统正确识别和使用使用安装在系统上的硬件设备。 ??? Linux内核是由分布在全球的Linux爱好者共同开发的,为了方便开发者修改内核,Linux的内核采用了模块化的内核配置系统,从而保证内核扩展的简单与方便。 ??? 本文通过一个简单的示例,首先介绍了如何在Linux下编译出一个内核模块,然后介绍了Linux内核中的配置系统,讲述了如何将一个自定义的模块作为系统源码的一部分编译出新的操作系统,注意,在这里我们介绍的内容均在内核(也是笔者的开发平台的版本)上编译运行通过,在2.6.*的版本上基本上是可以通用的。 ??? 二、单独编译内核模块 ??? 首先,我们先来写一个最简单的内核模块: ??? #include linux/module.h ??? #include linux/kernel.h ??? #include linux/errno.h ? ??? #define DRIVER_VERSION v1.0 ??? #define DRIVER_AUTHOR RF ??? #define DRIVER_DESC just for test ??? MODULE_AUTHOR(DRIVER_AUTHOR); ??? MODULE_DESCRIPTION(DRIVER_DESC); ??? MODULE_LICENSE(GPL); ? ??? staticintrfmodule_init(void) ??? { ????? printk(hello,world:modele_init); ????? return 0; ??? } ? ??? static void rfmodule_exit(void) ??? { ????? printk(hello,world:modele_exit); ??? } ? ??? module_init (rfmodule_init); ??? module_exit (rfmodule_exit); ??? 这个内核模块除了在载入和卸载的时候打印2条信息之外,没有任何其他功能,不过,对于我们这个编译的例子来讲,已经足够了。 ??? 将上述源代码保存到一个test.c文件中,然后开始我们的内核模块的编译工作。 ??? 内核模块的编译与普通应用程序的编译一样,也使用的GCC,但是内核模块在用GCC编译的时候时需要使用特定的参数并定义一些宏。 这是因为在编译普通应用程序的可执行文件和内核模块时,内核头文件起的作用是不同的。在以往的内核版本需要我们去在Makefile中手动设置这些设定,虽然这些Makefile都是按目录分层次存放的,但使用维护起来还是比较伏在。幸运的是,一种称为kbuild的新方法被引入,现在外部的可加载内核模块的编译的方法已经同内核编译统一起来,编译新的内核模块或者将自己的内核模块集成到内核源码中都已经变得非常简单了。 ??? 现在让我们看一下如何编译一个名字叫做test.c的模块。 ??? 首先,我们需要写一个简单的Makefile文件: ??? obj-m += test.o??? 将test.c和Makefile文件放在同一个目录下,然后就可以开始编译了,使用编译命令: ??? make -C /usr/src/linux-/ SUBDIRS=$PWD modules ??? 回车后,也许你会发现有一堆的报错,请检查如下配置是否正确: ??? 1、在/usr/src/下有无放置你需要使用的内核源码树?如果没有,请上网down一个你需要的内核源码版本,解压后放在这里。 ??? 2、如果你已经将内核源码解压在/usr/src/下了,那么请先使用在内核源码的主目录下,在笔者的系统中就是/usr/src/linux-/,使用: ??? make config或者make menuconfig或者make gconfig等命令来配置内核,然后使用make all将整个内核完整编译一次。 ??? 3、上述命令中的linux-是笔者使用的内核源码的目录名,你需要将它改成你自己使用对应版本的的内核源码的目录名。
您可能关注的文档
- 山西顺源春考勤及假期管理规则.docx
- 地方铁路接轨站安全状况析分及对策.doc
- 地球地壳中的化学元素丰度的列表.docx
- 地球物理勘查及遥感专业级高职称任职资格.doc
- 山西芮城风陵渡商业街市场调研报告.doc
- 地源热泵常见故障分析及处理方法.doc
- 地理-2014年普通高学中业水平测试地理试题.doc
- 地理2-4全球气候变化步同训练试题(人教版必修1).doc
- 地球化学课后习题及答案.doc
- 地理专业技能训练.doc
- 实施指南《GB_T41906 - 2022 超氧化物歧化酶活性检测方法实施指南解读》.docx
- 实施指南《GB_T41976 - 2022 停车设备智能控制与管理系统》实施指南.docx
- 实施指南《GB_T41979.5-2022 搅拌摩擦点焊》实施指南.docx
- 实施指南《GB_T42013-2022信息安全技术快递物流服务数据安全要求》实施指南.docx
- 实施指南《GB_T42101-2022 游乐园安全》实施指南.docx
- 新解读《GB_T 27920.1-2011数字航空摄影规范 第1部分:框幅式数字航空摄影》.docx
- 实施指南《GB_T41892-2022 智能船舶机械设备信息编码指南》实施指南.docx
- 实施指南《GB_T41908-2022 人类粪便样本采集与处理》实施指南.docx
- 实施指南《GB_T41977-2022 包装条码标准》实施指南.docx
- 实施指南《GB_T41979.2-2022 搅拌摩擦点焊铝及铝合金焊接接头设计》实施指南.docx
文档评论(0)