Thursday, January 13, 2005

USB Freuden

Unter der Überzeugung das Super Nintendo Spiele besser mit einem Gamepad spielen lassen habe ich mir letzte Woche Dienstag ein solches gekauft, das netterweise auch Zwei Buttons an der richten Stelle für Start und Select hat. Leider gestaltet sich das zusammenspiel zwischen Linux und USB Geräten nicht immer so leicht wie man es erwarten könnte, so das ich den halben Tag damit verbracht habe das ding zum laufen zu bekommen und es erst am nächsten Morgen benutzen konnte.

Ich bin zwar nicht der erste der das Problem hatte, aber das ich meinen Kernel auf einen Hybrid 32/64bit upgegraded hatte macht die Sache nicht einfacher. Wenn man das Gamepad anschließt kann man keine weiteren USB Geräte anschließen da der Treiber bei der initialisierung festhängt. Die schon angeschlossenen Geräte funktionieren aber weiterhin. Sollte man das Gamepad während des Bootvorgangs schon angeschlossen haben darf man es wieder rausziehen und wieder neustarten da er kurz nach dem laden der USB-Treiber hängt. Irgendwie hatte ich es sogar geschafft die USB-Treiber von Windows zu deinstallieren, ohne das ich etwas in Windows gemacht hatte.

Nach einigem Googlen bin ich auf die Ursache des Problems gestoßen, ein bug im USB-Treiber. Weil es keinen neueren Kernel für Debian Sid gibt der das Problem behebt mußte ich selber Patchen. Damit fingen die größeren Probleme an. Die Kernel-Quellen in Debian installieren, dann in mehreren anläufen per hand patchen (Probleme mit tabs und >), und ja wie kompiliere ich eigentlich nur den Teil vom Kernel den ich wirklich brauche passt der dann auch zu meinem installierten kernel? Wenn die Module zum installierten Kernel passen sollen und ich nicht den Kernel selber konfigurieren will bräuchte ich die Konfiguration von meinem installierten Kernel. Die liegt, wie ich nach viel Google rausgefunden habe, in /boot/config-. Ok Treiber gepatcht, Kernel konfiguriert fehlt nur noch make.

Wenn da nicht noch der Hybrid kernel wäre, mit dem kann nicht einfach so einen neuen Kernel compilieren, also alten Kernel installieren, aber das geht auch, wieder wegen dem Hybriden, nicht ohne weiteres. mkinitrd versagt da seinen dienst, auch hier wieder Googlen führt zu einem ldd shell script. Danach klappte die Kernel-Installation, neustart, Kernel kompilieren, am nächsten Morgen die USB Module in /lib/modules... kopieren und endlich konnte Ich mit meinem Gamepad spielen.

USB-Patch: http://marc.theaimsgroup.com/?l=linux-usb-devel&m=109292956316049&w=2
ldd script: http://lists.debian.org/debian-kernel/2004/11/msg00041.html

No comments: