在Linux中,在用户空间代码中处理设备中断而不是在内核空间中有哪些选项?用户空间中的Linux中断处理
回答
还有,但处理仍然应该在kernelspace中完成。 OTOH,如果您只需要注意中断,则不需要内核部分。
经验告诉我们可以为几乎所有的PCI适配器编写稳定的用户空间驱动程序。它只需要一些复杂性和内核中的一个小代理层。 UIO是朝这个方向迈出的一步,但是如果你想正确处理用户空间中的中断,那么UIO可能不够,例如如果设备不支持UIO依赖的PCI规范的中断禁止位。
请注意,进程唤醒延迟是几微秒,所以如果您的实现需要非常低的延迟,那么用户空间可能是一个拖动。
如果我要实现一个用户空间的驱动程序,我会减少内核ISR只是一个“禁用& ACK &唤醒userpace”操作,处理唤醒返回过程中中断,然后重新启用中断(当然,通过从用户空间进程写入映射的PCI内存)。
必须间接触发用户区代码。
内核ISR通过写入文件/设置寄存器/信号指示中断。用户空间应用程序对此进行轮询并继续使用适当的代码。 边缘情况:或多或少的中断比预期(超时每个时间间隔/太多中断)
Linux文件抽象用于连接内核和用户空间。这由字符设备和ioctl()
调用执行。有些人可能更喜欢用于此目的的sysfs条目。
这看起来很奇怪,因为事件触发的设备通知(中断)与'时间触发'轮询挂钩,但实际上是异步阻塞(读/选)。无论如何,一些问题根据性能而出现。
所以中断不能直接在内核之外处理。 例如共享内存可以在用户空间中,并且可以映射一些I/O权限设置地址,因此U-I/O可以工作,但不能用于直接中断处理。
我已经找到了话题vfio只有一个 '少数派报告'(http://lxr.free-electrons.com/source/Documentation/vfio.txt): https://stackoverflow.com/a/21197797/5349798
类似的问题:
Running user thread in context of an interrupt in linux
Is it possible in linux to register a interrupt handler from any user-space program?
Linux Kernel: invoke call back function in user space from kernel space
How do I inform a user space application that the driver has received an interrupt in linux?
- 1. 在嵌入式Linux ARM9的用户空间中处理GPIO
- 2. 如何在Linux中中断用户空间应用程序
- 3. 中断处理Linux和待处理中断
- 4. 在Linux中处理/ dev/tty设备上的用户中断(UART中断)
- 5. Linux用户空间使用sysfs的GPIO中断
- 6. Linux中的并行中断处理
- 7. 是否有可能在linux中注册来自任何用户空间程序的中断处理程序?
- 8. 在linux中的中断处理。中断共享
- 9. 用户空间中的Linux C/C++定时器信号处理程序
- 10. 在用户空间处理GPIO ARM9嵌入式Linux AM1808
- 11. Linux分页和中断处理程序
- 12. PCIe中断处理linux内核
- 13. 处理Application.ExecutablePath中的空间
- 14. 如何正确处理使用Nokogiri的不间断空间?
- 15. 处理中断:
- 16. 用户空间中用于Linux中mmap'ed物理内存的memcpy性能不佳
- 17. Linux内核中的中断处理程序的返回值
- 18. GPIO引脚linux中的中断处理程序(arm)
- 19. 从Linux用户空间设置16550A UART硬件FIFO中断级别
- 20. 低延迟中断处理(预计从内核返回到用户空间的平均时间是?)
- 21. 处理E4X中的名称空间
- 22. xslt中的XML名称空间处理
- 23. Linux中的异常处理
- 24. Linux中的空间问题
- 25. 如何在Linux中从用户空间找到变量的物理地址?
- 26. 处理文件名中的空间,FOR循环,批处理
- 27. linux的arm中断处理程序在哪里?
- 28. 处理中获得参数空间
- 29. 用户空间中的硬件识别Linux
- 30. Linux中用户空间地址的嵌套页面错误
当我们做用户空间的驱动程序,是否有意义,以清除内核或用户空间中断?我认为应该清楚处理完成后(所以在用户空间),对吗? – ransh