Moin zusammen,
ich habe ein Problem unter Linux und finde keine passende Lösung:
Ich habe ein K8055 von Vellemann und möchte das unter Linux verwenden. Das Problem ist, daß ich das Board als HID-Gerät ansprechen möchte. (WebHID in Chrome) Leider wird das Board unter Linux mit dem Treiber vmk80xx.ko betrieben und im HID-Treiber explizit rausgefiltert. Gibt es trotzdem eine Möglichkeit das Board mit dem HID-Treiber zu verwenden?
Moin zusammen,
ich habe ein Problem unter Linux und finde keine passende Lösung:
Ich habe ein K8055 von Vellemann und möchte das unter Linux verwenden.
Das Problem ist, daß ich das Board als HID-Gerät ansprechen möchte.
(WebHID in Chrome) Leider wird das Board unter Linux mit dem Treiber
vmk80xx.ko betrieben und im HID-Treiber explizit rausgefiltert. Gibt es
trotzdem eine Möglichkeit das Board mit dem HID-Treiber zu verwenden?
Gruß,
SIGINT
Das K8055 Universum ist leider total Windows-lastik ( also woke )
Was Du mit HID Treibern willst, verstehe ich nicht.
Naja: Das K8055 Board ist halt ein HID-Device! Die Programmierer vom Kernel meinen aber, daß es kein HID-Device ist und blacklisten es im HID-Treiber. Dabei wird es im Descriptor eindeutig als Custom-HID deklariert. Das Problem ist jetzt, daß Chrome das Board natürlich nicht per WebHID findet. Man kann zwar den HID-Treiber modifizieren, dann wird das Gerät als HID erkannt... das ist aber keine Lösung, die man einem Linux-Neuling zumuten möchte. Ich hatte gehofft, es gibt eine andere Lösung. :-(
Nee, das ist nicht das Problem. Das K8055 wird vom HID-Treiber selbst in einer blacklist geführt. Deshalb kann der Treiber nicht verwendet werden, sondern nur der vmk80xx. Ich hatte gehofft, daß man das irgendwie forcieren könnte... scheinbar geht das nicht. Also muss ich den HID-Treiber von Hand anpassen und neu übersetzten. Das ist bei Windows eindeutig besser gelöst.
Also muss ich den HID-Treiber von Hand anpassen und neu übersetzten.
Das ist bei Windows eindeutig besser gelöst.
Ich verstehe nicht wie du auf diese absurde Schlussfolgerung kommst.
Du kannst bei Linux einfach den Kernel nehmen, ihn von Hand auf das
anpassen was immer du moechtest und neu uebersetzen.
Bei Windows hast du die Moeglichkeit nicht. Du musst das hinnehmen
was dir der Hersteller gibt und fertig.
Du machst den Fehler zu glauben das Windows den Standard setzt dem
alle zu folgen haben, taetsaechlich ist es aber nur eines von vielen
Betriebsystemen und noch dazu ein schlechtes weil es dir relativ
wenig Einflussnahme erlaubt.
Also muss ich den HID-Treiber von Hand anpassen und neu übersetzten.
Das ist bei Windows eindeutig besser gelöst.
Du kannst bei Linux einfach den Kernel nehmen, ihn von Hand auf das
anpassen was immer du moechtest und neu uebersetzen.
Bei Windows hast du die Moeglichkeit nicht. Du musst das hinnehmen
was dir der Hersteller gibt und fertig.
Was ist für Anwender wohl besser: Selber am Linux-Kernel was anpassen und neu compilieren zu müssen oder einfach einen Windows-Treiber vom Hersteller installieren zu können?
Nee, das ist nicht das Problem. Das K8055 wird vom HID-Treiber selbst in
einer blacklist geführt. Deshalb kann der Treiber nicht verwendet
werden, sondern nur der vmk80xx. Ich hatte gehofft, daß man das
irgendwie forcieren könnte... scheinbar geht das nicht. Also muss ich
den HID-Treiber von Hand anpassen und neu übersetzten. Das ist bei
Windows eindeutig besser gelöst.
Das muss ja irgend einen Grund haben, warum das Teil in der Blacklist gelandet ist.
Alternativ kannst Du auch den PIC auf dem Board gegen einen mit eigener Firmware austauschen, der eben richtig funktioniert und nicht geblockt wird.
Ich verstehe nicht wie du auf diese absurde Schlussfolgerung kommst.
Du kannst bei Linux einfach den Kernel nehmen, ihn von Hand auf das
anpassen was immer du moechtest und neu uebersetzen.
[...]
taetsaechlich ist es aber nur eines von vielen
Betriebsystemen und noch dazu ein schlechtes weil es dir relativ
wenig Einflussnahme erlaubt.
Nenn mich verwöhnt, aber im Jahr 2023 habe ich schon den Anspruch an mein Desktop-OS dass ich einem Gerät einen Treiber zuweisen kann ohne am Kernel rumkompileren zu müssen.
Wenn er wirklich in einer blacklist ist, dann nimm ihn da halt wieder
raus. Ich verstehe dein Problem nicht wirklich.
Das Problem ist, dass es nicht um eine blacklist geht. Dieses spezifische Gerät ist im C-Code des Treibers selbst explizit ausgenommen. Man muss also den Code ändern und neu compilieren, damit sich der Treiber für das Gerät zuständig fühlt.
Kannst du versuchen per WebUSB auf das Gerät zuzugreifen? Dann musst du das HID-Protokoll halt selbst implementieren. Der Knackpunkt ist, ob das geht obwohl dieser vmk80xx.ko Treiber geladen ist. Notfalls könnte man den eventuell deaktivieren/löschen ohne den Kernel neu kompilieren zu müssen.
Libusb hat dafür libusb_detach_kernel_driver. Chrome implementiert das leider nicht:
Das wäre aber in einem gewöhnlichen C/C++/Java/Python... -Programm auf Basis von libusb problemlos möglich, nur eben nicht aus Chrome. Allerdings braucht libusb_detach_kernel_driver anscheinend root-Rechte. Chrome mit root-Rechten starten ist wohl sowieso keine besonders gute Idee.
Nur zur Info, unter Windows kämpfe ich regelmäßig mit "falschen" Treibern... Scheinbar bin ich damit auch nicht alleine... sonst würde es dieses Zadig Tool nicht geben.
Aus diesem kurzen Snippet sollte klar sein, dass du nur das NO_IGNORE Flag setzen musst. Kann sein, dass du das Device auch für den Comedi Treiber blacklisten bzw. per uDev den HID Treiber für diese IDs festlegen musst.
Zugegebenermaßen habe ich das noch nie gebraucht....
WebHID wäre mir persönlich aber zu krass... lieber eine virtuelle Taste definieren und diese per Javascript "Drücken"... aber gut, es ging ja nur um ein Kernel "Problem"...
Nenn mich verwöhnt, aber im Jahr 2023 habe ich schon den Anspruch an
mein Desktop-OS dass ich einem Gerät einen Treiber zuweisen kann ohne am
Kernel rumkompileren zu müssen.
Nix für ungut, aber genau das passiert ja. Es ist sogar der Treiber, der ausdrücklich für das vorliegende Device geschrieben wurde, und nicht nur ein generischer Klassentreiber. Der TE möchte aber nicht den zu dem Gerät gehörenden Treiber geladen haben, sondern eben den generischen Klassentreiber – und nenn’ mich von mir aus wieder Fanboy, aber die Möglichkeit hättest du bei MS’ Betriebssystem gar nicht erst.
und nenn’ mich von mir aus wieder Fanboy, aber die Möglichkeit hättest
du bei MS’ Betriebssystem gar nicht erst.
Das geht schon, über den Gerätemanager oder Tools wie Zadig. Besonders toll ist das aber nicht. Das kann man z.B. nutzen um den WinUSB Treiber statt des FTDI Treibers für einen FT2232 zu laden, um den dann per OpenOCD zum JTAG-debuggen zu nutzen.
Kann mal ein Mod den Beitrag schließen? Hier kommt wohl nicht mehr viel sachdienliches. Die Idee mit dem NO_IGNORE Flag schaue ich mir an, vielen Dank. Mit WebUSB werden ich das auch mal testen.
Nachtrag: Hans W. hatte den richtigen Riecher! Man muss folgendes in die Kernel-Bootoptionen eintagen: "usbhid.quirks=0x10cf:0x5500:0x40000000", dann wird der richtige Treiber für das K8055 geladen, nämlich der HID-Treiber. Dann findet Chrome das Device, wenn man noch eine UDEV-Regel anlegt für die Zugriffsrechte.