Thinkpad X100e

Systembeschreibung

Machine Type 2876
Prozessor AMD Athlon Neo Single-Core MV-40 1,6 GHz
(für den Kernel: Athlon64 K8/Opteron)
Speicher 2 GB
Schnittstellen 3 x USB, 1 x RJ45, 1 x VGA
Grafik ATI Mobility Radeon HD 3200
Festplatte 250 GB
Netzwerk Ethernet: Realtek RTL8111/8168B (10/100/1000)
WLAN: Realtek 8191SEvB
UMTS: Qualcomm Gobi 2000
Sound HD Audio mit CX20582-Codec
Kartenleser MMC, MS, MS Pro, SD
Webcam integrierte 0,3 MegaPixel-Kamera

Zusätzliche Angaben, auch über andere Modelle, im ThinkWiki.


16. April 2010

Einmal Debian, bitte

Das Gerät ist nagelneu und wurde mit vorinstalliertem Microsoft Windows 7 ausgeliefert, allerdings ohne Installationsmedium oder auch nur Recovery-CD/-DVD. Microsoft spart sich hier die DVD für 50 Cent (bei entsprechend hoher Auflage) und läßt den Käufer, dem er für das Betriebssystem bereits 70 € abgenommen hat, die DVD selbst brennen. Ohne Win7 wiederum kann man das Gerät scheinbar nirgendwo kaufen. Kundenfreundlichkeit sieht bei mir anders aus.

Also gut. Die Anforderung: Windows-Partition verkleinern, zusätzlich Debian GNU/Linux (squeeze, also derzeit testing) installieren und damit primär UMTS zum Laufen bekommen. Alles andere kann der Eigentümer dann selbst installieren.

Die Debianisierung ist recht einfach: Herunterladen der ersten CD von Debian/Squeeze für AMD64, gebrannt und dann auch gebootet wird von einem am USB angeschlossenen DVD-RW. Im Installer von Squeeze wird die Verkleinerung einer vorhandenen Partition direkt angeboten. Ich bin begeistert.

Die Platte ist bei Auslieferung in drei primäre Partitionen aufgeteilt: Vorn 1,3 GB mit Boot-Flag, dann die Hauptpartition mit rund 238 GB und schließlich eine 10,5 GB große Partition, die Win7 offenbar für Treiber etc. verwendet. Die große Partition in der Mitte verkleinere ich auf 60 GB und erstelle in dem nun freigewordenen Bereich vier logische Partitionen: swap (4 GB), /boot (100 MB, auf Wunsch des Eigentümers mit ext2), / (root, 10 GB, ext3) und /home (Rest, ext3). Plattenverschlüsselung wird nicht eingesetzt.

Während des Installationsvorgangs zeigt ncurses ein paar witzige Effekte: Bei den Auswahlfeldern unten in den Fenstern erscheinen manchmal nicht <Ja> und <Nein>, sondern <Jain> und <Nein> oder <Jainen!> und <Neinen!> und ähnliche lustige Varianten. Außerdem werden im Bereich dieser Felder auch immer mehrere Ð angezeigt, die da nicht hingehören. Schließlich wollten wir nur mal sehen, was da unter „Software installieren“ so angeboten wird, aber dann wird wohl ein Tastendruck falsch interpretiert, und statt des gewünschten Abbruchs dieses Menüpunktes schaufelt der Installer mal eben fast 1200 Pakete auf die Kiste, Gnome inclusive. Nun gut, kann man wieder deinstallieren.

Der Rest läuft dann störungsfrei durch (bis auf weitere Anzeigefehler), dann Reboot ins neu installierte System.

Wo ist die Gobi?

In dmesg ist die UMTS-Karte nicht zu finden. Der Distributions-Kernel (2.6.32) kann sie also nicht identifizieren oder hat keinen passenden Treiber dafür. In lsusb ist das Gerät vorhanden:

Bus 001 Device 002: ID 05c6:9204 Qualcomm, Inc.

Im ThinkWiki steht eine sehr schlichte Anleitung. Die Treiber aus der Windows-Installation zu pflücken, ist erstmal kein Problem: NTFS-Modul laden, Windows-Partition mounten, mc nach den Dateinamen suchen lassen und diese ins angegebene Zielverzeichnis kippen. Die Anweisungen zum Firmware-Loader stellen mich jedoch erst einmal vor ein Rätsel.

Mit Hilfe von andnie vom Chaosdorf wird jedoch schnell klar, daß mit „qcserial“ ein Kerneltreiber gemeint ist, nämlich /drivers/usb/serial/qcserial.c. Wenn ich den editieren muß, läuft das auf einen Kernelbau hinaus. Wir ziehen die Kernel-Sourcen aus Debian, dann kopieren wir nach dem Auspacken die .config des bisherigen Kernels dazu und lassen make oldconfig laufen. In die qcserial.c trage ich die USB-ID der Karte sowie ihre zweite ID ein, die sie bekommt, wenn sie zum Modem wird:

{USB_DEVICE(0x05c6, 0x9204)}, /* Generic Gobi QLD device */

{USB_DEVICE(0x05c6, 0x9205)}, /* Generic Gobi Modem device */

Dann gehe ich noch kurz mit make menuconfig die Einstellungen für den neuen Kernel durch und werfe bei der Gelegenheit einiges an Ballast raus. Ein wenig kompliziert wird die Suche nach dem Treiber für die WLAN-Karte; sie findet sich eben nicht in den üblichen WiFi-Treibern, sondern unter den Staging-Treibern. Da muß man auch erstmal drauf kommen.

Schließlich make, make install, Eintrag in /boot/grub/menu.lst.

Den gobi_loader hole ich direkt von der Seite des Autors, compilieren und installieren sind kein Problem. Die udev-Regel dafür wird auch gleich automatisch angelegt. Aber nach Reboot ist das nötige /dev/ttyUSB0 nicht vorhanden, und dmesg schweigt sich aus.

Beim Booten fiel dann noch so nebenbei auf, daß der Bootprozeß an zwei Stellen, bei denen es jeweils um SCSI-Devices geht, länger stehenbleibt und auf irgendwas zu warten scheint.

Wir spielen noch einen zweiten Patch ein, und zwar für die Datei /drivers/usb/serial/generic.c ([REGRESSION] "USB: use kfifo to buffer usb-generic serial writes" causes gobi_loader to hang). Aber auch der ändert nichts.

Nach längerer Suche im Netz stellt sich heraus: qcserial ist ab 2.6.32 kaputt. Ob das Problem in neueren Versionen behoben ist, kann ich nicht herausfinden, aber in 2.6.31 soll der Treiber noch funktionieren.

Also, was hilft's: Ich ziehe 2.6.31.13 von ftp.de.kernel.org. Ein make oldconfig traue ich mich jetzt nicht, also konfiguriere ich komplett neu. Nach dem Reboot fällt mir schon ein, daß ich natürlich auch hier qcserial.c editieren muß, und baue den Kernel dann nochmal.

Bis auf die Tatsache, daß der Bootvorgang durch die Optimierungen, die ich dabei noch vornehme, dann rasend schnell ist, ändert sich aber nichts: /dev/ttyUSB0 bleibt verschwunden. Daran ändern auch weitere Optimierungen am Kernel und ein Kernel-Neubau nach einem make clean nichts.


17. April 2010

Frosch gegen Qualcomm – 1:0

Bei einer weiteren Suche finde ich einen ausführlicheren Patch für qcserial.c. Anssi Hannula veröffentlichte diesen am 13. Februar: [PATCH] USB: qcserial: Add support for Qualcomm Gobi 2000 devices. Leider steht nicht dabei, auf welche Kernel-Version sich dieser Patch bezieht.

Ich entscheide mich dafür, mir den aktuellsten Kernel 2.6.33.2 zu holen und den Patch händisch in die darin befindliche qcserial.c einzuhacken. Dann make menuconfig, nochmal einige unnötige Treiber rausgeworfen (irgendwie finde ich immer noch welche), dann make.

Der Compiler hat nichts zu meckern, und nach dem Reboot finde ich im dmesg endlich die Zeilen:

usb 1-3: New USB device found, idVendor=05c6, idProduct=9204

usb 1-3: New USB device strings: Mfr=3, Product=2, SerialNumber=0

usb 1-3: Product: Qualcomm Gobi 2000

usb 1-3: Manufacturer: Qualcomm Incorporated

[…]

usbcore: registered new interface driver usbserial_generic

usbserial: USB Serial Driver core

USB Serial support registered for GSM modem (1-port)

usbcore: registered new interface driver option

option: v0.7.2:USB Driver for GSM modems

USB Serial support registered for Qualcomm USB modem

qcserial 1-3:1.1: Qualcomm USB modem converter detected

usb 1-3: Qualcomm USB modem converter now attached to ttyUSB0

usbcore: registered new interface driver qcserial

Das sieht doch schonmal wunderschön aus. Ich kann jetzt nur das letzte Stück nicht testen, weil ich nicht sicher bin, welche APN des Mobilfunkanbieters die richtige ist; und wenn ich die falsche erwische, bezahlt der Eigentümer $viel Geld. ;-)


18. April 2010

Fein-Tuning

Der neue Kernel hat noch ein kleines Problem: Beim Booten macht er kurz vor dem Prompt etwa drei Minuten Pause. Ein acpi_fakekeyd meckert da rum, verewigt sich dann aber nicht in dmesg. Ich finde nur einen einzigen Hinweis auf ein Problem mit diesem Daemon, aber der ist von 2008 und betrifft nicht den Bootvorgang. Und so nebenbei mag dieser Kernel auch die NTFS-Partitionen nicht mounten.

Letzteres ist das einfachere Problem: Ich hatte vor dem letzten Compilerlauf FUSE rausgenommen, und das wird jetzt von mount vermißt. Stand im Hilfetext von FUSE allerdings so nicht dabei.

Der Hänger beim Booten erweist sich am Ende nicht als Kernel-, sondern als udev-Problem:

/etc/init.d/udev line 269:

- if udevadm settle; then

+ if udevadm settle --timeout=10; then

Viel ärgerlicher ist, daß das Device für das UMTS-Modem jetzt zwar vorhanden ist, von Gnome-PPP und wvdial aber nicht gesehen werden kann. Hier fehlt jetzt wohl wirklich eine Alternative zu thinkpad_acpi im Kernel.


21. Mai 2010

Neuer Kernel, neuer Versuch

Wir unternehmen einen neuen Versuch mit Kernel 2.6.34. Auch hier geht ohne den finnischen Patch von qcserial.c erstmal gar nichts. Mit Patch ist /dev/ttyUSB0 sofort da.