kernel.img Datei
Bei Verwendung eines Linux-Kernels wird die kernel.img
Datei lediglich umbenannt linux/arch/arm/boot/Image
. Es sollte auch möglich sein (oder es war zumindest möglich, als ich das letzte Mal nachgesehen habe), eine komprimierte Version dieser Datei zu verwenden - zImage
. Es kann integrierte initramfs
(Ramdisk) enthalten, ist aber nicht erforderlich. Beispielsweise enthält die Bestandsdatei kernel.img
keine initramfs
while- Dateien kernel_emergency.img
.
Hinweis: Die offizielle Anleitung zum Kompilieren des Kernels im eLinux-Wiki empfiehlt , dass Sie ein imagetool-uncompressed.py
Tool zum Vorbereiten der kernel.img
Datei verwenden. Es war in den frühen Tagen von RaspberyPi notwendig, aber heutzutage kann Bootloader regelmäßig Image
und problemlos arbeitenzImage
Dateien Dateien .
Kernelquellenproblem
Was sehr wichtig ist, ist, dass Sie beim Erstellen des Kernels für RaspberryPi nicht einfach eine beliebige Version davon verwenden können. Es funktioniert nur eine spezielle Version, die auf RaspberryPi portiert ist. Leider ist die aktuelle Upstream-Version (vor kernel.org
Ort gefunden) nicht mit RaspberryPi kompatibel. Auch versatil_config
ist es nicht gut für RaspberryPi, Sie sollten bcmrpi_defconfig
stattdessen verwenden (auf RaspberryPi-kompatiblen Kernel-Quellen gefunden) oder bcmrpi_emergency_defconfig
wenn Sie planen, Buildin zu verwenden initramfs
.
Kernel-Bauanleitung
Der beste Ort, um Kernel-Quellen für RaspberryPi zu finden, ist auf Foundation Github . Im offiziellen RasbperryPi-Wiki finden Sie auch einige nützliche Erklärungen zum Abrufen und Kompilieren . Hier ist meine kleine vereinfachte Version der beteiligten Schritte (ANMERKUNG: Ich gehe davon aus, dass Sie den Kernel crosscompilieren möchten. Er ist viel schneller und sollte die gleichen Ergebnisse erzielen, aber es ist auch möglich, den Kernel nativ auf RaspberryPi zu erstellen):
Laden Sie die offizielle Toolchain herunter und erstellen Sie Ihre eigenen. Ich gehe davon aus, dass es installiert ist /usr/bin/arm-linux-gnueabi-*
. Wenn Sie es an einem anderen Ort haben, sollten Sie die CROSS_COMPILE
Option in all Ihren make
Befehlen ändern .
Zum https://github.com/raspberrypi/linux Seite , wo Sie offizielle RapsberryPi Kernel - Quellen finden können. Sie können den Code auf zwei Arten herunterladen:
- Als komprimierte Datei (um diese Option zu verwenden, müssen Sie das
git
Dienstprogramm nicht installieren und können dies auch auf RapsberryPi selbst tun): Klicken Sie auf das ZIP
Symbol, das sich etwas unterhalb der Code
Registerkarte oben auf der Site befindet. Dadurch sollten Sie spätere Quelldateien als zip
Datei herunterladen können . Du könntest stattdessen git verwenden, aber das (wie im Wiki beschrieben) wird viel mehr Platz und Zeit benötigen. Dekomprimieren Sie dann die Datei, um den Quelltextbaum abzurufen.
Verwenden des git
Dienstprogramms (dies funktionierte bei RaspberryPi nicht, da es wahrscheinlich nur wenig RAM gibt, sollte aber auf Desktop-Systemen funktionieren. (Beachten Sie das --depth 1
Argument, das verhindert, dass Git den gesamten Verlauf der Entwicklung herunterlädt (was riesig ist):
git clone --depth 1 git://github.com/raspberrypi/linux.git
Verwenden Sie die von Foundation bereitgestellte Standardkonfiguration:
cp arch/arm/configs/bcmrpi_defconfig .config
Führen Sie make oldconfig
einige Fragen aus und beantworten Sie sie (es sollte in Ordnung sein, in jeder Frage die Eingabetaste zu drücken und die Standardantwort zu belassen):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
Kompiliere den Kernel:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
Kernel-Module kopieren nach /tmp/modules
:
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
Verwenden Sie Image
Datei alskernel.img
Laden Sie alle Module von /tmp/modules/lib/modules/
Ihrem Computer in das /lib/modules/
Verzeichnis auf Ihrem RaspberryPi-Rootfs hoch.
Initramfs hinzufügen
Dies enthält jedoch keine Anweisungen zum Erstellen initramfs
. Da es sich um ein sehr umfassendes Thema handelt (im Grunde muss eine funktionierende Linux-Benutzerumgebung erstellt werden, und es gibt wirklich keine Beschränkung, wie kompliziert dies sein kann), werde ich hier nicht weiter darauf eingehen. Ich werde nur bemerken, initramfs
dass es in zwei verschiedenen Formen verwendet werden kann - als Standalone-Form, bei der es sich um eine separate Datei handelt, und als Build-Form, bei der es in die Kernel-Image-Datei integriert ist (wie in kernel_emergency.img
). Die zweite Option sollte vom RaspberryPi-Bootloader unterstützt werden, aber es gibt einige Gerüchte dass sie bei der aktuellen Firmware-Version kaputt ist, daher sollten Sie wahrscheinlich die eingebaute Version verwenden.
Der beste Weg, um zu beginnen, ist, initramfs-Inhalt (der für kernel_emergency.img verwendet wird) zu verwenden, indem Sie ihn aus einem anderen Foundation- Github-Repository herunterladen. iniramfs
Versuchen Sie dann, Ihren eigenen Kernel zu erstellen, nachdem Sie ihn mit diesem Image booten können . Dazu muss lediglich auf die CONFIG_INITRAMFS_SOURCE
Konfigurationsoption für das heruntergeladene Verzeichnis im Kernel verwiesen werden .
Schlussnoten
Also sollten Sie dies in 3 Schritten tun:
- Versuchen Sie, einen Kernel ohne
initramfs
Datei zu erstellen und zu booten .
- Versuchen Sie
initramfs
, Ihrem Kernel fertige Inhalte hinzuzufügen .
- Ändern Sie diesen
initramfs
Inhalt entsprechend Ihren Anforderungen.