[LINUX] Procédure pour introduire Xenomai dans RaspberryPi 3 modèle B + Partie 1

Aperçu

Pour une raison quelconque, il est devenu nécessaire d'étudier la puissance de traitement du noyau en temps réel, j'ai donc introduit Xenomai, qui est un noyau en temps réel, à Raspberry Pi 3. A cette époque, je travaillais selon le forum officiel de Xenomai, mais cela ne fonctionnait pas du tout et j'ai eu du mal, j'ai donc résumé la méthode d'introduction. Il y a extrêmement peu d'articles en japonais sur l'introduction de Xenomai, et c'est assez difficile à moins de regarder les publications à l'étranger (quand vous ne pouvez pas lire l'anglais) Pensez-vous que cela devrait être un guide pour les personnes qui veulent faire la même chose à partir de maintenant? (Au fait, c'est le premier post de Qiita)

Remarques

C'est une méthode d'introduction à partir de 2020! Cela peut ne pas fonctionner selon l'environnement dans lequel il est utilisé.

table des matières

Qu'est-ce que Xenomai?

Gitlab de Xenomai (wiki)

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

Environnement de travail

Vous pouvez le faire sans PC avec un environnement Linux, mais dans ce cas, vous devrez auto-compiler le noyau avec RPi, alors soyez prêt pour un temps considérable.

Il y a principalement deux étapes de travail, et la première étape construit un noyau afin que Xenomai puisse être utilisé. La deuxième étape consiste à construire Xenomai lui-même afin que vous puissiez utiliser les bibliothèques de Xenomai. Cette fois, je vais vous expliquer la première étape.

Contenu du travail (préparation du noyau)

J'ai essayé à la fois l'auto-compilation et la compilation croisée cette fois, mais je décrirai la méthode que j'ai essayée avec la compilation croisée (je peux écrire une méthode d'auto-compilation si j'en ai envie)

Préparation 1

Cette fois, le noyau Linux 4.19.xxx (xxx est un sous-niveau de stable à ce moment-là) Démarrez un terminal dans un environnement Linux et compilez sous votre propre répertoire personnel Créez un répertoire pour stocker ceux téléchargés

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

Tirez un noyau Linux normal pour Raspberry Pi à partir de Github. (Vous pouvez également DL directement depuis l'URL git, mais il est préférable d'utiliser git, alors installez la commande git comme apt-get ou yum)

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

Une fois exécuté, le téléchargement de la source du noyau Linux démarrera à partir du référentiel git. Une fois terminé, un répertoire appelé "linux" sera créé.

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

Ensuite, vérifiez la version de la source supprimée. Dans l'environnement j'ai couru

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

Et c'est la version stable au moment du travail. (Si vous ne spécifiez rien avec l'option -b, la version stable à ce moment-là sera téléchargée.)

Préparation 2

Ensuite, extrayez la source Xenomai et les correctifs des éléments suivants avec wget.

Corps Xenomai: http://xenomai.org/downloads/xenomai/stable/ Correctif Xenomai iPipe: https://xenomai.org/downloads/ipipe/v4.x/arm/

Si vous les supprimez, assurez-vous de les placer sous le répertoire de travail. (Dans mon environnement, kernel_cnst comme ci-dessus)

Préparation 3 (non requise lors de l'auto-compilation)

Pour l'auto-compilation, je n'en ai pas besoin car je n'ai besoin que d'un compilateur standard linux, Si vous souhaitez effectuer une compilation croisée, vous en aurez besoin, alors procédez comme suit

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

Contenu de travail (compilation du noyau)

Commençons le jeu ...

Je suis désolé. Construisons et installons le noyau Xenomai à partir d'ici. Indépendamment de cette version du noyau, assurez-vous de vous connecter lorsque vous travaillez sur des commandes sous Linux! (Je ne sais pas pourquoi j'ai échoué plus tard)

Tous les fichiers que vous venez de déposer doivent se trouver dans le répertoire kernel_cnst.

Afin d'utiliser les fonctions de Xenomai, les fonctions du noyau doivent être étendues. La structure actuelle des répertoires ressemble à ceci

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

Tout d'abord, corrigez le noyau lui-même pour lui donner la fonctionnalité d'iPipe. Vous pouvez créer un répertoire pour ipipe lui-même et le mettre dedans.

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

Le premier défi. Si "Build system ready" est affiché ici, le patch a été appliqué sans aucun problème. S'il dit "patch impossible ~~~~", il échoue. Le problème est que la version du noyau Linux et la version du patch ipipe ne sont pas disponibles (le wiki dit que ce n'est pas grave si les sous-niveaux sont différents, mais ce n'était pas le cas) Donc, dans ce cas, vous devez modifier le contenu du patch en fonction de la version de linux. (J'écrirai un autre article sur la correction des patchs)

Si le correctif arrive, le reste est de construire le noyau Linux.

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

Notez qu'il ne s'agit pas de "kernel7" pour PRi4 lors de la définition des variables d'environnement KERNEL.

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

Si, lorsque vous exécutez menuconfig et que cela indique qu'il n'y a rien de tel, procédez comme suit

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

Lorsque menuconfig s'ouvre, réglez les paramètres comme suit ([] annule le réglage, [x] vérifiez le réglage)

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

Ceci complète les paramètres de configuration pour make, et enfin build

linux_user@TN-201709F100R:~$ mkdir ~/xenomai_kernel_build/
linux_user@TN-201709F100R:~$ export INSTALL_MOD_PATH={Répertoire créé ci-dessus}
linux_user@TN-201709F100R:~$ export INSTALL_DTBS_PATH={Peut être le même que le répertoire spécifié ci-dessus}
linux_user@TN-201709F100R:~$ make –j□ zImage modules dtbs (Entrez le nombre de cœurs que vous souhaitez utiliser dans □)
linux_user@TN-201709F100R:~$ $ make –j□ modules_install 
linux_user@TN-201709F100R:~$ make –j□ dtbs_install(Cela créera un fichier dtb pour la configuration, mais celui-ci devrait être le même que celui généré par make zImage)

Je ne pense pas qu'une machine actuelle utilise un processeur avec 4 cœurs ou moins, donc je pense que 4 est bien. Si vous pouvez créer avec succès, exécutez ce qui suit

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

Vous avez maintenant les fichiers image et les fichiers nécessaires pour installer le noyau. Il sera généré dans $ INSTALL_MOD_PATH, donc compressez-le et amenez-le sur RPi via USB, etc.

tar -zcvf kernel_pack.tgz $INSTALL_MOD_PATH

Ci-dessous travailler avec Paspberry Pi

Décompressez le fichier compressé que vous avez apporté à un endroit approprié. Le noyau RPi peut être recombiné en construisant la source et en remplaçant le fichier image généré par celui déjà sous / boot /. Assurez-vous de sauvegarder tous les fichiers que vous souhaitez remplacer avant de continuer à travailler </ font> Si vous ne le faites pas, le pire RPi ne redémarrera jamais. (Ça ne démarre pas vraiment)

Travail de sauvegarde

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/

Enfin, installez le nouveau noyau sur RPi

linux_user@TN-201709F100R:~$ sudo cp {Décompressé$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 {Décompressé$INSTALL_MOD_PATH}
linux_user@TN-201709F100R:~$ cp –rd ./* /lib/

Puis modifiez la configuration de démarrage

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

Ajout des deux lignes suivantes

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

Le noyau nouvellement installé ne sera pas reflété jusqu'à ce qu'il soit redémarré, alors exécutez ce qui suit pour vérifier la version actuelle du noyau (pour vérifier si le noyau est vraiment remplacé) avant de redémarrer.

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

Après confirmation, redémarrez RPi

linux_user@TN-201709F100R:~$ sudo reboot

Après cela, s'il démarre normalement, démarrez le terminal et vérifiez la version du noyau

linux_user@TN-201709F100R:~$ uname -a
linux_user@TN-201709F100R:~$ Linux 4.19.yyy(La version du noyau qui a été mise dans ce travail)

Si ça va. Ceci termine la construction du noyau pour Xenomai pour le moment. Les articles auxquels j'ai fait référence dans cet ouvrage sont les suivants

Les références

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

Vient ensuite la construction de Xenomai lui-même, mais comme elle sera longue, passez à la partie 2.

Recommended Posts

Procédure pour introduire Xenomai dans RaspberryPi 3 modèle B + Partie 1
Étape 2 pour installer Xenomai sur RaspberryPi 3 modèle B +
[Go] Procédure d'installation de Go sur WSL2
Procédure d'installation manuelle de Java (jdk1.8) sous Linux (CentOS7)
Raspberry pi 1 modèle b, partie rouge noeud 17
Le module grovepi de python3.8.1 n'a pas pu être installé sur RaspberryPi Model 3B (résolu)
Notes pour l'installation de Sublime Text sur Ubuntu
[Note] Procédures d'installation d'Ubuntu sur Windows 10
Erreur lors de la lecture de la valeur de SHT31-D avec RaspberryPi 3B +
La procédure et l'explication la plus simple pour installer Oracle Linux 8.3 (première partie de la construction de la base de données)
Installation de TensorFlow sur Windows Easy pour les débutants en Python