使用自定义标头编译Linux内核模块

时间:2013-10-01 15:05:50

标签: linux module linux-kernel kernel kbuild

我想根据自定义标头编译一个简单的字符设备模块。因此组织了文件夹,

+ mymod.c
| customized-header.h
| customized-header.c
| Makefile

mymod.c中,因此使用标题,

#include "customized-header.h"

在Makefile中:

obj-m := mymod.o
mymod-objs := customized-header.o
KVERSION = $(shell uname -r)
PWD = $(shell pwd)
all:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

一切都应该正常工作,模块编译没有问题,我可以通过sudo insmod加载模块,但模块无法正常工作。当我检查nm mymod.ko时,会丢失许多变量和函数。链接customized_header.o后,它看起来好像已经停止了。如果我删除了这个标题及其功能,比如没有来自模块的标题函数调用,它会完美地编译所需的结果。

你能看到这里出了什么问题吗?

1 个答案:

答案 0 :(得分:2)

问题在于Makefile。由于链接here,我将其更改为

obj-m: mymodko.o
mymodko-obj: customized-header.o mymod.o

现在工作正常。所以问题是模块对象的命名。我们需要指定不同的名称,例如mymodko.omymod.o