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

60 篇文章 11 订阅
31 篇文章 0 订阅

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所指向的内核源码一定要被成功编译过,没有清除工程才能编译模块。

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值