Forum: PC Hard- und Software Linux - Anderen Treiber für Gerät verwenden


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Sigint 112 (sigint)


Lesenswert?

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

von Walter K. (walter_k488)


Lesenswert?

Sigint 1. schrieb:
> 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.

Aber:
Es gibt doch libraries für Linux - zb wenn Du mit Python arbeiten 
willst:
https://github.com/rm-hull/k8055

von Sigint 112 (sigint)


Lesenswert?

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. :-(

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Im LFS Book gibt's folgendes Rezept gegen "unwanted modules":
Vielleicht klappt das ja bei deiner Distribution auch so oder aehnlich.
1
9.3.3.3. Udev Loads Some Unwanted Module
2
3
Either don't build the module, or blacklist it in a /etc/modprobe.d/blacklist.conf file as done with the forte module in the example below:
4
5
blacklist forte
6
7
Blacklisted modules can still be loaded manually with the explicit modprobe command.

Gruss
WK

von Sigint 112 (sigint)


Lesenswert?

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.

von Dergute W. (derguteweka)


Lesenswert?

Sigint 1. schrieb:
> Das ist bei
> Windows eindeutig besser gelöst.

Mimimimi.
Dann nimm halt Windows unn fertsch.

Gruss
WK

von Vanye R. (vanye_rijan)


Lesenswert?

> 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.

Vanye

von Old (Gast)


Lesenswert?

Vanye R. schrieb:
>> 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?

von Frank K. (fchk)


Lesenswert?

Sigint 1. schrieb:
> 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.

fchk

von Le X. (lex_91)


Lesenswert?

Vanye R. schrieb:
> 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.

von Daniel A. (daniel-a)


Lesenswert?

Wenn er wirklich in einer blacklist ist, dann nimm ihn da halt wieder 
raus. Ich verstehe dein Problem nicht wirklich.

von Rolf M. (rmagnus)


Lesenswert?

Daniel A. schrieb:
> 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.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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:

https://bugs.chromium.org/p/chromium/issues/detail?id=679314

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.

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

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.

Wie dem auch sei, anscheinend sind es keine richtigen HID devices.
Zumindest sehen das die Kernel developer so:
https://patchwork.kernel.org/project/linux-input/patch/1360761765-20142-1-git-send-email-abbotti@mev.co.uk/

Dank Open Source kannst du dir aber ansehen, was es mit diesem 
blacklisting auf sich hat...
1
bool hid_ignore(struct hid_device *hdev)
2
{
3
  int i;
4
5
  if (hdev->quirks & HID_QUIRK_NO_IGNORE)
6
    return false;
7
  if (hdev->quirks & HID_QUIRK_IGNORE)
8
    return true;
9
...
10
  case USB_VENDOR_ID_VELLEMAN:
11
    /* These are not HID devices.  They are handled by comedi. */
12
    if ((hdev->product >= USB_DEVICE_ID_VELLEMAN_K8055_FIRST &&
13
         hdev->product <= USB_DEVICE_ID_VELLEMAN_K8055_LAST) ||
14
        (hdev->product >= USB_DEVICE_ID_VELLEMAN_K8061_FIRST &&
15
         hdev->product <= USB_DEVICE_ID_VELLEMAN_K8061_LAST))
16
      return true;
17
    break;

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.

Ein kurzes Beispiel, wie du das Flag setzt habe ich hier gefunden:
https://gist.github.com/jayme-github/fb129cb3777c7c357ecc5a6ac00f0aae

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"...

73

von Jack V. (jackv)


Lesenswert?

Le X. schrieb:
> 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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jack V. schrieb:
> 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.

von Bauform B. (bauformb)


Lesenswert?

Man kann den USB-Treibern zur Laufzeit neue Geräte bekannt machen. Ich 
benutze z.B.
1
echo "0403 d4f2" > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
Evt. kann man mit new_id oder/und remove_id etwas ausrichten. Versuch 
macht kluch und kostet nichts.

von Sigint 112 (sigint)


Lesenswert?

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.

von Sigint 112 (sigint)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.