Ich habe meinen Linux-Kernel (3.0.1) für meinen Raspberry Pi mit den folgenden Schritten erstellt:
1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot
Meine Frage ist, wie kann ich kernel.img erstellen? Ich denke, es enthält zImage + Ramdisk, aber wie kann ich das bauen?
Kann mich jemand anleiten, Ramdisk zu erstellen und diese beiden in die Datei kernel.img zu packen? Ich möchte diesen Kernel auf meinem Raspberry Pi booten.
cross-compilation
linux
kernel
arm
Shantanu Banerjee
quelle
quelle
kernel.org
Ort gefunden?Antworten:
kernel.img Datei
Bei Verwendung eines Linux-Kernels wird die
kernel.img
Datei lediglich umbenanntlinux/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 integrierteinitramfs
(Ramdisk) enthalten, ist aber nicht erforderlich. Beispielsweise enthält die Bestandsdateikernel.img
keineinitramfs
while- Dateienkernel_emergency.img
.Hinweis: Die offizielle Anleitung zum Kompilieren des Kernels im eLinux-Wiki empfiehlt , dass Sie ein
imagetool-uncompressed.py
Tool zum Vorbereiten derkernel.img
Datei verwenden. Es war in den frühen Tagen von RaspberyPi notwendig, aber heutzutage kann Bootloader regelmäßigImage
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. Auchversatil_config
ist es nicht gut für RaspberryPi, Sie solltenbcmrpi_defconfig
stattdessen verwenden (auf RaspberryPi-kompatiblen Kernel-Quellen gefunden) oderbcmrpi_emergency_defconfig
wenn Sie planen, Buildin zu verwendeninitramfs
.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 dieCROSS_COMPILE
Option in all Ihrenmake
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:
git
Dienstprogramm nicht installieren und können dies auch auf RapsberryPi selbst tun): Klicken Sie auf dasZIP
Symbol, das sich etwas unterhalb derCode
Registerkarte oben auf der Site befindet. Dadurch sollten Sie spätere Quelldateien alszip
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):Verwenden Sie die von Foundation bereitgestellte Standardkonfiguration:
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):Kompiliere den Kernel:
Kernel-Module kopieren nach
/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 inkernel_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 dieCONFIG_INITRAMFS_SOURCE
Konfigurationsoption für das heruntergeladene Verzeichnis im Kernel verwiesen werden .Schlussnoten
Also sollten Sie dies in 3 Schritten tun:
initramfs
Datei zu erstellen und zu booten .initramfs
, Ihrem Kernel fertige Inhalte hinzuzufügen .initramfs
Inhalt entsprechend Ihren Anforderungen.quelle
zip
.git
Überträgt die Dateien effizient und Sie könnendepth=1
damit das Herunterladen des Verlaufs verhindern (glaube ich).Wenn Sie auf beiden die gleiche Debian-Version verwenden, können X-Apt, dpkg-cross usw. und die Emdebian-Tools sehr gut funktionieren.
Quelle: Wird zur Entwicklung von c ++ - Apps für eingebettete ARM-Systeme verwendet, auf denen Emdebian ausgeführt wird.
quelle