首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写一个处理任意中断并输出到设备的FreeBSD内核模块

问编写一个处理任意中断并输出到设备的FreeBSD内核模块
EN

Stack Overflow用户
提问于 2017-06-30 23:40:01
回答 1查看 370关注 0票数 3

我想编写一个可以接受一些任意中断的FreeBSD内核模块,在接收到这些中断时,将一些数据输出到任意设备。目前,我面临着几个问题:

  1. 我如何通过一个特定的IRQ获得中断?在Linux上有request_irq()调用,但是似乎FreeBSD没有类似的API .比如说,我希望能够通过我的内核模块(键盘在irq1上)检测到所有的键盘中断,我该怎么做呢?(在Linux上,可以通过调用free_irq(1, NULL)和request_irq(1, ...)来纠正我的错误。)
  2. 是否有可能通过内核模块写入/dev下的设备文件?我读过读取FreeBSD内核模块中文本文件的示例这个问题;按照这个示例,我能够对常规文件进行读写,但不能在/dev下进行设备文件的读写( " device“是伪“回声装置”,是char设备示例中使用的经典“回声装置”)。不过我还是打开了文件。 我知道在内核中做文件I/O是一种不好的做法,但是我想不出任何其他的方法.如果有人有更好的解决方案,请告诉我。(即通过设备的device_t节点写入设备?)

我之所以在内核中这样做,是因为我确实需要命中所有的中断,并且在用户空间中运行它有可能因为内核线程抢占用户线程而丢失中断(中断可能非常频繁)。

如果有人能给我提供一些关于如何实现这个程序的其他想法,我也会很感激(基本上,这个想法是一个内核模块,可以完成微控制器的工作.)

EN

回答 1

Stack Overflow用户

发布于 2017-07-11 22:34:45

您可以向bus_setup_intr注册IRQ处理程序。

通常,在这种情况下,我们要做的是让一个驱动程序收集中断和任何其他有用的数据,然后通过一个设备导出它,然后(可能是实时的?)用户空间中的进程可以从一个设备读取,做它需要做的任何事情,并写入另一个设备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44856038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档