Für preisgünstiges Board Terasic DE10 nano mit integriertem FPGA mit ARM-CPU Ich werde darüber schreiben, wie man den Linux-Kernel erstellt und aktualisiert.
Mehrere Linux-SD-Karten-Images für dieses Board wurden auf die Terasic-Site hochgeladen. Wenn Sie sich als Benutzer registrieren, können Sie Linux sofort herunterladen und starten. Wenn Sie beim Spielen mit diesem Board versuchen, einen Kerneltreiber hinzuzufügen oder FPGA mit Device Tree Overlay zu konfigurieren, sollten Sie den Kernel selbst erstellen.
Wenn Sie es gewohnt sind, eingebettetes Linux zu erstellen, sollten diese Informationen ausreichen.
make socfpga_defconfig; make zImage; make dtbs
make modules; make modules_install ...
――Wo werden die erstellten Binärdateien auf die SD-Karte geschrieben?
--zImage, socfpga_cyclone5_de0_sockit.dtb-> Durch die entsprechende Datei in Fat Partition ersetzen
--lib / modules / * Directory-> In Linux Partition unter "/" kopierenDer Inhalt der SD-Karte, die für den Betrieb von Linux erforderlich ist, kann in zwei Typen unterteilt werden: Kernel-bezogenes und Root-Dateisystem. Hier werden nur Kernel-bezogene Dateien erstellt, und die Dateien des Root-Dateisystems werden unverändert verwendet.
Informationen zu Intel SoC-FPGAs finden Sie in der Dokumentation auf der Linux-Portal-Website RocketBoards.org. https://rocketboards.org/foswiki/Documentation/GSRDCompilingLinux Sie führen den Teil "Linux-Kernel erstellen" von "5. Kernel und U-Boot getrennt von Git-Bäumen erstellen" in aus.
Laden Sie zunächst den Cross-Compiler herunter und bereiten Sie die für die Kernel-Erstellung erforderlichen Befehle vor. Wenn der Entwicklungs-PC beispielsweise Ubuntu 18.04 (64 Bit) im ursprünglichen Zustand ist, sind mindestens die folgenden Pakete erforderlich.
$ sudo apt update
$ sudo apt install -y wget git build-essential bc kmod libncursesw5-dev
$ sudo apt install -y lib32stdc++6 lib32ncurses5 lib32z1
Laden Sie den Cross-Compiler herunter und legen Sie die Umgebungsvariable CROSS_COMPILE fest. Ich arbeite hier unter dem Home-Verzeichnis, aber Sie können in ein beliebiges Verzeichnis gehen (in diesem Fall ändern Sie den in CROSS_COMPILE festgelegten PATH entsprechend).
$ cd ~
$ wget https://releases.linaro.org/archive/14.04/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.bz2 --no-check-certificate
$ tar xjf gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.bz2
$ export CROSS_COMPILE=~/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin/arm-linux-gnueabihf-
Klonen Sie die Kernelquelle aus dem Git-Repository. Dann überprüfen Sie Ihren bevorzugten Zweig oder Tag. Das Beispiel überprüft den Zweig socfpga-4.14.130-ltsi. Wieder beginne ich mit der Arbeit in meinem Home-Verzeichnis, aber mache es, wo immer du willst. Sie können die "test_branch" nach -b in einen beliebigen Namen ändern.
$ cd ~
$ git clone https://github.com/altera-opensource/linux-socfpga
$ cd linux-socfpga
$ git checkout -b test_branch origin/socfpga-4.14.130-ltsi
Erstellen Sie schließlich den endgültigen Zielkernelkörper, zImage und den Gerätebaum. (Angenommen, der Export CROSS_COMPILE = ... ist bereits festgelegt.)
$ export ARCH=arm
$ make socfpga_defconfig
$ make zImage
$ make socfpga_cyclone5_de0_sockit.dtb
Das obige generiert zImage unter arch / arm / boot / und socfpga_cyclone5_de0_sockit.dtb unter arch / arm / boot / dts /. Socfpga_cyclone5_de0_sockit.dtb ist übrigens eine Gerätebaumdatei für DE10 nano. Ersetzen Sie diese durch die zImage, .dtb-Dateien in der FAT-Partition Ihrer SD-Karte.
Zunächst müssen Sie den Partitionsinhalt der neu zu schreibenden SD-Karte überprüfen (eine Karte, die DE10nano unter Linux booten kann). Legen Sie die SD-Karte in den Entwicklungs-PC ein und zeigen Sie die Partitionsinformationen an. Wenn der Name des SD-Kartengeräts auf Ihrem PC / dev / mmcblk0 lautet Der Befehl lautet "sudo fdisk -l / dev / mmcblk0".
$ sudo fdisk -l /dev/mmcblk0
...Abkürzung...
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 2048 206848 204801 100M b W95 FAT32
/dev/mmcblk0p2 227331 7395332 7168002 3.4G 83 Linux
/dev/mmcblk0p3 206849 227330 20482 10M a2 unknown
Anhand dieser Informationen können Sie erkennen, dass die FAT-Partition Partition1 (/ dev / mmcblk0p1) und die Linux-Partition Partition2 (/ dev / mmcblk0p2) ist.
Schreiben Sie zImage und .dtb in Partition1 (/ dev / mmcblk0p1) der FAT-Partition mit Ihrer eigenen neu. Zum Beispiel auf der Terasic-Site DE10-Nano Kit-Ressourcenseite Wenn Sie das MicroSD-Kartenabbild von "Linux LXDE Desktop (Kernel 4.5)" verwenden, heißt die entsprechende Datei in der FAT-Partition zImage, soc_system.dtb. Ersetzen Sie sie daher.
$ sudo mount /dev/mmcblk0p1 /mnt
$ cp /mnt/zImage /mnt/zImage.org
$ cp /mnt/soc_system.dtb /mnt/soc_system.dtb.org
$ cp arch/arm/boot/zImage /mnt
$ cp arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dtb /mnt/soc_system.dtb
$ sudo umount /mnt
(Angenommen, der Gerätename der SD-Karte lautet / dev / mmcblk0 und das leere Verzeichnis / mnt ist bereits vorhanden.)
Die Kernel-Parameter werden sofort mit dem oben genannten make socfpga_defconfig
festgelegt, aber die hier festgelegten haben auch ein Einstellungsmodul [M], das nicht in zImage enthalten ist und als Modul auf eine separate Datei (.ko) festgelegt ist. Es gibt einige. Da es sich auch um Kernel-bezogene Dateien handelt, schreiben Sie sie an den angegebenen Speicherort auf der SD-Karte. Dies ist auch erforderlich, wenn Sie das im Kernel-Parameter als [M] ausgewählte Modul verwenden möchten (obwohl ich glaube, dass dies in dem Bereich, in dem Sie normalerweise DE10 nano verwenden, nicht erforderlich ist).
$ make modules
$ mkdir /tmp/kmod
$ make modules_install INSTALL_MOD_PATH=/tmp/kmod
$ cd /tmp/kmod
$ tar cvzf /tmp/mod.tgz *
$ sudo mount /dev/mmcblk0p2 /mnt
$ sudo tar xf /tmp/mod.tgz -C /mnt
$ sudo umount /mnt
$ rm -rf /tmp/mod.tgz /tmp/kmod
(Dies ist ein Beispiel, wenn der Gerätename der SD-Karte / dev / mmcblk0 und die Linux-Partition der SD-Karte / dev / mmcblk0p2 lautet.) (In diesem Beispiel ist / tmp / kmod / lib / modules / \ * / build, / tmp / kmod / lib / modules / \ * / source eine symbolische Verknüpfung zum Kernel Source-Verzeichnis auf Ihrem Entwicklungs-PC. In diesem Fall kopieren Sie es in eine andere Umgebung mit. Ich denke, es ist in Ordnung, diese und dann tar cvzf zu löschen. Da es sich um eine symbolische Verknüpfung handelt, die erforderlich ist, wenn das Modul in Zukunft in der ARM-seitigen Umgebung erstellt wird. )
Das von Terasic bereitgestellte SD-Karten-Image verfügt über ein Image, mit dem Sie die grafische Benutzeroberfläche des HDMI-Monitors verwenden können (z. B. das obige Image "Linux LXDE Desktop"). Wenn Sie es jedoch in den im obigen Verfahren erstellten Kernel umschreiben, Es gibt keinen Monitorausgang. Der Treiber für die Monitorausgabe (Frame Buffer Driver) ist nicht in der Standardeinstellung socfpga_defconfig enthalten. Um die Monitorausgabe zu aktivieren, muss ein Kernel erstellt werden, der einen Bildpuffertreiber enthält. Zwischen make socfpga_defconfig
und make zImage
, die oben erwähnt wurden
$ make menuconfig
Bitte führen Sie die. Dadurch wird die GUI gestartet. Um Kernel-Parameter einzustellen, nutzen Sie die Cursortasten und die Eingabetaste vollständig. Gehen Sie zur Zeile "Gerätetreiber-> Grafikunterstützung-> Bildpuffergeräte-> Rahmenpufferunterstützung für Altera VIP-Rahmenleser" und markieren Sie sie als <*> (mit der Leertaste). Wählen Sie im unteren Menü Speichern und speichern Sie zum Beenden in .config. Anschließend müssen Sie eine Gerätebaumdatei hinzufügen, um den gerade aktivierten Frame-Puffer zu starten. Kopieren Sie socfpga_cyclone5_de0_sockit.dts als socfpga_cyclone5_de10nano_FB.dts und ändern Sie socffpga_cyclone5_de10nano_FB.dts mit Ihrem bevorzugten Editor.
$ cd arch/arm/boot/dts
$ cp socfpga_cyclone5_de0_sockit.dts socfpga_cyclone5_de10nano_FB.dts
$ vi socfpga_cyclone5_de10nano_FB.dts #Bearbeiten
$ cd ../../../..
Die Änderung besteht darin, am Ende der Datei Folgendes hinzuzufügen.
&base_fpga_region {
ranges = <0x00000000 0xff200000 0x00200000>;
alt_vip_vfr_hdmi: vip@0x100031000 {
compatible = "ALTR,vip-frame-reader-14.0", "ALTR,vip-frame-reader-9.1";
reg = <0x00031000 0x00000080>;
max-width = <1024>;
max-height = <768>;
bits-per-color = <8>;
colors-per-beat = <4>;
beats-per-pixel = <1>;
mem-word-width = <128>;
};
};
Erstellen Sie dann einen Gerätebaum .dtb mit dem umbenannten zImage und ersetzen Sie diese durch die SD-Kartendateien.
$ make zImage
$ make socfpga_cyclone5_de10nano_FB.dtb
Ich habe geschrieben, wie man nur den Linux-Kernel der DE10 nano Linux SD-Karte erstellt und aktualisiert. Tatsächlich gibt es einen Aspekt, bei dem ich diesen Inhalt geschrieben habe, weil er in "FPGA-Konfiguration mit Gerätebaumüberlagerung" in einem anderen Artikel erforderlich war. Im obigen Arbeitsbefehlsbeispiel wird die SD-Karte von DE10nano in den Entwicklungs-PC eingelegt, gemountet und der Inhalt neu geschrieben, aber ich habe den DE10nano und den Entwicklungs-PC mit Ethernet verbunden und mit dem Entwicklungs-PC generiert. Ich arbeite, indem ich die Binärdatei mit scp an DE10nano sende und die Datei mit DE10nano neu schreibe (da das Einlegen und Entfernen der SD-Karte schwierig ist).
Referenz: Linux kompilieren auf der Linux-Portalseite für Intel SoC FPGA
Recommended Posts