не удается получить данные с ИК-датчика на встроенном Linux с использованием официального драйвера

Я запускаю образ Linux (созданный с помощью buildroot и ядра 4.11.2, предоставленного производителем) на воздушной плате nanopi NEO с ИК-датчиком, подключенным непосредственно к ИК-контакту. Я хочу использовать датчик для получения данных с ИК-пульта дистанционного управления.

Я следовал процедуре, найденной здесь, с тем же драйвером, и получил те же результаты, но я не могу получить какие-либо данные из /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:~$ cat /proc/bus/input/devices
    ...    
    I: Bus=0019 Vendor=0001 Product=0001 Version=0100
    N: Name="sunxi-ir"
    P: Phys=RemoteIR/input1
    S: Sysfs=/devices/virtual/input/input1
    U: Uniq=
    H: Handlers=sysrq kbd event1 cpufreq_interactive 
    B: PROP=0
    B: EV=100003
    B: KEY=ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe

Итак, теперь мне интересно, должен ли я также зарегистрировать это устройство в драйвере, который я использую, и если да, то как мне это сделать?


person Prewitt    schedule 23.11.2017    source источник
comment
Вы действительно используете eventX или фактический номер, связанный с вашим устройством, например event0? На той странице, на которую вы ссылаетесь, есть документация, в которой показано, как получить номер для вашего конкретного устройства (если у вас его еще нет).   -  person JNevill    schedule 27.11.2017
comment
Я пробовал и event0, и event1, просто чтобы быть уверенным, но теперь я думаю, что проблема на самом деле связана с драйвером. Я только что отредактировал свой пост, чтобы отразить это.   -  person Prewitt    schedule 27.11.2017


Ответы (1)


Один из моих напарников решил это, проблема была в дтс.
В sun8i-h3-nanopi-neo-air.dts просто активировал ИК вот так:

&ir {
    status = "okay";
};

недостаточно, контакты для ИК также должны быть переопределены:

​&ir {
​    pinctrl-names = "default";
​    pinctrl-0 = <&ir_pins_a>;
​    status = "okay";
​};

Надеюсь, это поможет кому-то.

person Prewitt    schedule 26.12.2017
comment
Как мне найти sun8i-h3-nanopi-neo-air.dts файл? Мне нужно перекомпилировать ядро ​​или модуль? - person MERN; 05.07.2019
comment
Привет, вы можете найти его в (последнем) исходном коде ядра vanilla linux (elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/) - person Prewitt; 10.10.2019