无法使用官方驱动程序从嵌入式 linux 上的红外传感器获取数据
cannot get data from IR sensor on embedded linux using official driver
I 运行 linux 图像(使用 buildroot 和制造商提供的 4.11.2 内核制作)在 nanopi NEO 空气板上,IR 传感器直接插入 IR 引脚。我想使用传感器从红外遥控器获取数据。
我按照找到的步骤 here 使用相同的驱动程序,得到了相同的结果,但我无法从 /dev/input/eventX
获取任何数据,也无法让我的遥控器出现在 /proc/bus/input/devices
(我试过在插入驱动时用遥控器发送数据,或者在驱动内置时在启动时尝试发送数据,但显然没有用,我没有找到太多相关信息)。
我也尝试了 lirc 和 evtest / irrecord,但我仍然无法获得任何数据,我相信问题出在其他地方。
我用示波器测试了传感器和遥控器,所以我知道传感器正在从遥控器获取帧。我也很确定这不是驱动程序方面的协议不匹配。
所以我有两个问题:
- 这里哪里有问题,为什么我运行
cat /dev/input/eventX
什么也得不到?
- 我的遥控器应该显示在
/proc/bus/input/devices
中吗?有没有我应该注意的配对程序?
如果这些是微不足道的问题(我以前从未从事过 IR),请原谅,在此先感谢您。
编辑
我已经设法让我的遥控器与制造商提供的旧图像之一(内核 3.4.39-h3)一起工作,我注意到:
- 我正在使用的驱动程序不工作(它永远不会进入读取 FIFO 的中断函数并且与 FIFO 关联的物理地址始终为 0)
- 旧图像的驱动程序在其初始化函数(硬编码)中注册了以下输入设备,然后我使用它从远程获取数据(使用
cat /dev/input/event1
):
pi@NanoPi-NEO-Air:~$猫/proc/bus/input/devices
...
I:总线=0019 供应商=0001 产品=0001 版本=0100
N: 姓名="sunxi-ir"
P:物理=RemoteIR/input1
S: 系统文件系统=/devices/virtual/input/input1
U: 单数=
H: Handlers=sysrq kbd event1 cpufreq_interactive
B: 道具=0
B:EV=100003
B: KEY=ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
所以现在我想知道我是否也应该在我正在使用的驱动程序中注册该设备,如果是,我应该怎么做?
我的一个同事解决了,问题出在dts上。
在 sun8i-h3-nanopi-neo-air.dts
中,只需像这样激活 IR:
&ir {
status = "okay";
};
还不够,IR 的引脚也必须重新定义:
&ir {
pinctrl-names = "default";
pinctrl-0 = <&ir_pins_a>;
status = "okay";
};
希望这会对某人有所帮助。
I 运行 linux 图像(使用 buildroot 和制造商提供的 4.11.2 内核制作)在 nanopi NEO 空气板上,IR 传感器直接插入 IR 引脚。我想使用传感器从红外遥控器获取数据。
我按照找到的步骤 here 使用相同的驱动程序,得到了相同的结果,但我无法从 /dev/input/eventX
获取任何数据,也无法让我的遥控器出现在 /proc/bus/input/devices
(我试过在插入驱动时用遥控器发送数据,或者在驱动内置时在启动时尝试发送数据,但显然没有用,我没有找到太多相关信息)。
我也尝试了 lirc 和 evtest / irrecord,但我仍然无法获得任何数据,我相信问题出在其他地方。
我用示波器测试了传感器和遥控器,所以我知道传感器正在从遥控器获取帧。我也很确定这不是驱动程序方面的协议不匹配。
所以我有两个问题:
- 这里哪里有问题,为什么我运行
cat /dev/input/eventX
什么也得不到? - 我的遥控器应该显示在
/proc/bus/input/devices
中吗?有没有我应该注意的配对程序?
如果这些是微不足道的问题(我以前从未从事过 IR),请原谅,在此先感谢您。
编辑
我已经设法让我的遥控器与制造商提供的旧图像之一(内核 3.4.39-h3)一起工作,我注意到:
- 我正在使用的驱动程序不工作(它永远不会进入读取 FIFO 的中断函数并且与 FIFO 关联的物理地址始终为 0)
- 旧图像的驱动程序在其初始化函数(硬编码)中注册了以下输入设备,然后我使用它从远程获取数据(使用
cat /dev/input/event1
):
pi@NanoPi-NEO-Air:~$猫/proc/bus/input/devices ... I:总线=0019 供应商=0001 产品=0001 版本=0100 N: 姓名="sunxi-ir" P:物理=RemoteIR/input1 S: 系统文件系统=/devices/virtual/input/input1 U: 单数= H: Handlers=sysrq kbd event1 cpufreq_interactive B: 道具=0 B:EV=100003 B: KEY=ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
所以现在我想知道我是否也应该在我正在使用的驱动程序中注册该设备,如果是,我应该怎么做?
我的一个同事解决了,问题出在dts上。
在 sun8i-h3-nanopi-neo-air.dts
中,只需像这样激活 IR:
&ir {
status = "okay";
};
还不够,IR 的引脚也必须重新定义:
&ir {
pinctrl-names = "default";
pinctrl-0 = <&ir_pins_a>;
status = "okay";
};
希望这会对某人有所帮助。