2022年编译linux外部驱动模块时的基础知识 .pdf
《2022年编译linux外部驱动模块时的基础知识 .pdf》由会员分享,可在线阅读,更多相关《2022年编译linux外部驱动模块时的基础知识 .pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、读书之法 ,在循序而渐进 ,熟读而精思编译 linux 外部驱动模块时的基础知识linux内核模块编译引言为了清晰的编译Linux 内核,内核编译系统使用Kbuild 规则对编译的过程以及依赖进行规约。在内核模块的编译中,为了保持与内核源码的兼容以及传递编译链接选项给GCC,也使用Kbuild 规则。内核模块的源代码可以在内核源码树中,也可以在内核源码树外,当使用Kbuild 时,两种情况的编译方式也大致相似。一般的内核模块在开发时,都是放在源码树外的。本文主要是针对源码树外部的内核模块的编译。为了屏蔽内核模块编译的复杂性,开发人员需要编写额外的Makefile ,最终让编译内核模块就像编译普
2、通的应用程序一样,敲入”make ” 就行了。本文后面就给了一个实例。编译外部模块在编译外部模块之前,需要首先准备好当前内核的配置以及内核头文件,同时,当前内核的modules enable选项应该开启(编译内核时指定)。命令行选项使用如下命令编译外部模块:make C M= 其中 -C 表明 make 要调用 下的 Makefile ,该 Makefile 就是内核的Makefile ,M 为该 Makefile 的参数,指定外部模块源码的路径。当Makefile 接收到 M 参数时,就默认编译外部模块。例如,当前目录下存放一个外部模块的源码,其编译命令如下:make C /lib/modu
3、les/uname -r/build M=pwd 其中 uname r 获取当前运行内核的版本,pwd 为当前源码路径,将其展开之后为:make C /lib/modules/ 2.6.42.9/build M=/home/user/hello 其中 /lib/modules/ 2.6.42.9/build是指向内核源码目录的符号链接。编译完成之后,要安装驱动时,调用如下命令:make C /lib/modules/uname -r/build M=pwd modules_install 编译目标modules编译外部模块,默认目标就是modules modules_install安装编译成功
4、了的外部模块,默认的安装目录为/lib/modules/extra/,前缀可以同过INSTALL_MOD_PATH 指定。clean清除选项help列出可用的外部目标Kbuild文件在执行了 make C /lib/modules/uname-r/build M=pwd之后,内核源码树中的Makefile会再次跳转到 pwd目录下,加载Kbuild 或 Makefile( 如果没有Kbuild 文件,则加载Makefile ,因此, Kbuild 文件中的内容也可以放到Makefile 中)。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,
5、共 4 页读书之法 ,在循序而渐进 ,熟读而精思如果模块源码目录中的Kbuild 或 Makefile 中没有定义编译目标时,编译过程最终是什么都没生成的。以下一行就是定义生成目标:obj- m: = .o .o上面的 obj-m 变量是指外部模块,其后面的一组.o最终生成.ko模块。同样,还有一个变量obj-y ,它包含要静态编译进入内核的模块。本文不考虑它。在默认情况下,内核源码编译系统会将.c编译成 .o,并最终链接生成 .ko。如果 .ko需要多个源文件时,Kbuild或 Makefile 中要添加如下行:-y: = src1.o src2.o .Makefile 与 Kbuild 合
6、并为了屏蔽编译内核模块的复杂性,让使用人员简单的调用make/makeinstall即可完成内核模块的编译,模块源码目录下通常添加了一个wrapper Makefile,供向的Makefile 包含了 Kbuild部分,内容如下:ifneq ($(KERNELRELEASE),) obj-m := hello.o else default: $(MAKE) -C /lib/modules/uname -r/build M=pwd modules endif Kbuild 与 Makefile 分离当内核模块源码目录下同时包含了Kbuild 与 Makefile 时,编译系统只加载Kbuild
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年编译linux外部驱动模块时的基础知识 2022 编译 linux 外部 驱动 模块 基础知识
限制150内