【发布时间】:2013-10-01 15:05:50
【问题描述】:
我想根据自定义标头编译一个简单的字符设备模块。文件夹就这样组织好了,
+ 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 后它停止了。如果我删除了这个头文件及其函数,比如没有从模块调用头文件函数,它会完美地编译并获得所需的结果。
你能看出这里出了什么问题吗?
【问题讨论】:
-
将 obj-m 行更改为:obj-m := mymod.o customize-header.o 会发生什么?
-
@PeterL。那么
obj-m就是生成一个模块。当我添加customized-header.o时,会生成更多文件:例如customized-header.ko。与此同时,mymod.ko还是一样的。这里我只想要一个模块,即mymod.ko,customized-header就像模块的库一样工作。
标签: linux module linux-kernel kernel kbuild