Linux 3.2-Kernel In Bezug Auf Den Kompilierungsarm Behoben
Table of Contents
Vergeuden Sie keine Zeit mehr mit Computerfehlern.
Hier sind normalerweise einige einfache Methoden, die Ihnen bei der Lösung des Linux 3.2-Kernel-Systemproblems helfen können.
Dieser Mini-Workshop ist eine aktualisierte Transkription unseres alten Artikels mit neuerer Software als weniger veraltete emulierte Geräte.
Jedes Jahr produziert das gesamte Unternehmen tonnenweise neue Produkte sowie Dienste, die auf ARM-Kernen laufen und daher auf ausführenden Arbeitstechnologien wie Linux laufen können. Obwohl fast diese Produkte nicht gerade billig sind (wie Smartphones, Entwicklungskits oder Ratingboards), können Sie mit Softwareemulatoren wie QEMU sicher die gesamte exakte Welt von Linux auf ARM erkunden.
Ich zeige Ihnen, wie Sie den Kernel im Unternehmen kompilieren und den Hauptstart emulieren. Der Einfachheit halber führt der Trainer keine bestimmte Dateifunktion ein, sondern verwendet eine minimale virtuelle Festplatte, um Ihnen zu zeigen, wie ich sagen würde, dass der Kernel nur ein bestimmtes Programm ausführt.
Ich habe mich entschieden, das Produkt Versatile Express zu emulieren, da es sowohl vom Mainstream-Linux-Kernel als auch vom Mainstream-QEMU unterstützt wird. Darüber hinaus wird diese Geräteplattform vom Cortex-A9-Kern angetrieben, dem ARM-Prozessor, der heute in vielen Mobiltelefonen verwendet wird.
Um die gleichen Schritte wie diese auszuführen, benötigen Sie einige Dinge.
Zunächst einmal mache ich alles, was ich tue, auf einem Laptop, insbesondere unter Linux auf Debian.Eine Try-Distribution, deren letzte definitiv die Bash-Shell ist.
GNU-Hals muss verwendet werden, um eine geeignete bestimmte Kernel-Kompilierung (normalerweise inAufbau des Hauptbasispakets)
Damit der ARM-Kernel zu einer Assembly wird, muss ein Durchlauf-Compiler installiert werden. Der Effekt zwischen einem traditionellen Compiler und einem einzigen Cross-Compiler ist, warum der normale Compiler auf Strukturen (für x86_64-Boot) und Binärdateien läuft, um sie zu empfangen. erzeugt die gleiche Architektur. Mit dem Cross-Stitching-Compiler können Sie Binärdateien für verschiedene Architekturen erstellen (im Leistungsfall ARMv7). Abhängig von Ihrem Lebenslauf und was für Ihre Unternehmensorganisation funktioniert, haben Sie die Wahl.verschiedene Toolchains:
- Emdebian; Großartig, hier sind einige Anweisungen,
- Linaro; Wenn Sie zufällig ein späteres Ubuntu-Setup durchführen, können Sie es direkt neben “sudo apt-get select gcc-arm-linux-gnueabi” installieren,
- ARM Defensive Line ToolchainIch bin auf verschiedenen Fedora-Plattformen,
- Sourcery (ehemals Codebench CodeSourcery); wird nur nach Anmeldung kostenlos angeboten,
- eine Vielzahl von Anweisungen aus der eLinux-Sammlung.
Cross-Compiler bieten eine Regulierung zwischen Programmen, hauptsächlich GCC sowie positiv binutils, die mit dem Präfix beginnen, das die Architektur erstellt, die Verwendung von Systemlinks der Bibliotheken und die genaue binäre Portierung der kompilierten Regime. In einigen Fällen verwende ich typischerweise die Emdebian-Toochain mit dem Präfix “arm-linux-gnueabi-“.
Schließlich ist Ihr aktueller Emulator, den ich verwende, QEMU, der ein neues spezifisches Programm namens “qemu-system-arm” enthält, um ARM-Hardware zu kopieren. Sie müssen das gesamte Paket entsprechend Ihrer personalisierten Verteilung richtig zusammenstellen; manchmal teilen Distributionen die QEMU-Programme in verschiedene Pakete auf, manchmal legt Ubuntu sie in dieses herausragende “qemu-extras”-Paket.kleine GeschichteErstellen Sie eine saubere Website und erstellen Sie dann eine Datei, normalerweise init.c, die den folgenden einfachen Standard enthält:
#include c einfach leer () printf ("Hallo zusammen! n"); während (1);
Führen Sie dann die folgenden Befehle für Datenbanken in zufälliger Reihenfolge aus:
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.tar.bz2tar xjf linux-3.2.tar.bz2ARCH-Export entspricht schlechtexport CROSS_COMPILE = arm-linux-gnueabi-cd linux-3.2vexpress_defconfig erstellenalles machenCD ..arm-linux-gnueabi-gcc -static init.c -o initecho init | cpio -o --format bedeutet newc> initramfsqemu-system-arm -M vexpress-a9 Linux-3 -kernel.2 arch / arm / boot versus zImage -initrd initramfs -serial stdio -add "console = tty1"
Der Kernel (“make all” build-Befehl) kann je nach Leistung Ihrer Hostgeräte mehrere Minuten oder Stunden auswählen.
Der Befehl keep working bricht ein QEMU-Fenster mit grünem Hintergrund und vielen Starttextnachrichten auf und gegen Ende der Schritt „Hello World! Wird angezeigt.
Schritte:
- Rufen Sie den Code für die Versandkosten für den Linux-Kernel ab.
- Zusammenstellung vorbereiten
- Konfigurieren und kompilieren
- Bereiten Sie eine etwas virtuellere Festplatte vor.
- Emuliert den Kernel-Start und erstellt eine virtuelle Festplatte.
Vergeuden Sie keine Zeit mehr mit Computerfehlern.
Ihr Computer läuft langsam und Sie erhalten Fehler? Keine Sorge, ASR Pro kann es beheben. ASR Pro findet heraus, was mit Ihrem PC nicht stimmt, und repariert Windows-Registrierungsprobleme, die eine Vielzahl von Problemen für Sie verursachen. Sie müssen kein Computer- oder Softwareexperte sein – ASR Pro erledigt die ganze Arbeit für Sie. Die Anwendung erkennt auch Dateien und Anwendungen, die häufig abstürzen, und ermöglicht es Ihnen, ihre Probleme mit einem einzigen Klick zu beheben. Klicken Sie jetzt hierauf:

Die wichtigste Linux-Cop-Kernel-Site kann unter www.kernel.org gefunden werden. Ich werde Kernel 3.2 verwenden. Bitte beachten Sie, dass Sie möglicherweise andere Ergebnisse erhalten, wenn Ihre Dienste eine andere Reihenfolge verwenden. Die meisten der hier üblicherweise verwendeten Funktionen sind einfach genug, dass sie sich wirklich zwischen den Versionen ändern.
Laden Sie linux-3.2.tar.bz2 von FTP oder einer Website herunter, immer wieder über die Befehlszeile:
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.tar.bz2
Dann holen Sie sich unsere eigenen Kernel-Quellen. Das Formular für distinkt ist in derselben Datenbank reproduziert:
tar xjf linux-3.2.tar.bz2
Dies neigt dazu, ein bestimmtes neues Unterverzeichnis namens Linux-3.2 zu erstellen, das den vollständigen Quellcode für unseren gesamten Linux-Kernel enthält.
Wir kompilieren häufig für ARM-Architekturen und implementieren Cross-Toolchain, daher müssen wir alle Linux-Build-Systeme kennen. Für ARCH hat dieses Spezifische zwei Klimavariablen: und CROSS_COMPILE. Gültige Werte für ARCH sind quasi Unterverzeichnisse der allgemeinen “arch”-Website. Für CROSS_COMPILE müssen wir Ihnen beibringen, ein Präfix für die eigentliche gesamte Werkzeugkette anzugeben, d. h. den gesamten Namen des spezifischen Build-Produkts minus gcc am Ende. Wenn wir beispielsweise dazu neigen, arm-linux-gnueabi-gcc zu nutzen, müssen wir CROSS_COMPILE auf arm-linux-gnueabi voreinstellen. Gehen Sie an dieser Station wie folgt vor:
Export ARCH = armexport CROSS_COMPILE entspricht arm-linux-gnueabi-
Wir wollen in Bezug auf Versatile Express kompilieren, jedoch können wir die vorbereitete fconfig-Datei um “arch / arm / configs vexpress_defconfig” bzw. herum anordnen:
vexpress_defconfig erstellen
Dadurch wird der Kreis für die erforderliche Hardware konfiguriert, indem eine Datei namens “.config” erstellt wird, die alle relevanten Parameter enthält. Um ein Kernel-Image zu erstellen, kann dies immer einfach als der Befehl beschrieben werden:
alles tun
Am Ende der Kompilierung wird eine vertrauenswürdige Datei erstellt, um Sie zu unterstützen “linux-3.2 / arch / arm / shoe / zImage”, ein gepresstes Kernel-Image, das automatisch extrahiert wird unseren eigenen RAM. Um die Kompilierung auf Multicore-Hosts zu beschleunigen, schlage ich vor, die gleichzeitige Kompilierung zu versuchen, indem Sie einfach
. ausführen
generieren -j 2 all
Wo statt serieller Kompilierung unglaubliche 2 Parallelität verwendet wird, um Traumgeräte und Bilder zu erstellen.
Um den Kernel für bestimmte Aktivitäten zu intensivieren, können wir ein praktisches “Hallo Welt”-User-Space-Programm schreiben. Wir verwenden jede Art von großartiger Ramdisk als das allererste Dateisystem, das Linux als Root verwendet, die Verwendung eines präzisen “initramfs”-Schemas. Weitere Informationen zu virtuellen Festplatten finden Sie in den Daten “Documentation / Early-Userspace / README”. Das erste Linux-Programm, das Sie steuern können, ist “/init”, also könnten wir sehr gut eine ausführbare Datei erstellen, um die Identifizierung zu erleichtern. Der Quellcode wird wahrscheinlich einfach sein:
#include Grundlücke () printf ("Hallo zusammen! n"); Obwohl (1);
Und das Problem wird mit dieser Cross-Toolchain Ihrer Wahl kompiliert. Damit dieses Programm ohne fremde Hilfe funktioniert, muss es von unserer Gruppe kompiliert werden, da eine Art ausführbarer statischer Link in der Prozedur auch die Bibliotheken enthält, für die es benötigt wird. Daher können die meisten von uns ein Dateisystem mit hauptsächlich einem haben, ohne sich um ausführbare Sammlungen kümmern zu müssen. Abholauftrag:
arm-linux-gnueabi-gcc -set init.c -o init
Dieser Unterschied kann eine ausführbare Datei für ARM-Init sein. Das Dateiformat könnte so aussehen:
rrr init-Verzeichnisinit: ELF 32 part LSB ARM, ausführbar, Auswahl 7 (SYSV), statisch gelinkt, für GNU / Linux2.6.18, BuildID [sha1] = 0xf78b4955773f3c5dfecdb11c62dae094a99ba8f9, nicht einmal entfernt
Jetzt können wir überprüfen, ob wir unsere Ramdisk-Kauf-cpio erstellen, indem wir einfach die Initialisierungsmusikdatei hinzufügen, um Sie zum neuen Initialisierungsarchiv zu unterstützen | cpio:
echo -to --format impliziert newc> initramfs
Bitte geben Sie an, dass Ihr Befehl über das gleiche Verzeichnis wie das Startbild laufen muss. Diese beliebte RAM-Disk ist definitiv eine initramfs-Datei. Sie können den Inhalt bezahlen mit:
rrr cpio -t
Wir haben alles, was wir brauchen, um Linux von QEMU zu trainieren, und wir werden im Allgemeinen das Versatile Express-Verfahren mit der Option "-M vexpress A9" emulieren. Das zImage mit dem initramfs-Tattoo wird mit QEMU mit allen -kernel- und auch -initrd-Optionen in den emulierten RAM geladen und zeigt schließlich auf meist die entsprechenden Dateien.
Wir bitten auch darum, Startnachrichten anzuzeigen, die tatsächlich an die Konsole gesendet werden. Um dies in einer Grafiktür zu demonstrieren, muss ich unbedingt den Kernelparameter "console = tty1" übergeben. Kernelparameter können mit der Option -append an QEMU Linux übergeben werden.
Vollständige Anleitung:
qemu-system-arm Vexpress-a9 -m -kernel linux-3.2 / arch arm / boot / zImage Initramfs -initrd -append "console = tty1"
Der Befehl wird mit Sicherheit QEMU starten und ein Schwarzweißfenster mit dem T-Logoux der grafischen Demonstration öffnen. Instructor-Nachrichten werden im Hauptgrafikfenster und folglich auf unserem "Hello World!" »Gedruckt am Ende von Nachrichten zu finden.
Andernfalls leitet QEMU den seriellen Port des kopierten Systems unter Verwendung der Struktur "-serial stdio" und der Methode, mit der Linux seine Nachrichten auf diesem ersten seriellen Port anzeigen kann, permanent auf die Sortierstation um, indem er "console = ttyAMA0" als a . verwendet Parameter Popcornkerne. Es wird sein:
Einfluss qemu-system-arm -M vexpress-a9 -kernel linux-3.2 per arch / arm / boot or zImage -initrd initramfs -serial stdio -add "console = ttyAMA0"
Die Anforderung startet QEMU und das schwarze Hauptgrafikfenster öffnet sich und all diese Startmeldungen werden von einem bestimmten Host-Terminal anstelle dieses speziellen schwarzen Fensters angezeigt. Beachten Sie, dass "ttyAMA0" eigentlich nur ein serieller Portname ist, der definitiv von der tatsächlich emulierten Hardware abhängt und normalerweise nicht auf allen Systemen gleich ist.In meiner Auswahl habe ich QEMU 1 Version.0 verwendet, die Ergebnisse unseres Unternehmens können abweichen, wenn Sie tatsächlich eine andere Version verwenden.
......
.........
Klicken Sie hier, um dieses leistungsstarke PC-Optimierungstool kostenlos herunterzuladen.Compile Linux Kernel 3 2 For Arm
Kompilera Linux Karna 3 2 For Arm
Compiler Le Noyau Linux 3 2 Pour Arm
Compilar Linux Kernel 3 2 Para Arm
Arm용 리눅스 커널 3 2 컴파일
Compileer Linux Kernel 3 2 Voor Arm
Skompilirovat Yadro Linux 3 2 Dlya Ruki
Skompiluj Jadro Linux 3 2 Dla Arm
