linux-kernel - 构建内核模块 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!
任何建议如何解决此错误?
解决方案
为什么需要运行此程序?它是在特定情况下调用的内部内核函数 - 在某些线程中。你不应该从内核模块调用它。
要编译您的示例模块,您可以尝试在内核中导出此符号 - 如下所示:
EXPORT_SYMBOL(do_softirq);
在 softirq.c 文件中,但不推荐。尝试寻找 tasklet、workqueue 接口或 kthreads。
推荐阅读
- mysql - 一个表中的所有值 UNION SELECT TOP N 来自另一个表的值
- python-3.x - 在 Python3 中,openpyxl 代码无法编译
- java - Firebase 实时数据库 android java
- nuxt.js - Tailwind group-hover 不起作用(即使使用默认变体)
- google-apps-script - 无法在 Google 应用程序脚本中发送具有多个抄送的电子邮件
- string - 持久性 Reader() 对象
- django - 从 WebsocketConsumer 更改为 AsyncWebsocketConsumer 的问题
- opengl - 您能否在顶点着色器中判断数据是使用 glDrawArrays() 还是 glDrawArraysInstancedBaseInstance() 发送的
- android - android,为什么库模块带有 minifyEnabled false
- google-cloud-platform - 私有云数据融合可以连接到互联网吗?