Ich habe mir vor einiger Zeit ein Trekstor Primebook C11 zugelegt. Es ist ein kleines 11 Zoll Notebook mit einer Celeron CPU, 4 GB RAM, Intel Grafik, 64 GB SSD und einem M2 Slot für eine zweite SSD. Das Display ist klar und brillant und das Ganze bekommt man in einer Preisklasse unter 300 Euro. Für mich ein idealer Begleiter für unterwegs.
Da ich Linux M$ vorziehe, fiel die Entscheidung relativ schnell, Arch auf dem Notebook zu installieren. Das läuft auch prima. Der Deepin-Desktop sieht schick aus und läuft flüssig. Libre-Office und TexLive laufen ausreichend schnell, zum Surfen langt es sowieso allemal. Zum Zocken ist es halt nicht gedacht, aber da kann man in der Preisklasse auch nicht viel erwarten.
Einziges Manko: Der Preis kommt nicht von ungefähr. Der impliziert günstige chinesische Hardwarekomponenten. Es läuft alles out of the box – außer Touchpad und Touchscreen. Für ein Immerdabeinotebook ein unhaltbarer Zustand
Also: Abhilfe muss her!
Das Touchpad habe ich im ersten Schritt ans Laufen gebracht. Touchscreen kann ich auch drauf verzichten, aber ich werde das später noch versuchen.
Ein erster Versuch nach einer Ubuntu-Anleitung ging in die Hose. Aber ich bin auch kein Kernel-Developer.
Also the Arch-Way:
Zum Grundverständnis: Das Sipodev-Touchpad ist per i2c ansteuerbar. Das entsprechend zuständige Kernel-Modul ist i2h-hid.ko.xz. Nur, dass der Standardkernel von Arch das Gerät nicht unterstützt. Das trifft auch auf den Vanilla-Kernel von kernel.org zu. Abhilfe schafft ein Patch, der in die Quellen appliziert werden muss vor Erstellung des Moduls.
Aaaaaaber, eins nachm andern. Das Ganze ist keine Hexerei. Aber wenn man davor steht, plöppen die Fragezeichen zunächst auf. Ignorieren, machen, verstehen!
Hilfestellung bietet: https://wiki.archlinux.org/index.php/Compile_kernel_module.
Im Folgenden benötigen wir die Pakete linux-headers und base-devel, die wir vorab ganz normal mit pacman installieren.
Zunächst müssen wir die genaue Bezeichnung des Kernels herausfinden, der auf unserem System läuft:
$ uname -r4.18.16-arch1-1-ARCH
Dann besorgen wir uns die passenden Kernelquellen von http://www.kernel.org.
Im Home-Verzeichnis legen wir ein Verzeichnis kernel an, die Quellen entpacken wir da rein. Die Quellen für den Kernel und den Treiber haben wir nun, aber wir müssen nun die Quellen noch patchen.
Wir wechseln in das richtige Verzeichnis des zu erstellenden Moduls: ~/kernel/linux-4.18.16/drivers/hid/i2c-hid/.
Den Patch bekommen wir hier (thx to brotprofessor): https://raw.githubusercontent.com/brotfessor/sipodev/master/sipodev-quirk.patch
Einfach mit rechtsclick herunterladen in das og. Verzeichnis. Patch und Quelle müssen im gleichen Verzeichnis sein.
Nun wenden wir den Patch an mit:
$ patch i2c-hid.c < sipodev-quirk.patch
Wunderbar, soweit sind wir schonmal. Nun wechseln wir in das Build-Verzeichnis des Kernels (~/kernel/linux-4.18.16/).
Wir bereinigen die Build-Umgebung mit:
$ make mrproper
Nun müssen wir die aktuelle Kernel-Konfiguration in das Build-Verzeichnis kopieren:
$ cp /usr/lib/modules/$(uname -r)/build/.config ./ $ cp /usr/lib/modules/$(uname -r)/build/Module.symvers ./
Schauen wir, ob alles passt:
$ make oldconfig
Hier sollte kein Fehler auftreten. Bei mir ging es auf Anhieb.
Nun müssen wir die Extra-Version des laufenden Kernels angeben. Sonst lässt sich später das Modul nicht laden. Das Problem hatte ich nach der ersten gefundenen Anleitung, die eigentlich für Ubuntu war. Die Extra-Version findet man im Makefile/usr/lib/modules/$(uname -r)/build/Makefile. In meinem Fall war dies „-arch1“.
Nun bereiten wir die Kompilierung des Moduls vor:
$ make EXTRAVERSION=-arch1 modules_prepare
Und jetzt das Modul erstellen:
$ make M=drivers/hid/i2c-hid
Wenn das ohne Fehler durchgelaufen ist, haben wir nun das fertige Modul, welches wir für das Touchpad benötigen – nur noch nicht komprimiert und da, wo es hingehört.
$ xz drivers/hid/i2c-hid/i2c-hid.ko $ sudo cp -f drivers/hid/i2c-hid/i2c-hid.ko.xz /usr/lib/modules/`uname -r`/kernel/drivers/hid/i2c-hid/
Gut soweit. Nun laden wir das Modul, aber erst schmeißen wir ein evtl. geladenes raus.
$ sudo modprobe -r i2c-hid $ sudo modprobe i2c-hid
Und voilà, das Touchpad läuft. Ein Träumchen, wenn man sich da durchwurstelt und es auf Anhieb läuft.
Mit
$ sudo mkinitcpio -p linux
packt man das Modul noch ins Initramfs, damit es bei jedem Booten zur Verfügung steht.