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)
C'est une méthode d'introduction à partir de 2020! Cela peut ne pas fonctionner selon l'environnement dans lequel il est utilisé.
https://gitlab.denx.de/Xenomai/xenomai/-/wikis/home
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.
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)
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.)
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)
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
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
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)
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
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