S E*_*S E 5 c linux module linux-kernel
我在linux中编写一个自定义设备驱动程序,必须能够在中断时快速响应.用于处理此问题的代码已存在于用户空间实现中,但这种代码太慢,因为它依赖于软件不断检查中断线的状态.在做了一些研究后,我发现你可以从内核模块注册这些中断线,并执行函数指针给出的函数.但是我们想要执行的代码是在用户空间中,有没有办法从内核空间模块调用用户空间中的函数?
你从内核调用用户空间函数是不幸的,因为内核没有并且不应该知道单独的用户空间应用程序函数和逻辑,更不用说每个用户空间应用程序都有它自己的内存布局,没有其他进程和内核被允许以这种方式入侵(共享对象在这里是例外,但你仍然无法从内核空间进入).那么安全模型呢,你不应该首先在内核上下文中运行用户空间代码(在内核上下文中自动被认为是不安全的代码),因为那样会破坏内核的安全模型.那个瞬间.现在考虑上面提到的所有内容,以及许多其他动机,您可能需要重新考虑您的方法,并专注于内核< - >用户空间IPC和接口,文件系统或用户模式帮助程序API(请参见下文).
您可以使用usermode-helper API从内核调用用户空间应用程序.以下IBM DeveloperWorks文章应该让您开始使用usermode-helper Linux内核API:
我认为最简单的方法是注册一个字符设备,当设备有一些数据时它就会准备就绪.
尝试从该设备读取的任何进程,然后在设备准备好之前进入休眠状态,然后唤醒,此时它可以执行适当的操作.
如果您只想表示准备就绪,读者可以只读取一个空字节.
然后,用户空间程序只需要执行阻塞的read()调用,并且会被适当地阻塞,直到你将其唤醒.
您需要了解内核调度程序的等待队列机制才能使用它.
归档时间: |
|
查看次数: |
13649 次 |
最近记录: |