[LINUX] Verfahren zur Einführung von Xenomai in RaspberryPi 3 Modell B + Teil 1

Überblick

Aus irgendeinem Grund wurde es notwendig, die Verarbeitungsleistung des Echtzeitkerns zu untersuchen. Deshalb habe ich Xenomai, einen Echtzeitkern, in Raspberry Pi3 eingeführt. Zu dieser Zeit arbeitete ich gemäß dem offiziellen Forum von Xenomai, aber es funktionierte überhaupt nicht und ich kämpfte, also fasste ich die Einführungsmethode zusammen. Es gibt äußerst wenige japanische Artikel über die Einführung von Xenomai, und es ist ziemlich schwierig, es sei denn, Sie sehen sich Beiträge aus Übersee an (wenn Sie kein Englisch lesen können). Denken Sie, es sollte ein Leitfaden für Menschen sein, die von nun an dasselbe tun möchten? (Dies ist übrigens Qiitas erster Beitrag)

Vorsichtsmaßnahmen

Es ist eine Einführungsmethode ab 2020! Abhängig von der Umgebung, in der es verwendet wird, funktioniert es möglicherweise nicht.

Inhaltsverzeichnis

Was ist Xenomai?

Xenomais Gitlab (Wiki)

https://gitlab.denx.de/Xenomai/xenomai/-/wikis/home

Arbeitsumgebung

Sie können dies ohne einen PC mit einer Linux-Umgebung tun. In diesem Fall müssen Sie den Kernel jedoch selbst mit RPi kompilieren. Seien Sie also auf eine beträchtliche Zeit vorbereitet.

Es gibt hauptsächlich zwei Arbeitsstufen, und in der ersten Stufe wird ein Kernel erstellt, damit Xenomai verwendet werden kann. Der zweite Schritt besteht darin, Xenomai selbst zu erstellen, damit Sie die Xenomai-Bibliotheken verwenden können. Dieses Mal werde ich die erste Stufe erklären.

Arbeitsinhalt (Kernelvorbereitung)

Ich habe diesmal sowohl Selbstkompilierung als auch Kreuzkompilierung versucht, aber ich werde die Methode beschreiben, die ich mit Kreuzkompilierung versucht habe (ich kann eine Selbstkompilierungsmethode schreiben, wenn ich Lust dazu habe).

Vorbereitung 1

Diesmal Linux-Kernel 4.19.xxx (xxx ist zu diesem Zeitpunkt eine Unterebene von Stable) Starten Sie ein Terminal in einer Linux-Umgebung und kompilieren Sie es in Ihrem eigenen Home-Verzeichnis Erstellen Sie ein Verzeichnis zum Speichern der heruntergeladenen

linux_user@TN-201709F100R:~$ mkdir /kernel_cnst/
linux_user@TN-201709F100R:~$ cd ./kernel_cnst/

Ziehen Sie einen normalen Linux-Kernel für Raspberry Pi von Github. (Sie können DL auch direkt von der Git-URL aus verwenden, es ist jedoch besser, Git zu verwenden. Installieren Sie daher den Befehl git als apt-get oder yum.)

linux_user@TN-201709F100R:~$ git clone https://github.com/raspberrypi/linux -b rpi-4.19.y

Bei der Ausführung wird der Download der Linux-Kernelquelle aus dem Git-Repository gestartet. Wenn Sie fertig sind, wird ein Verzeichnis namens "Linux" erstellt.

linux_user@TN-201709F100R:~$ cd ./linux/
linux_user@TN-201709F100R:~$ head -4 Makefile

Überprüfen Sie dann die Version der abgelegten Quelle. In der Umgebung bin ich gelaufen

# SPDX-License-Identifier: GPL-2.0
VERSION = 4
PATCHLEVEL = 19
SUBLEVEL = 127

Und dies ist die stabile Version zum Zeitpunkt der Arbeit. (Wenn Sie mit der Option -b nichts angeben, wird die zu diesem Zeitpunkt stabile Version heruntergeladen.)

Vorbereitung 2

Ziehen Sie als Nächstes die Xenomai-Quelle und die folgenden Patches mit wget.

Xenomai-Body: http://xenomai.org/downloads/xenomai/stable/ Xenomai iPipe-Patch: https://xenomai.org/downloads/ipipe/v4.x/arm/

Wenn Sie sie ablegen, müssen Sie sie im Arbeitsverzeichnis ablegen. (In meiner Umgebung kernel_cnst wie oben)

Vorbereitung 3 (beim Selbstkompilieren nicht erforderlich)

Für die Selbstkompilierung brauche ich es nicht, weil ich nur einen Linux-Standard-Compiler brauche. Wenn Sie Cross-Compilieren möchten, benötigen Sie es, gehen Sie wie folgt vor

linux_user@TN-201709F100R:~$ cd ~/kernel_cnst/
linux_user@TN-201709F100R:~$ git clone https://github.com/raspberrypi/tools

Arbeitsinhalt (Kernel-Kompilierung)

Lass uns das Spiel starten ...

Es tut mir Leid. Lassen Sie uns von hier aus den Xenomai-Kernel erstellen und installieren. Unabhängig von diesem Kernel-Build sollten Sie sich bei der Arbeit an Befehlen unter Linux anmelden! (Ich weiß nicht, warum ich später versagt habe)

Alle Dateien, die Sie gerade gelöscht haben, sollten sich im Verzeichnis kernel_cnst befinden.

Um die Funktionen von Xenomai nutzen zu können, müssen die Funktionen des Kernels erweitert werden. Die aktuelle Verzeichnisstruktur sieht folgendermaßen aus

~/kernel_cnst/
  →/Xenomai3.x/ *xenomai source
  →/linux/ *kernel source
  →/ipipe_patch_xxx.patch *ipipe_patch
  →/tools/  *cross compile tool set

Patchen Sie zunächst den Kernel selbst, um dem Kernel die Funktionalität von iPipe zu verleihen. Sie können ein Verzeichnis für ipipe selbst erstellen und darin ablegen.

linux_user@TN-201709F100R:~$ cd ~/kernel_cnst/
linux_user@TN-201709F100R:~$ cd ./linux/
linux_user@TN-201709F100R:~$ ../Xenomai3.x/scripts/prepare-kernel.sh --linux=./ --arch=arm --ipipe=../ipipe_patch_xxx.patch --verbose

Die erste Herausforderung. Wenn hier "Build system ready" angezeigt wird, wurde der Patch problemlos angewendet. Wenn "Unfähiger Patch ~~~~" angezeigt wird, schlägt dies fehl. Das Problem ist, dass es keine Version des Linux-Kernels und der Version des IPipe-Patches gibt (das Wiki sagt, dass es in Ordnung ist, wenn die Unterebenen unterschiedlich sind, aber nicht). In diesem Fall müssen Sie den Patch-Inhalt entsprechend der Linux-Version ändern. (Ich werde einen weiteren Artikel über Patch-Korrektur schreiben)

Wenn der Patch erscheint, besteht der Rest darin, den Linux-Kernel zu erstellen.

linux_user@TN-201709F100R:~$ cd ~/kernel_cnst/linux/
linux_user@TN-201709F100R:~$ export CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-
linux_user@TN-201709F100R:~$ export KERNEL=kernel7

Beachten Sie, dass es im Fall von PRi4 beim Festlegen der Umgebungsvariablen von KERNEL nicht "kernel7" ist.

linux_user@TN-201709F100R:~$ make bcm2709_defconfig
linux_user@TN-201709F100R:~$ make menuconfig

Wenn Sie menuconfig ausführen und es heißt, dass es so etwas nicht gibt, gehen Sie wie folgt vor:

linux_user@TN-201709F100R:~$ sudo apt-get install build-essential libncurses5-dev

Wenn die Menükonfiguration geöffnet wird, stellen Sie die Parameter wie folgt ein ([] bricht die Einstellung ab, [x] überprüft die Einstellung)

CPU Power Management → CPU Frequency scaling → CPU Frequency scaling [ ]
Kernel Features → Contiguous Memory Allocator [ ]
Kernel Features → Allow for memory compaction [ ]
Kernel Hacking → KGDB: kernel debugger [ ]
Kernel Features → Time Frequency → 1000Hz

Damit sind die Konfigurationseinstellungen für make abgeschlossen und schließlich erstellt

linux_user@TN-201709F100R:~$ mkdir ~/xenomai_kernel_build/
linux_user@TN-201709F100R:~$ export INSTALL_MOD_PATH={Das oben erstellte Verzeichnis}
linux_user@TN-201709F100R:~$ export INSTALL_DTBS_PATH={Kann mit dem oben angegebenen Verzeichnis identisch sein}
linux_user@TN-201709F100R:~$ make –j□ zImage modules dtbs (Geben Sie die Anzahl der Kerne ein, die Sie in □ verwenden möchten)
linux_user@TN-201709F100R:~$ $ make –j□ modules_install 
linux_user@TN-201709F100R:~$ make –j□ dtbs_install(Dadurch wird eine dtb-Datei für die Konfiguration erstellt, die jedoch mit der von make zImage generierten identisch sein sollte)

Ich denke nicht, dass eine aktuelle Maschine eine CPU mit 4 Kernen oder weniger verwendet, also denke ich, dass 4 in Ordnung ist. Wenn Sie erfolgreich erstellen können, führen Sie Folgendes aus

linux_user@TN-201709F100R:~$ mkdir $INSTALL_MOD_PATH/boot/
linux_user@TN-201709F100R:~$ ./scripts/mkknlimg ./arch/arm/boot/zImage $INSTALL_MOD_PATH/boot/kernel7.img

Jetzt haben Sie die Image-Dateien und die Dateien, die zur Installation des Kernels benötigt werden. Es wird in $ INSTALL_MOD_PATH generiert. Komprimieren Sie es also und bringen Sie es über USB usw. zu RPi.

tar -zcvf kernel_pack.tgz $INSTALL_MOD_PATH

Unten arbeiten mit Paspberry Pi

Entpacken Sie die komprimierte Datei, die Sie an einen geeigneten Ort gebracht haben. Der RPi-Kernel kann neu kombiniert werden, indem die Quelle erstellt und die generierte Image-Datei durch die bereits unter / boot / ersetzte ersetzt wird. Sichern Sie alle zu ersetzenden Dateien, bevor Sie weitere Arbeiten ausführen. </ font> Wenn Sie dies nicht tun, wird das schlechteste RPi nie wieder gestartet. (Es fängt eigentlich nicht an)

Backup-Arbeit

linux_user@TN-201709F100R:~$ sudo mkdir /boot/boot_org/
linux_user@TN-201709F100R:~$ sudo cp  -rd /boot/* /boot/boot_org
linux_user@TN-201709F100R:~$ sudo cp –rd /lib/ /lib_backup/

Installieren Sie schließlich den neuen Kernel auf RPi

linux_user@TN-201709F100R:~$ sudo cp {Entpackt$INSTALL_MOD_PATH}/kernel7.img /boot/
linux_user@TN-201709F100R:~$ sudo cp ./arch/arm/boot/dts/*.dtb /boot/
linux_user@TN-201709F100R:~$ sudo cp ./arch/arm/boot/dts/overlays/* /boot/overlays
linux_user@TN-201709F100R:~$ cd {Entpackt$INSTALL_MOD_PATH}
linux_user@TN-201709F100R:~$ cp –rd ./* /lib/

Bearbeiten Sie dann die Boot-Konfiguration

linux_user@TN-201709F100R:~$ sudo vi /boot/config.txt

Die folgenden zwei Zeilen wurden hinzugefügt

Kernel=kernel7.img
device_tree= bcm2710-rpi-3-b-plus.dtb

Der neu installierte Kernel wird erst nach einem Neustart wiedergegeben. Führen Sie daher die folgenden Schritte aus, um die aktuelle Kernelversion zu überprüfen (um zu überprüfen, ob der Kernel wirklich ersetzt wurde), bevor Sie neu starten.

linux_user@TN-201709F100R:~$ uname -a
linux_user@TN-201709F100R:~$ Linux 4.19.xxx

Starten Sie nach der Bestätigung RPi neu

linux_user@TN-201709F100R:~$ sudo reboot

Wenn es danach normal startet, starten Sie das Terminal und überprüfen Sie die Kernelversion

linux_user@TN-201709F100R:~$ uname -a
linux_user@TN-201709F100R:~$ Linux 4.19.yyy(Die Version des Kernels, die in diese Arbeit eingefügt wurde)

Wenn es ok ist. Damit ist die Kernel-Konstruktion für Xenomai vorerst abgeschlossen. Die Artikel, auf die ich in dieser Arbeit Bezug genommen habe, lauten wie folgt

Verweise

https://lemariva.com/blog/2018/07/raspberry-pi-xenomai-patching-tutorial-for-kernel-4-14-y

Als nächstes folgt der Build von Xenomai selbst, aber da es lange dauern wird, fahren Sie mit Teil 2 fort.

Recommended Posts

Verfahren zur Einführung von Xenomai in RaspberryPi 3 Modell B + Teil 1
Schritt 2, um Xenomai auf RaspberryPi 3 Modell B + zu installieren
[Go] Verfahren zur Installation von Go auf WSL2
Verfahren zur manuellen Installation von Java (jdk1.8) unter Linux (CentOS7)
Himbeer pi 1 Modell b, knotenroter Teil 17
Das grovepi-Modul von python3.8.1 konnte nicht auf RaspberryPi Model 3B installiert werden (gelöst)
Hinweise zur Installation von Sublime Text unter Ubuntu
[Hinweis] Verfahren zur Installation von Ubuntu unter Windows 10
Fehler beim Lesen des Werts von SHT31-D mit RaspberryPi 3B +
Das einfachste Verfahren und die einfachste Erklärung für die Installation von Oracle Linux 8.3 (DB-Konstruktion erster Teil)
Installieren von TensorFlow unter Windows Easy für Python-Anfänger