out-of-tree Kernelmodule mit akms

  Lioh Möller   Lesezeit: 4 Minuten

Unter Alpine Linux lassen sich mithilfe von akms out-of-tree Kernelmodule automatisch erstellen und einbinden.

out-of-tree kernelmodule mit akms

Einige Kernelmodule stehen nicht im Upstream-Kernel zur Verfügung und müssen manuell übersetzt und hinzugefügt werden. Dies ist oftmals bei proprietären WLAN-Treibern der Fall.


Im folgenden Beispiel geht es um die wl Treiber, welche für den Betrieb einiger Broadcom-Adapter benötigt werden. Dabei stehen für einige Hardwaremodelle Freie Treiber zur Verfügung, für andere jedoch nicht.

Auch die Freien Treiber benötigen üblicherweise unfreie Firmware. Zunächst sollte versucht werden, ob der brcmsmac Treiber infrage kommt. Sollte dies der Fall sein, lässt sich der Adapter standardmässig nutzen, sofern das passende Firmware Paket vorhanden ist. Unter Alpine Linux wäre dies linux-firmware-brcm, welches bereits mitinstalliert wird.

Bei Modellen welche den b43 Treiber benötigen muss die Firmware mithilfe von der Anwendung b43-fwcutter extrahiert werden.

In diesem Beispiel würde der Adapter des Typs BCM4313 zwar mit dem Freien brcmsmac Treiber funktionieren, es kommt dabei allerdings immer wieder zu Verbindungsabbrüchen.

Besser hingegen funktioniert das Gerät mit den broadcom-wl Treibern, welche nicht im offiziellen Kernel-Tree vorhanden sind.

Zur Übersetzung der Quellen müssen zunächst die passenden Kernel-Header und Werkzeuge installiert werden:

apk add alpine-sdk linux-lts-dev

Daraufhin kann das Treiber-Repository gecloned werden:

git clone https://github.com/antoineco/broadcom-wl.git /usr/src/wl

Zum manuellen Übersetzen und der Installation des Treibers, kann wie folgt vorgegangen werden:

cd /usr/src/wl
make
make install
depmod -A
modprobe wl

Allerdings müsste bei jeder Kernel-Aktualisierung der Treiber neu übersetzt und installiert werden.

Viele Linux-Distributionen bieten dazu dkms an, welches unter Alpine Linux nicht vorhanden ist. Als Alternative steht akms zur Verfügung, welches zunächst installiert werden muss:

apk add akms

Daraufhin kann eine entsprechende AKMBUILD Definition im Quellverzeichnis des Treibers erstellt werden:

vi /usr/src/wl/AKMBUILD

modname=wl
built_modules='wl.ko'
modver=6.30.223.271
build() {
    touch "$builddir"/Makefile
    make $MAKEFLAGS -C "$kernel_srcdir" M="$builddir" src="$srcdir" modules

Die Parameter müssen je nach zu übersetzenden Kernelmodul angepasst werden.

Daraufhin kann das Modul mithilfe von akms übersetzt und installiert werden:

akms install wl

Nun wird nach einer Kernel-Aktualisierung das Modul beim Systemstart automatisch übersetzt und in das System eingebunden.

Quelle: https://github.com/jirutka/akms/

Tags

Alpine, akms, dkms, Kernel, Broadcom, wl, b43, brcmsmac

Es wurden noch keine Kommentare verfasst, sei der erste!