我想根据自定义标头编译一个简单的字符设备模块。文件夹因此组织,
+ 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
。如果我删除了这个头文件及其函数,比如没有从模块调用头文件函数,它就可以完美地编译并得到所需的结果。
你能看出这里出了什么问题吗?