我试图构建并插入使用预编译目标文件的内核模块。 预编译的目标文件是用asm(GNU汇编程序)编译的。
这是Makefile:
obj-m += klm.o
klm-objs := a.o
klm.o:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
和klm.c:
#define LINUX
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
extern volatile unsigned long peak_create();
int init_module(void)
{
printk("<1>Hello world 1.\n");
peak_create();
return 0;
}
void cleanup_module(void)
{
printk(KERN_ALERT "Goodbye world 1.\n");
}
EXPORT_SYMBOL_GPL(peak_create);
MODULE_LICENSE("GPL");
但是当我尝试插入ko文件时(使用insmod klm.ko),dmesg显示错误:
klm:未知符号peak_create(错误0)
a.o的源文件包含peak_create的全局减速度。 (.globl peak_create)
如何在内核模块中使用peak_create?
谢谢大家!
答案 0 :(得分:1)
尝试将Makefile修改为:
obj-m := klm_out.o
klm_out-objs : klm.o a.o
modules:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
# Put the asm compilation command here
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
rm -f a.o