Construire un noyau Linux en temps réel [contribution de la communauté]

Ce didacticiel commence par une installation propre d’Ubuntu 20.04.1 sur Intel x86_64. Le noyau actuel est le 5.4.0-54-générique, mais nous installerons la dernière version stable de RT_PREEMPT. Pour construire le noyau, vous avez besoin d’au moins 30 Go d’espace disque libre.

Vérifiez https://wiki.linuxfoundation.org/realtime/start pour la dernière version stable, au moment de la rédaction, il s’agit de « Latest Stable Version 5.4-rt ». Si nous cliquons sur le lien, nous obtenons la version exacte. Actuellement, il s’agit du patch-5.4.78-rt44.patch.gz.

../../_images/realtime-kernel-patch-version.png

Nous créons un répertoire dans notre répertoire personnel avec

mkdir ~/kernel

et basculez-y avec

cd ~/kernel

Nous pouvons aller avec un navigateur sur https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ et voir si la version est là. Vous pouvez le télécharger depuis le site et le déplacer manuellement de /Downloads vers le dossier /kernel, ou le télécharger à l’aide de wget en cliquant avec le bouton droit sur le lien en utilisant « copier l’emplacement du lien ». Exemple:

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.78.tar.gz

le déballer avec

tar -xzf linux-5.4.78.tar.gz

téléchargez le patch rt_preempt correspondant à la version du noyau que nous venons de télécharger sur http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/

wget http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patch-5.4.78-rt44.patch.gz

le déballer avec

gunzip patch-5.4.78-rt44.patch.gz

Basculez ensuite dans le répertoire linux avec

cd linux-5.4.78/

et patchez le noyau avec le patch en temps réel

patch -p1 < ../patch-5.4.78-rt44.patch

Nous voulons simplement utiliser la configuration de notre installation Ubuntu, nous obtenons donc la configuration Ubuntu avec

cp /boot/config-5.4.0-54-generic .config

Ouvrez Logiciels et mises à jour. dans le menu Ubuntu Software cochez la case “Source code”

Nous avons besoin d’outils pour construire le noyau, installez-les avec

sudo apt-get build-dep linux
sudo apt-get install libncurses-dev flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf fakeroot

Pour activer toutes les configurations Ubuntu, nous utilisons simplement

yes '' | make oldconfig

Ensuite, nous devons activer rt_preempt dans le noyau. Nous appelons

make menuconfig

et définissez ce qui suit

# Enable CONFIG_PREEMPT_RT
 -> General Setup
  -> Preemption Model (Fully Preemptible Kernel (Real-Time))
   (X) Fully Preemptible Kernel (Real-Time)

# Enable CONFIG_HIGH_RES_TIMERS
 -> General setup
  -> Timers subsystem
   [*] High Resolution Timer Support

# Enable CONFIG_NO_HZ_FULL
 -> General setup
  -> Timers subsystem
   -> Timer tick handling (Full dynticks system (tickless))
    (X) Full dynticks system (tickless)

# Set CONFIG_HZ_1000 (note: this is no longer in the General Setup menu, go back twice)
 -> Processor type and features
  -> Timer frequency (1000 HZ)
   (X) 1000 HZ

# Set CPU_FREQ_DEFAULT_GOV_PERFORMANCE [=y]
 ->  Power management and ACPI options
  -> CPU Frequency scaling
   -> CPU Frequency scaling (CPU_FREQ [=y])
    -> Default CPUFreq governor (<choice> [=y])
     (X) performance

Enregistrez et quittez menuconfig. Nous allons maintenant construire le noyau, ce qui prendra un certain temps. (10-30min sur un processeur moderne)

make -j `nproc` deb-pkg

Une fois la construction terminée, vérifiez les packages debian

ls ../*deb
../linux-headers-5.4.78-rt41_5.4.78-rt44-1_amd64.deb  ../linux-image-5.4.78-rt44-dbg_5.4.78-rt44-1_amd64.deb
../linux-image-5.4.78-rt41_5.4.78-rt44-1_amd64.deb    ../linux-libc-dev_5.4.78-rt44-1_amd64.deb

Ensuite, nous installons tous les packages debian du noyau

sudo dpkg -i ../*.deb

Maintenant, le noyau temps réel doit être installé. Redémarrez le système et vérifiez la nouvelle version du noyau

sudo reboot
uname -a
Linux ros2host 5.4.78-rt44 #1 SMP PREEMPT_RT Fri Nov 6 10:37:59 CET 2020 x86_64 xx