构建内核模块 do_softirq() undefined

build kernel module do_softirq() undefined

#include <linux/init.h>
#include <linux/module.h>
#include <linux/interrupt.h>

MODULE_LICENSE("Dual BSD/GPL");

static int example_init(void) {
        printk("<1>EXAMPLE: init\n");
        do_softirq();
        return 0;
}

static void example_exit(void) {
        printk("<1>EXAMPLE: exit\n");
}

module_init(example_init);
module_exit(example_exit);

在 ubuntu 20.04 上构建模块。我收到一个错误。

ERROR: "do_softirq" undefined!

有什么建议可以解决这个错误吗?

为什么需要运行这个程序?它是在特定情况下调用的 internal 内核函数 - 在某些线程中调用。你不应该从内核模块调用它。

要编译您的示例模块,您可以尝试在内核中导出此符号 - 如下所示:

EXPORT_SYMBOL(do_softirq);

在 softirq.c 文件中,但不推荐。尝试寻找 tasklet、工作队列接口或 kthreads。