Habe nach weiterem Rumprobieren die Lösung für den seriellen Anschluss der PCIe-Karte gefunden, und zwar bei den Parametern von serial_ir. Funktioniert mit antiX und Tumbleweed.
Code:
# modinfo serial_ir
filename: /lib/modules/5.14.14-1-default/kernel/drivers/media/rc/serial_ir.ko.xz
license: GPL
author: Ralph Metzler, Trent Piepho, Ben Pfaff, Christoph Bartelmus, Andrei Tanas
description: Infra-red receiver driver for serial ports.
suserelease: openSUSE Tumbleweed
srcversion: 389CCC5980EB109B740F2B3
depends: rc-core
retpoline: Y
intree: Y
name: serial_ir
vermagic: 5.14.14-1-default SMP mod_unload modversions
sig_id: PKCS#7
signer: openSUSE Secure Boot CA
sig_key: FA:BE:D8:BF:40:9A:5E:64
sig_hashalgo: sha256
signature: 85:F3:CE:47:1B:64:10:33:2E:A5:6D:DF:E5:DD:19:DD:40:AE:71:78:
7C:E3:B2:1B:C5:42:50:0C:FA:93:77:58:9D:04:E7:CC:D1:5B:2B:75:
32:39:29:0D:19:F9:A8:E6:57:1E:07:FA:CB:45:08:2D:51:6B:9E:B0:
8B:3D:AF:77:3A:15:09:2C:73:74:CC:88:6B:DC:AA:B7:0B:CB:73:AA:
B7:18:35:1C:22:AD:BF:02:A8:2C:A4:AF:2F:D2:1C:D7:81:93:AC:F6:
0B:C2:55:8B:15:47:2A:0D:50:AE:31:E9:60:E7:AA:11:11:58:24:2A:
A8:A6:40:B5:10:39:13:A6:07:96:1D:94:4F:C9:9B:35:00:A8:8C:79:
10:3E:9E:17:39:E2:6B:B1:B3:64:B8:C5:44:32:ED:FA:A7:EB:EF:2B:
42:1B:C0:D9:B3:48:65:91:10:86:15:29:D8:99:E9:47:55:2B:86:2C:
DA:8B:EA:10:94:12:1B:92:94:EF:35:98:4B:59:DF:6C:F9:00:75:D3:
B4:95:4A:3D:43:7C:49:22:C8:5A:5D:97:A0:09:F7:C3:D8:4D:B2:CE:
8A:B4:86:49:6E:50:B4:E5:F7:49:8E:08:95:A7:91:3C:64:D7:39:E8:
F1:4A:48:B7:37:47:AD:28:E3:99:86:52:58:B3:05:2C
parm: type:Hardware type (0 = home-brew, 1 = IRdeo, 2 = IRdeo Remote, 3 = AnimaX, 4 = IgorPlug (int)
parm: io:I/O address base (0x3f8 or 0x2f8) (int)
parm: iommap:physical base for memory mapped I/O (0 = no memory mapped io) (ulong)
parm: ioshift:shift I/O register offset (0 = no shift) (int)
parm: irq:Interrupt (4 or 3) (int)
parm: share_irq:Share interrupts (0 = off, 1 = on) (bool)
parm: sense:Override autodetection of IR receiver circuit (0 = active high, 1 = active low ) (int)
parm: txsense:Sense of transmitter circuit (0 = active high, 1 = active low ) (bool)
parm: softcarrier:Software carrier (0 = off, 1 = on, default on) (bool)
Oben sind die nötigen Einstellungen fett markiert. Es ist also irq und share_irq. In den ersten Tests, siehe 1. Beitrag, habe ich dem Treiber nur den Parameter io mitgegeben. Das reicht für den seriellen onboard-Anschluss aus, aber nicht für die PCIe-Karte
I/O und irq der Hardware rausfinden:
Code:
# dmesg|grep ttyS
[ 0.647712] 0000:04:00.0: ttyS4 at I/O 0xd020 (irq = 18, base_baud = 921600) is a Sunix
Als erstes den Treiber ohne share_irq ausprobiert:
Code:
# modprobe serial_ir io=0xd020 irq=18
Das System meldet einen Fehler:
Code:
# dmesg
[ 225.182815] genirq: Flags mismatch irq 18. 00000000 (serial_ir) vs. 00000080 (i801_smbus)
[ 225.182825] serial_ir serial_ir.0: IRQ 18 busy
[ 225.182828] serial_ir: probe of serial_ir.0 failed with error -16
Nach einem gescheiterten Versuch das Modul immer erst entladen:
Denn lsmod zeigt es als geladen an und ein neues Laden scheitert ohne vorheriges rmmod:
Code:
# lsmod|grep serial
serial_ir 24576 0
rc_core 61440 5 ir_rc6_decoder,rc_rc6_mce,cec,serial_ir
Laden des Treibers mit dem Parameter share_irq:
Code:
# modprobe serial_ir io=0xd020 irq=18 share_irq=1
Das Modul lädt ohne Fehler:
Code:
# dmesg
[ 240.742331] serial_ir serial_ir.0: auto-detected active low receiver
[ 240.742351] Registered IR keymap rc-rc6-mce
[ 240.742418] rc rc0: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0
[ 240.742548] rc rc0: lirc_dev: driver serial_ir registered at minor = 0, raw IR receiver, raw IR transmitter
[ 240.742629] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0/input15
Die Fernbedienung funktionioniert:
Code:
# mode2 -H default -d /dev/lirc0
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
Warning: Running as root.
space 16777215
pulse 960
space 814
pulse 1812
space 1735
pulse 924
space 784
pulse 1010
space 799
pulse 979
space 786
pulse 1851
^C
Soweit so gut. Es folgt noch die Konfiguration von lircd und irexec.
Eine Frage noch. Wie kann ich das vom Kernel automatisch geladene Gedöns verhinden, das ich nicht brauche?
Also:
Code:
# dmesg
[ 240.742351] Registered IR keymap rc-rc6-mce
und
Code:
# lsmod|grep serial
serial_ir 24576 0
rc_core 61440 5 ir_rc6_decoder,rc_rc6_mce,cec,serial_ir
Nochmal der Ablauf zusammengefasst:
ttyS*, I/O und irq der Hardware rausfinden:
Code:
# dmesg|grep ttyS
[ 0.647712] 0000:04:00.0: ttyS4 at I/O 0xd020 (irq = 18, base_baud = 921600) is a Sunix
Treiber laden:
Code:
# setserial /dev/ttyS4 uart none
# modprobe serial_ir io=0xd020 irq=18 share_irq=1
Testen:
Code:
# mode2 -H default -d /dev/lirc0
space 16777215
pulse 960
...
Lesezeichen