我想写一个内核模块,现在我写了一些文件:a.c,b.c,b.h和d.h。
a.c包括b.h和d.h,b.h也包括d.h。
我写了一个像这样的Makefile:
ifneq ($(KERNELRELEASE),)
mymodule-objs :=a.c b.c
obj-m += a.o b.o
else
PWD := $(shell pwd)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
rm -rf *.o *.mod.c *.symvers *order *.markers *.cmd *-
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf *.o *.mod.c *.symvers *order *.markers *.cmd *-
endif
但它不起作用,我该如何编写正确的Makefile?我希望最终得到一个文件名x.ko。
使用'make'命令后,我使用'insmod'给我一条消息:
insmod:错误:无法插入模块a.ko:模块中的未知符号
顺便说一句,我使用的是Ubuntu 14.10。内核是3.16.0-37-generic
答案 0 :(得分:1)
class Meta:
ordering = ['order']
将创建两个模块,a.ko和b.ko
如果你想从两者中创建一个单独的模块(我想你因为obj-m += a.o b.o
行而创建),用
mymodule-objs
obj-m += mymodule.o
将根据mymodule.o
构建,然后使用modpost转换为mymodule-objs
。
如前所述,您在mymodule.ko
行
modules
答案 1 :(得分:0)
在此之后尝试为Makefile建模?
https://unix.stackexchange.com/questions/122095/understanding-a-make-file-for-making-ko-files
您可能不需要mymodule-objs := a.c b.c
。我认为您在modules
行
$(MAKE)