为内核模块编写makefile

时间:2015-06-04 12:08:40

标签: c makefile linux-kernel

我想写一个内核模块,现在我写了一些文件: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

2 个答案:

答案 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)