我试图建立和插入一个内核模块,使用预编译的对象文件。
预编译的对象文件是用asm(GNU汇编程序)编译的。
以下是生成文件:
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
以及荷兰皇家航空公司:
#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:未知符号峰值创建(错误0)
a.o的源文件包含峰值创建的全局减速(创建全局峰值)
如何在内核模块中使用peak_create?
谢谢大家!
最佳答案
尝试将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