一尘不染

从内核空间执行用户空间功能

linux

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


阅读 346

收藏
2020-06-02

共1个答案

一尘不染

从内核调用用户空间功能很不走运,因为内核不知道,也不应该知道用户空间应用程序的各个功能和逻辑,更不用说每个用户空间应用程序都有自己的内存了。布局,不允许其他进程或内核以这种方式入侵(共享对象在这里是例外,但仍然不能从内核空间利用该对象)。关于安全模型,您不应该首先在内核上下文中运行用户空间代码(在内核上下文中自动被认为是不安全的代码),因为这将破坏内核中的安全模型。那一瞬间。现在考虑上述所有内容,以及许多其他动机,您可能需要重新考虑您的方法并专注于内核<->IPC和接口,文件系统或用户模式帮助程序API(阅读下面)。

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

内核API,第1部分:从内核调用用户空间应用程序

2020-06-02