Linux中内核模块的单独编译以及makefile的模板介绍

本文详细介绍了如何使用make命令编译Linux内核模块,包括设置内核源码路径和模块源码路径,以及创建Makefile模板进行模块编译的过程。强调了KDIR变量的重要性及其正确设置的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux内核模块在编译的时候可以通过命令编译:

make -C 内核源码绝对路径 M=模块源码文件所在的绝对路径 modules  

此命令的解释:

1)进入到内核源码目录
2)读取内核源码目录的Makefile
3)执行内核源码Makefile中的 modules 目标
4)根据 modules 目标的命令编译M所指向的文件路径 Makefile指定 的 C文件

如:

ARM板的内核源码路径:/root/work/linux-kernel/
模块源码路径 :/xxx/yyy/hello_model_single
命令
make -C /root/work/linux-kernel/ M=/xxx/yyy/hello_model_single modules


上述过程可以写一个相应的makefile模板:

#hello最终的模块名,单文件单模块时,这个名字就是源码文件名。hello.o对应于hello.c  也可以编译多个模块,只需要在后面依次添加上对应的.o就可以了
obj-m := hello.o
#如果是多个C文件(aa.c bb.c)编译成一个模块文件,如:target.ko,可以采用如下的方式:
# target就是最终模块的名字,自己定义,并且不能和任何一个c文件同名
obj-m := target.o	
#以下的格式: 模块名-objs = 模块的源文件对就的.o文件列表 ,aa.o bb.o 分别对应aa.c bb.c
mulc-objs = aa.o bb.o
	
#KDIR是内核源码路径,当编译X86的模块时候使用以下内核源码
#KDIR  :=/lib/modules/$(shell uname -r)/build
	
#KDIR是内核源码路径,当编译ARM 的模块时候使用自己配套的Linux内核源码
KDIR   := /root/work/linux-3.5/

#$(PWD) 是代表当前路径,也就是模块源码路径

all:
	make -C $(KDIR) M=$(PWD) modules   

clean:
	rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.markers *.unsigned *.order *~

注:

一般只需根据自己的情况修改KDIR 和 obj-m := ?  内容就可以了。

PS:KDIR所指向的内核源码一定要被成功编译过,没有清除工程才能编译模块。

 

### 编译Linux内核模块 为了编译Linux系统的内核模块(`.ko` 文件),需要遵循一系列特定命令和环境设置。准备阶段涉及安装必要的工具链和支持包,确保开发环境中具备构建内核所需的全部资源。 #### 准备工作 确保已安装了用于编译的软件包集合,这通常包括但不限于: - 内核源码及其头文件 - 其他依赖项依据具体需求而定 可以通过发行版对应的包管理器来完成这些组件的获取与部署。 #### 设置编译环境变量 对于标准架构下的Linux系统而言,并不需要特别指定交叉编译工具链以及目标体系结构。然而,在某些特殊情况下,比如为嵌入式设备定制时,则需适当调整如下所示的相关环境变量[^2]: ```bash export ARCH=arm export SUBARCH=arm export CROSS_COMPILE=arm-eabi- ``` 上述配置适用于ARM平台;针对其他类型的处理器架构应做相应修改。 #### 配置并编译内核模块 一旦准备工作就绪,即可进入实际操作环节。首先定位到欲编译之模块所在的目录位置,接着执行以下指令序列以实现目的: ##### 创建或更新 `.config` 文件 如果尚未存在有效的配置文档,可以采用默认模板生成一份新的实例作为起点: ```bash make xxx_defconfig ``` 这里假设使用的定义配置名为 `xxx_defconfig` ,具体的名称应当参照实际情况予以替换。 ##### 执行编译过程 仅当意图单独创建可加载模块而不触及整个内核主体部分的情况下,才推荐运用下述方法进行局部编译: ```bash make modules ``` 此命令会读取当前路径中的Makefile信息,进而识别待处理的目标对象——即那些被标记成模块形式存在的驱动程序或其他扩展功能单元,并最终产出相应的二进制映像文件(`.ko`)。 通过以上步骤便能够在Linux环境下成功编译出期望得到的内核模块
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值