При использовании модуля pwm-ir-tx chardev пользовательского пространства не доступен.

Я попытался использовать выходной контакт ШИМ в качестве ИК-передатчика, используя SoC RAMIPS и модуль ядра PWM IR TX. Я использую Linux 4.14.37 и добавил следующую запись в файл dts:

   pwm_ir_tx1: pwm-ir-transmitter1 {
    compatible = "pwm-ir-tx";
    pwms = <&pwm 1 100>;
  };

Я загружаю модули ядра rc-core и pwm-ir-tx:

lsmod | grep pwm
pwm_ir_tx               2032  0 
pwm_mediatek_ramips     1744  1 
rc_core                19348  2 pwm_ir_tx

При загрузке модуля pwm-ir-tx ядро ​​записывает:

[ 3754.108259] rc rc0: PWM IR Transmitter as /devices/platform/pwm-ir-transmitter1/rc/rc0

Узлы sysfs загружаются правильно:

ls -la /sys/class/rc/
drwxr-xr-x    2 root     root             0 May 29 00:18 .
drwxr-xr-x   23 root     root             0 Jan  1  1970 ..
lrwxrwxrwx    1 root     root             0 May 29 01:16 rc0 -> ../../devices/platform/pwm-ir-transmitter1/rc/rc0

Но в /dev нет устройства lirc пользовательского пространства (chardev), поэтому я не уверен, как я должен взаимодействовать с устройством. В идеале я хотел бы использовать пульт дистанционного управления API, но для этого требуется наличие chardev в /dev.

ls /dev
autofs              mtd2ro              network_throughput
console             mtd3                null
cpu_dma_latency     mtd3ro              port
full                mtd4                ptmx
gpiochip0           mtd4ro              pts
gpiochip1           mtd5                random
gpiochip2           mtd5ro              shm
gpiochip3           mtd6                tty
i2c-0               mtd6ro              ttyS0
kmsg                mtdblock0           ttyS1
log                 mtdblock1           ttyS2
memory_bandwidth    mtdblock2           urandom
mtd0                mtdblock3           watchdog
mtd0ro              mtdblock4           watchdog0
mtd1                mtdblock5           zero
mtd1ro              mtdblock6
mtd2                network_latency

Я пытался загрузить модуль lirc_dev до и после модуля pwm-ir-tx, но в /dev по-прежнему ничего не появляется, когда я загружаю модуль lirc_dev, появляется следующий вывод:

[ 4775.367966] lirc_dev: IR Remote Control driver registered, major 251

Но по-прежнему нет устройства пользовательского пространства lirc в /dev... Я думаю, что модуль lirc_dev необходим, поскольку он предоставляет API-интерфейс пользовательского пространства lirc, но, похоже, нет никакой связи между ним и модулем pwm-ir-tx, и он не создает никаких lirc chardev в /dev.


person Francois Herbert    schedule 15.06.2018    source источник


Ответы (2)



После прочтения некоторых исходных файлов rc в ядре стало очевидно, что также требуется модуль ir-lirc-codec. По сути, драйвер pwm-ir-tx определяется как тип RC_DRIVER_IR_RAW_TX. Когда модуль rc-core регистрирует драйвер типа RC_DRIVER_IR_RAW или RC_DRIVER_IR_RAW_TX, он вызывает функцию ir_raw_event_prepare, которая, в свою очередь, пытается загрузить модуль ir-lirc-codec. Когда этот модуль стал доступен, появляются следующие журналы ядра:

[   10.004460] lirc_dev: IR Remote Control driver registered, major 251
[   10.131011] IR LIRC bridge handler initialized
[   10.471561] rc rc0: PWM IR Transmitter as /devices/platform/pwm-ir-transmitter1/rc/rc0
[   10.487456] rc rc0: lirc_dev: driver ir-lirc-codec (pwm-ir-tx) registered at minor = 0

А в /dev доступно устройство lirc chardev:

 ls /dev/li*
/dev/lirc0
person Francois Herbert    schedule 15.06.2018