Homepage Wiki Forum Buy

Kernel kompilieren + Module installieren

Aus GNUBLIN

Schwierigkeitsgrad Voraussetzung Gnublin Familie
Gnublin logo advanced.png 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!

In anderen Sprachen