我试图建立和插入一个内核模块,使用预编译的对象文件。
预编译的对象文件是用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

10-05 21:48