使用 libiio 触发器将 IRQ 传播到用户空间

问题描述

我已经浏览了大部分文献,它的核心部分已经得到了很多覆盖、理解和吸收。

但是我的问题基本上是:当内核空间和我的守护进程发生中断时,我如何收到警报,例如通过回调函数 生活在用户空间。

IRQ Occuring -------> 中断的上半部分(将时间戳放入缓冲区)---------> 中断处理程序的下半部分(读取数据并添加 缓冲区中的时间戳)-----------> ????将在 HD 上写入日志的用户空间守护进程(某种描述的异步回调)。

我已经编写并运行了守护程序部分的所有内容,我似乎明白通过 libiio 您可以将触发器分配给特定通道或 属性,但这就是我陷入困境的地方。

libiio 上的文献(最值得注意的是它的 wiki)有一个关于触发器的章节,有 4 行长......至少可以说不是很有帮助。

iioinfo 列出了 LSM6DSLTR 中存在的设备(18 个设备,包括两个触发器),我无法将触发器分配给它们所在的任何设备 尚未分配给(没有这样的文件或目录),我收集是指该特定设备的 sysfs 中缺少触发器目录。

我还认为 sysfs 目录当然是内核设备树的从属,并且设备树的那部分的创建是作为 驱动程序已加载。

所以必须有一种方法来改变 sysfs 文件系统的那部分,通过要求内核驱动程序在上下文中提供一个设备来实现触发器 目录,以便我们可以为其分配触发器

第二部分将是触发实际 IRQ(在我的情况下为 42 - 如 /proc/interrupts 中所列)的从属,并在用户空间守护进程中收到警报 已达到加速度或振动的阈值...

嗯,这就是我想要实现的目标的具体细节。最后一部分是在芯片上写一些寄存器来配置 IRQ 的方式和时间 发生在任何给定的集成设备上。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)