首页 > 解决方案 > 构建内核模块 do_softirq() 未定义

问题描述

#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!

任何建议如何解决此错误?

标签: linux-kernel

解决方案


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

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

EXPORT_SYMBOL(do_softirq);

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


推荐阅读