Linux中内核模块的单独编译以及makefile的模板介绍
Linux内核模块在编译的时候可以通过命令编译:make -C 内核源码绝对路径 M=模块源码文件所在的绝对路径 modules此命令的解释:1)进入到内核源码目录2)读取内核源码目录的Makefile3)执行内核源码Makefile中的 modules 目标4)根据 modules 目标的命令编译M所指向的文件路径 Makefile指定 的 C文件如:ARM板的内核...
·
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所指向的内核源码一定要被成功编译过,没有清除工程才能编译模块。
更多推荐
已为社区贡献7条内容
所有评论(0)