Kernel für die Wolfson Pi Audio Card kompilieren
Neben dem günstigen Preis für einen fast vollwertigen Computer ist die Anzahl an verfügbaren Erweiterungen ein großer Pluspunkt des Raspberry Pi. Neben zahlreichen Platinen für Bastelprojekte aller Art gibt es auch Soundkarten, die eine Alternative zum eher mäßigen Klang der auf der Hauptplatine angebrachten Kopfhöerbuchse bieten und audiophile Klänge versprechen. In diesem Bereich gibt es im Wesentlichen zwei Konkurrenten: zum einen Hifiberry, das lediglich über Ausgänge verfügt und die Wolfson Audio Card, die zum fast gleichen Preis wie Hifiberry neben den Ausgängen auch noch Eingänge und eingebaute Mikrofone mitliefert.
Als größter Nachteil der Wolfson Audio Card entpuppt sich allerdings schnell der mangelde bis nicht vorhandene Treibersupport durch den Hersteller, denn offizielle Treiber sind nur den Kernel 3.10 verfügbar und dieser muß selbst gepatcht und kompiliert werden. Naja, auf der Packung steht ja auch nur
Ideal for applications including VoIP, gaming, high quality audio capture, digital audio processing and audio rendering, XBMC and media streaming, Internet radio, networked audio and DLNA audio rendering.
und nichts zum Thema, wie viele Klippen auf dem Weg dorthin zu umschiffen sind.
Die Kompilierung sollte nicht direkt auf den Raspberry Pi durchgeführt werden - in verschiedenen Foren ist von Kompilierzeiten von rund 15 Stunden zu lesen, die das kleine Kästchen bis zur Fertigstellung benötigt, während ein moderner PC in rund 5 Minuten die Aufgabe erledigt hat. Mit am einfachsten gelingt die Kompilierung unter Ubuntu, da hier im Gegensatz zu z.B. Debian Wheezy die benötigten Werkzeuge direkt in den Repositories zur Verfügung stehen und nach der Installation des Betriebssystems in einer virtuellen Maschine direkt losgelegt werden kann.
Diese Anleitung entstand mit Hilfe der am Ende des Artikels verlinkten Seiten ohne allmächtiges Hintergrundwissen und wurde anhand einer 64bit-Version von Ubuntu 14.04 LTS erstellt.
Aktualisierung des Betriebssystems
me@linuxbox:~$ sudo apt-get update
me@linuxbox:~$ sudo apt-get upgrade
Installation der für die Kompilierung notwendigen Pakete
me@linuxbox:~$ sudo apt-get install gcc-arm-linux-gnueabi make git-core ncurses-dev lib32z1 lib32ncurses5 lib32bz2-1.0 libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
Grundkonfiguration von Git
me@linuxbox:~$ mkdir rpi
me@linuxbox:~$ cd rpi
me@linuxbox:~/rpi$ git init
me@linuxbox:~/rpi$ git config --global user.email "ganztolleemailadresse"
me@linuxbox:~/rpi$ git config --global user.name "ganztollername"
Herunterladen der für die Kompilierung benötigten Quellen:
me@linuxbox:~/rpi$ git fetch git://github.com/raspberrypi/linux.git rpi-3.10.y:refs/remotes/origin/rpi-3.10.y
Da das eigentlich an dieser Stelle folgende “git checkout rpi-3.10.y” auf den Fehler “error: pathspec ‘rpi-3.10.y’ did not match any file(s) known to git.” läuft, wurden folgendes Kommandos er-google-t und verwendet:
me@linuxbox:~/rpi$ git show-ref
1b49b450222df26e4abf7abb6d9302f72b2ed386 refs/remotes/origin/rpi-3.10.y
me@linuxbox:~/rpi$ git checkout refs/remotes/origin/rpi-3.10.y
Zum Kompilieren kann auf eine Reihe von bereits fertigen Werkzeugen zugegriffen werden, die folgendes Kommando im Unterverzeichnis “tools” zur Verfügung stellt:
me@linuxbox:~/rpi$ cd ..
me@linuxbox:~$ git clone git://github.com/raspberrypi/tools.git
Umgebungsvariablen setzen
me@linuxbox:~$ export CCPREFIX=/home/me/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-
me@linuxbox:~$ export KERNEL_SRC=/home/me/rpi/
Wolfson-Treiber herunterladen und entpacken
me@linuxbox:~$ wget http://downloads.element14.com/wolfson/wolfson_drivers.tar.gz?COM=WolfsonAudioCard --output-document wolfson_drivers.tar.gz
me@linuxbox:~$ mkdir wolfson
me@linuxbox:~$ tar xvfz wolfson_drivers.tar.gz -C /home/me/wolfson
Kernel-Quellen für Wolfson-Treiber patchen
me@linuxbox:~$ cd rpi
me@linuxbox:~/rpi$ git reset --hard c43739885d512c92c0aa443b5895b96df5141da0
me@linuxbox:~/rpi$ git am -3 /home/me/wolfson/rpi_wlf_3.10_beta/*.patch
Konfigurationsdatei kopieren
me@linuxbox:~/rpi$ cp arch/arm/configs/rpi_wolfson_sound_pi_defconfig .config
Kernel erstellen
me@linuxbox:~/rpi$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} -j8
Temporäres Verzeichnis für die Module erstellen und Module kopieren
me@linuxbox:~/rpi$ mkdir /home/me/modules
me@linuxbox:~/rpi$ export MODULES_TEMP=/home/me/modules/
me@linuxbox:~/rpi$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=${MODULES_TEMP} modules_install -j8
Als letzter Schritt müssen nur noch die erzeugten Dateien auf den Raspberry Pi übertragen werden. Die im Ordner “$KERNEL_SRC/arch/arm/boot” befindliche Datei “Image” wird als “kernel.img” nach “/boot” kopiert, die Dateien den “Firmware”- bzw “Modules”-Unterverzeichnissen von “$MODULES_TEMP” nach “/lib/firmware” bzw. “/lib/modules”.
Quellen:
Ich habe gelesen, dass ccache (apt-get install ccache) die Compilezeiten erheblich beschleunigen soll. Hast Du damit Erfahrung?
/H.
danke für das Howto! Es hat mir sehr geholfen, einen Kernel für die DABPi+-Card (https://www.mikrocontroller.net/topic/342689) zu bauen. Ist ein DAB+-Empfängerplatine für den Raspberry, streamt den digitalen Sound über I2S und wird im System wie eine Soundcard eingebunden.
Viele Grüße!
/H.