MCP2200 auf Ubuntu 24.04 LTS (Kernel 6.8)

Wie ich am 29. August geschrieben habe, hatte ich diverse Probleme mit „Ubuntu Server 24.04 LTS und HID Devices mit MCP2200 Chipsatz„.
Zwischenzeitlich war ich aber in der Lage das Problem weiter einzukreisen und zu Lösen.

Vermutung

Ende August gab es eine Erweiterung bei den Treibern im Linux Kernel. Folgende Diskussion habe ich hierzu gefunden: https://lore.kernel.org/lkml/202308180056.nB1KSUap-lkp@intel.com/T/.
Ende November ist es dann in den Quellcode eingeflossen: https://github.com/torvalds/linux/blob/master/drivers/hid/hid-mcp2200.c.

Diese Änderung floss dann vermutlich in Kernel 6.8, der mit Ubuntu 24.04 ausgeliefert wurde und dazu führte, dass das Relaisboard (USB Relay Module 4 Channels, for Home Automation – v2) der Firma Denkovi Assembly Electronics LTD, sobald as am USB Port angeschlossen wurde nun mit dem NEUEN Treiber versorgt wird und nicht mehr mit dem generischen HID Treiber.
Mit dem alten Treiber wurde im Devicetree von Linux das Gerät /dev/usb/hiddev0 angelegt. Das ist auch das Gerät, welches man in den Docker Container linken muss (--device=/dev/usb/hiddev0) damit das Relaisboard von dort aus angesprochen werden kann.

Das sieht man, wenn man sich den Ladevorgang via dmesg anschaut und vergleicht:

Ubuntu 22.04 dmesg

[ 2.437680] usb 1-2: new full-speed USB device number 2 using xhci_hcd
[ 2.591719] usb 1-2: New USB device found, idVendor=04d8, idProduct=00df, bcdDevice= 1.01
[ 2.591756] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2.591770] usb 1-2: Product: MCP2200 USB Serial Port Emulator
[ 2.591783] usb 1-2: Manufacturer: Microchip Technology Inc.
[ 2.591794] usb 1-2: SerialNumber: 0002460031
[ 2.884575] hid: raw HID events driver (C) Jiri Kosina
[ 2.889410] usbcore: registered new interface driver usbhid
[ 2.889425] usbhid: USB HID core driver
[ 2.893929] hid-generic 0003:04D8:00DF.0001: hiddev0,hidraw0: USB HID v1.11 Device [Microchip Technology Inc. MCP2200 USB Serial Port Emulator] on usb-0000:00:15.0-2/input2

Ubuntu 24.04 dmesg

[ 184.330464] usb 1-2: new full-speed USB device number 3 using ohci-pci
[ 184.857213] usb 1-2: New USB device found, idVendor=04d8, idProduct=00df, bcdDevice= 1.01
[ 184.857220] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 184.857221] usb 1-2: Product: MCP2200 USB Serial Port Emulator
[ 184.857223] usb 1-2: Manufacturer: Microchip Technology Inc.
[ 184.857224] usb 1-2: SerialNumber: 0001693160
[ 184.877118] hid-generic 0003:04D8:00DF.0002: hiddev0,hidraw1: USB HID v1.11 Device [Microchip Technology Inc. MCP2200 USB Serial Port Emulator] on usb-0000:00:06.0-2/input2
[ 184.901800] mcp2200 0003:04D8:00DF.0002: USB HID v1.11 Device [Microchip Technology Inc. MCP2200 USB Serial Port Emulator] on usb-0000:00:06.0-2/input2
[ 184.906240] cdc_acm 1-2:1.0: ttyACM0: USB ACM device
[ 184.906268] usbcore: registered new interface driver cdc_acm
[ 184.906270] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[ 448.466402] usb 1-2: USB disconnect, device number 3
[ 457.088963] usb 1-2: new full-speed USB device number 4 using ohci-pci
[ 457.624849] usb 1-2: New USB device found, idVendor=04d8, idProduct=00df, bcdDevice= 1.01
[ 457.624855] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 457.624857] usb 1-2: Product: MCP2200 USB Serial Port Emulator
[ 457.624858] usb 1-2: Manufacturer: Microchip Technology Inc.
[ 457.624860] usb 1-2: SerialNumber: 0001693160
[ 457.636478] cdc_acm 1-2:1.0: ttyACM0: USB ACM device
[ 457.661624] mcp2200 0003:04D8:00DF.0003: USB HID v1.11 Device [Microchip Technology Inc. MCP2200 USB Serial Port Emulator] on usb-0000:00:06.0-2/input2

Schnelle Lösung

Es mag hier vermutlich eine elegante Lösung geben, aber die quick ’n‘ dirty Variante ist, den MCP2200 Kernel Treiber zu deaktivieren.

Eine temporäre Aktivierung (zum Testen) macht man mit dem Befehl:

modprobe -r hid_mcp2200

Die permanente Deaktivierung erfolgt dann, indem man einen Blacklist Eintrag in der Datei: „/etc/modprobe.d/blacklist.conf“ vornimmt:

# The MCP2200 kernel driver doesn't support the "USB Relay Module 4 Channels,
# for Home Automation – v2" from "Denkovi Assembly Electronics LTD".
# if the /dev/usb/hiddev* device is missing, you need to deactivate the kernel
# driver to fallback to the generic HID kernel driver.
blacklist hid_mcp2200

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.