Kernel kompilieren + Module installieren
Aus GNUBLIN
| Schwierigkeitsgrad | Voraussetzung | Gnublin Familie |
| Toolchain installieren | Alle |
Inhaltsverzeichnis |
Der Kernel
In diesem Artikel wird beschrieben wie man sich den Kernel (2.6.33) für das Gnublin Board kompiliert.
Für Anfänger
Mit der GNUBLIN Distribution
Mithilfe der GNUBLIN Distribution wird die nötige Toolchain für die ARM Architektur gleich automatisch mit installiert. Zudem ist bei der GNUBLIN Distribution gleich der Community Kernel mit integriert, der einiges an Hardware unterstützt und ständig für GNUBLIN weiterentwickelt wird.
Zuerst installiert man die Distribution wie hier beschrieben.
Man kann während dem Installationsprozess Module hinzufügen, oder Konfigurationen vornehmen.
Wenn man die Installation der GNUBLIN Distribution zu einem früheren Zeitpunkt bereits abgeschlossen hat, und nachträglich noch Änderungen am Kernel vornehmen will, so muss man die versteckte Datei .stamp_kernel aus dem Verzeichnis gnublin/lpc3131 löschen und das build_GNUBLIN_support_package script erneut starten. Anschließend muss man das zImage und die Module manuell auf die SD-Karte kopieren.
Für Fortgeschrittene
Ohne Gnublin Distribution
Vorbereitungen
Bevor man den Kernel konfiguriert, muss sichergestellt werden, das die zu verwendende Toolchain im Pfad enthalten ist. Zusätzlich sind drei Umgebungsvariablen zu definert, welche von der Toolchain verwendet werden.
Dies geschieht über das sourcen der Datei set.sh.
P1=/opt/eldk-5.2.1/armv5te/sysroots/i686-eldk-linux/usr/bin/armv5te-linux-gnueabi/ P2=/opt/eldk-5.2.1/armv5te/sysroots/i686-eldk-linux/bin/armv5te-linux-gnueabi/ export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- export PATH=$P1:$P2:$PATH
Man muss einfach eine Datei set.sh erstellen und den Text oben einfügen. Anschließend die Datei sourcen:
- . ./set.sh
(Punkt Leerzeichen Punkt/set.sh)
ACHTUNG: Das Sourcen der Datei ist nur gültig in dem Terminal, in welchem es gesourced wird. Wenn man das Terminal schließt muss man die Datei erneut sourcen. Also muss man das Skript auch jedes mal neu sourcen, wenn man den PC neu startet!
Kernel downloaden
- git clone https://github.com/embeddedprojects/gnublin-lpc3131-2.6.33.git
- cd gnublin-lpc3131-2.6.33/linux-2.6.33-lpc313x
Kernel konfigurieren
Nach der Vorbereitung kann man den Kernel über folgenden Befehl konfigurieren:
- make gnublin_defconfig
bzw. für die alte 8MB Version
- make elektor_defconfig
und dann
- make menuconfig
Der erste Befehl sorgt lediglich dafür dass die Gnublin-default-config verwendet wird (Kernel 2.6.33), in der bereits alle wichtigen Module aktiviert wurden. Dieser Befehl muss nur einmal ausgeführt werden, ausser man updated den Kernel mit git pull, dann muss der Befehl wieder ausgeführt werden.
Der zweite Befehl startet die grafische Menuconfig Oberfläche. Zum hinzufügen von Modulen kann die grafische Oberfläche genutzt werden. Die Suche erfolgt mit "/".
Die Module können auf zwei Weisen eingebunden werden: entweder statisch mit "Y" oder dynamisch mit "M". Statisch eingebundene Module sind fest im Kernel integriert und müssen nicht zur Laufzeig nachgeladen werden. Dynamisch eingebunden Module müssen zur Laufzeit mit
- modprobe
oder
- insmod
nachgeladen werden. Da "modprobe" auch abhängige Kernelmodule nachlädt, sollte, um Komplikationen zu vermeiden, "modprobe" verwendet werden.
Kernel kompilieren
Mit nur einem Befehl wird der Kernel als zImage kompiliert:
- make zImage
Das erstellte Image liegt nun im Ordner
- ls arch/arm/boot
Module kompilieren
Natürlich müssen für jeden Kernel auch die passenden Module mit auf das Filesystem übertragen werden. Einfach die Module kompilieren, installieren und anschließend aufs rootfs kopieren.
- make modules
- make modules_install
oder
- make modules_install INSTALL_MOD_PATH=/tmp/
- sudo cp -r /tmp/lib /media/Gnublin
Der Aufruf "make modules_install" verwendet den in der Umgebungsvariable INSTALL_MOD_PATH definierten Pfad (definiert in set.sh, siehe oben) als Ziel für die Module.
- make modules_install
Übertragen der Daten auf die SD-Karte
Um die Module und den Kernel auf der SD-Karte zu aktualisieren muss das "zImage" und der Ordner "/lib/" ersetzt werden.
Die folgenden Befehle müssen im Kernelverzeichnis ausgeführt werden. /media/Label_der_SD_Karte ist der mount point der SD-Karte und muss entsprechend angepasst werden.
Übertragen des zImage
- sudo cp arch/arm/boot/zImage /media/Kernel
Übertragen des lib Ordners
- sudo cp -r ${INSTALL_MOD_PATh}/lib /media/Gnublin
kernel.tar.gz für gnublin-installer erstellen
Um den selbst erstellten Kernel mit dem gnublin-installer auf die SD-Karte zu bekommen, muss der Kernel und der Ordner /lib zu einem Archiv gepackt werden.
Dazu zuerst wie oben erklährt die Dateien kompilieren:
- make zImage
- make modules
erstellen einen Ornder, in den die Dateien hinein kommen und kopieren sie:
- mkdir kernel_archiv
- make modules_install INSTALL_MOD_PATH=kernel_archiv
- cp arch/arm/boot/zImage kernel_archiv
anschließend muss nur noch das Archiv erstellt werden:
- cd kernel_archiv
- tar cfvz kernel.tar.gz zImage lib/
Das Ergebnis (kernel.tar.gz) kann nun mit dem gnublin-installer auf die SD-Karte übertragen werden.
Backport Kernel
Ein Backport Kernel ist ein Variante, in der zwischen altem 2.6 Kernel und Treibern der 3.x Kernel, eine Zwischenschicht in Form von einer Bibliothek von Kernelmodulen liegt und damit den Betrieb von neuer Hardware mit den 2.6 Kernel ermöglicht. http://backports.wiki.kernel.org stellt hierzu die compat-drivers für die Subsysteme Ethernet, Wireless, Bluetooth zur Verfügung. Wie das im Einzelnen funktioniert, ist im Artikel Backport Kernel für ein Buildroot Gnublin zu erfahren.
Gute Nachricht, die Compat-Wireless-Treiber funktionieren auch mit der Debian-Distro Gleiches Prinzip, wie im Backport Kernel Artikel!
