c - 从内核空间执行用户空间函数

标签 c linux module linux-kernel

我正在 Linux 中编写自定义设备驱动程序,它必须能够非常快速地响应中断。处理这个问题的代码已经存在于用户空间实现中,但是速度太慢,因为它依赖于软件不断检查中断线的状态。经过一些研究,我发现您可以从内核模块注册这些中断线,并执行函数指针给出的函数。然而我们要执行的代码是在用户空间中,有没有办法从内核空间模块调用用户空间中的函数?

最佳答案

你从内核中调用用户空间函数是不幸的,因为内核不知道也不应该知道单个用户空间应用程序函数和逻辑,更不用说每个用户空间应用程序都有它自己的内存布局,不允许其他进程或内核以这种方式侵入(共享对象在这里是异常(exception),但你仍然不能从内核空间利用它)。关于安全模型,您不应该首先在内核上下文中运行用户空间代码(在内核上下文中自动被认为是不安全的代码),因为这会破坏内核的安全模型那一瞬间现在考虑到上述所有内容,再加上许多其他动机,您可能需要重新考虑您的方法并关注内核 <-> 用户空间 IPC and Interfaces 、文件系统或用户模式助手 API(阅读下文)。

您可以从内核调用用户空间应用程序,使用 usermode-helper API .以下 IBM DeveloperWorks 文章应该可以帮助您开始使用 usermode-helper Linux 内核 API:

Kernel APIs, Part 1: Invoking user-space applications from the kernel

关于c - 从内核空间执行用户空间函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17803517/

相关文章:

c - 将 char 数组划分为结构中的不同值

c - 函数不返回 NULL

C++无法将字符串转换为wstring

python kivy 在矩形内添加文本

php - 读取命令行输出

python - 在 Rstudio 中安装 Python 模块

Ruby:模块、要求和包含

c++ - 函数返回和使用 copyTo 中的 OpenCV Mat

arrays - 从程序集的角度看地址运算符和数组

Node.JS 异步加载模块