{"id":327,"date":"2020-09-12T10:10:00","date_gmt":"2020-09-12T09:10:00","guid":{"rendered":"https:\/\/ligfy.net\/wordpress\/?p=327"},"modified":"2025-09-19T13:30:00","modified_gmt":"2025-09-19T12:30:00","slug":"optimise-debian-9-avec-un-noyau-real-time","status":"publish","type":"post","link":"https:\/\/ligfy.net\/wordpress\/optimise-debian-9-avec-un-noyau-real-time\/","title":{"rendered":"Optimis\u00e9 Debian 9 avec un Noyau Real-Time"},"content":{"rendered":"\n<ul><li><a href=\"https:\/\/ligfy.net\/wordpress\/optimise-debian-9-avec-un-noyau-real-time#G\u00e9n\u00e9ralit\u00e9s\">G\u00e9n\u00e9ralit\u00e9s<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/optimise-debian-9-avec-un-noyau-real-time#Installation-des-d\u00e9pendances\">Installation&nbsp;des d\u00e9pendances<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/optimise-debian-9-avec-un-noyau-real-time#T\u00e9l\u00e9chargement-du-code-source-du-noyau\">T\u00e9l\u00e9chargement&nbsp;du code source du noyau<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/optimise-debian-9-avec-un-noyau-real-time#Application-du-patch-RT-(Real-Time)\">Application du patch RT (Real Time)<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/optimise-debian-9-avec-un-noyau-real-time#Configuration-du-noyau\">Configuration du&nbsp;noyau<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/optimise-debian-9-avec-un-noyau-real-time#Construction-du-noyau\">Construction du noyau<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/optimise-debian-9-avec-un-noyau-real-time#Installation-du-noyau-modifi\u00e9\">Installation du noyau modifi\u00e9<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"G\u00e9n\u00e9ralit\u00e9s\">G\u00e9n\u00e9ralit\u00e9s<\/h2>\n\n\n\n<p>Le noyau Linux (ou <em>Linux kernel<\/em>) est le c\u0153ur d\u2019un syst\u00e8me d\u2019exploitation de type UNIX. Logiciel libre principalement \u00e9crit en C, il assure la gestion des ressources mat\u00e9rielles (processeur, m\u00e9moire, p\u00e9riph\u00e9riques, syst\u00e8mes de fichiers, r\u00e9seau) et fournit aux programmes une interface pour y acc\u00e9der. Il prend aussi en charge l\u2019amor\u00e7age du syst\u00e8me.<\/p>\n\n\n\n<p>Plusieurs versions du noyau peuvent coexister sur une machine, offrant la possibilit\u00e9 de choisir celle \u00e0 utiliser au d\u00e9marrage.<\/p>\n\n\n\n<p>Pourquoi compiler son noyau ?<br>Les noyaux fournis par les distributions GNU\/Linux sont con\u00e7us pour \u00eatre compatibles avec un large \u00e9ventail de machines et de mat\u00e9riels. Ils sont donc plus g\u00e9n\u00e9ralistes et un peu plus lourds, m\u00eame si l\u2019impact sur les performances reste g\u00e9n\u00e9ralement faible.<\/p>\n\n\n\n<p>Les principales raisons de compiler son propre noyau sont :<\/p>\n\n\n\n<ul><li>mieux comprendre le fonctionnement interne de Linux.<\/li><li>activer la prise en charge d\u2019un mat\u00e9riel ou d\u2019une fonctionnalit\u00e9 absente du noyau fourni.<\/li><li>appliquer un correctif sp\u00e9cifique.<\/li><\/ul>\n\n\n\n<h2 id=\"Installation-des-d\u00e9pendances\">Installation&nbsp;des d\u00e9pendances<\/h2>\n\n\n\n<p>Commencez par installer toutes les d\u00e9pendances&nbsp;pour recompiler le noyau.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>apt install&nbsp;build-essential libncurses5-dev fakeroot xz-utils<\/code><\/p><\/blockquote>\n\n\n\n<h2 id=\"T\u00e9l\u00e9chargement-du-code-source-du-noyau\">T\u00e9l\u00e9chargement&nbsp;du code source du noyau<\/h2>\n\n\n\n<p>Il est recommand\u00e9 d\u2019utiliser les sources fournies par votre distribution, car elles int\u00e8grent souvent des ajustements sp\u00e9cifiques, tels que des fonctionnalit\u00e9s suppl\u00e9mentaires ou des correctifs de s\u00e9curit\u00e9.<\/p>\n\n\n\n<p>Dans notre cas, nous allons installer les sources du noyau adapt\u00e9es \u00e0 la distribution Debian.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>apt install&nbsp;linux-source<\/code><\/p><\/blockquote>\n\n\n\n<p>Le paquet installe dans le r\u00e9pertoire <strong>\/usr\/src\/<\/strong> deux archives compress\u00e9es :<\/p>\n\n\n\n<ul><li><strong>linux-source-4.9.tar.xz<\/strong> : les sources compl\u00e8tes du noyau Linux,<\/li><li><strong>linux-patch-4.9-rt.patch.xz<\/strong> : un correctif RT (<em>Real Time<\/em>) qui permet d\u2019ajouter au noyau un comportement temps r\u00e9el.<\/li><\/ul>\n\n\n\n<p>Pour examiner ces archives, il suffit de lister leur contenu.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>ls \/usr\/src<\/code><\/p><\/blockquote>\n\n\n\n<p>Note : <\/p>\n\n\n\n<p>Les num\u00e9ros de version du noyau peuvent varier. L\u2019exemple pr\u00e9c\u00e9dent concernait la version <strong>4.9<\/strong>. Lors de la compilation, il faudra donc adapter vos commandes en fonction de la version exacte des sources que vous utilisez.<\/p>\n\n\n\n<p>Nous allons maintenant extraire les fichiers sources du noyau dans un r\u00e9pertoire d\u00e9di\u00e9, par exemple dans le dossier personnel de l\u2019administrateur (\/root\/kernel\/).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>mkdir -p ~\/kernel\/<br>cd ~\/kernel\/<br>tar -xaf \/usr\/src\/linux-source-4.9.tar.xz<\/code><\/p><\/blockquote>\n\n\n\n<h2 id=\"Application-du-patch-RT-(Real-Time)\">Application du patch RT (Real Time)<\/h2>\n\n\n\n<p>Pour appliquer le patch <strong>Linux-RT<\/strong> au noyau, commencez par vous placer dans le dossier contenant les sources du noyau, puis appliquez le patch avec la commande appropri\u00e9e.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>cd linux-source-4.9\/<br>xzcat \/usr\/src\/linux-patch-4.9-rt.patch.xz | patch -p1<\/code><\/p><\/blockquote>\n\n\n\n<h2 id=\"Configuration-du-noyau\">Configuration du&nbsp;noyau<\/h2>\n\n\n\n<p>Lors de la recompilation d\u2019un noyau (m\u00eame d\u2019une version plus r\u00e9cente), la configuration est g\u00e9n\u00e9ralement pr\u00e9serv\u00e9e proche de celle fournie par Debian. Plut\u00f4t que de repartir de z\u00e9ro, il suffit de copier le fichier <strong>\/boot\/config-&lt;version&gt;<\/strong> o\u00f9 <strong>&lt;version&gt;<\/strong> correspond au noyau en cours d\u2019utilisation (obtenu via <strong>uname -r<\/strong>) vers <strong>.config<\/strong> dans le r\u00e9pertoire des sources du noyau.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>cp \/boot\/config-$(uname -r) ~\/kernel\/linux-source-4.9\/.config<\/code><\/p><\/blockquote>\n\n\n\n<p>Pour lancer l&rsquo;utilitaire de configuration du noyau, il faut&nbsp;taper&nbsp;la commande&nbsp;<strong>make menuconfig<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>make menuconfig<\/code><\/p><\/blockquote>\n\n\n\n<p>La navigation dans cette interface est simple :<\/p>\n\n\n\n<ul><li><strong>Fl\u00e8ches&nbsp;haut\/bas<\/strong> : pour monter\/descendre<\/li><li><strong>Entr\u00e9e<\/strong>&nbsp;: pour entrer dans les sous-menus<\/li><li><strong>\u00c9chap&nbsp;deux fois<\/strong> : pour sortir d&rsquo;un sous-menu<\/li><li><strong>h<\/strong>&nbsp;: pour demander l&rsquo;aide d&rsquo;une option<\/li><li><strong>\/<\/strong>&nbsp;: pour rechercher une option<\/li><li><strong>Espace<\/strong>&nbsp;: pour s\u00e9lectionner une option<\/li><\/ul>\n\n\n\n<p>Ici vous&nbsp;d\u00e9finissez les param\u00e8tres du noyau comme ceci :<\/p>\n\n\n\n<p><strong>Preemption Model<\/strong>&nbsp;: On s\u00e9lectionnera l\u2019option la plus pr\u00e9emptible. En particulier si le patch <strong>Linux-RT<\/strong> est appliqu\u00e9, on choisira <strong>Fully Preemptible Kernel<\/strong> pour obtenir la meilleure r\u00e9activit\u00e9 face aux interruptions.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>&nbsp;-&gt; Processor type and features&nbsp; ---&gt;<br>&nbsp; &nbsp; -&gt;&nbsp;Preemption Model ( ... )&nbsp; ---&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<strong>(X) Fully Preemptible Kernel (Real-Time)<\/strong><\/code><\/code><\/pre>\n\n\n\n<p><strong>Timer Frequency<\/strong>&nbsp;: C\u2019est la fr\u00e9quence du tick syst\u00e8me qui influe sur la granularit\u00e9 des timers logiciels de basse fr\u00e9quence.&nbsp;<strong>1000 Hz<\/strong> est le choix pr\u00e9f\u00e9r\u00e9 pour les syst\u00e8mes n\u00e9cessitant des r\u00e9ponses interactives rapides aux \u00e9v\u00e9nements.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>&nbsp;-&gt; Processor type and features&nbsp; ---&gt;<br>&nbsp; &nbsp; -&gt;&nbsp;Timer frequency ( ... )&nbsp; ---&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<strong>(X) 1000 HZ<\/strong><\/code><\/code><\/pre>\n\n\n\n<p><strong>High Resolution Timer Support<\/strong>&nbsp;: Si l\u2019architecture permet de disposer de timers haute r\u00e9solution (fr\u00e9quence sup\u00e9rieure \u00e0 1kHz) il est toujours int\u00e9ressant de les utiliser. Cette option est ind\u00e9pendante de la pr\u00e9c\u00e9dente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>&nbsp;-&gt; General setup&nbsp; ---&gt;<br>&nbsp; &nbsp; -&gt;&nbsp;Timers subsystem&nbsp; ---&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<strong>&#91;*] High Resolution Timer Support<\/strong><\/code><\/code><\/pre>\n\n\n\n<p><strong>Tickless system<\/strong>&nbsp;: Cette option&nbsp;permet au processeur de s\u2019endormir profond\u00e9ment lorsqu\u2019il est inactif. Sur un syst\u00e8me temps-r\u00e9el, au contraire on la d\u00e9sactivera, car l\u2019endormissement du processeur rallonge le temps de r\u00e9action aux interruptions.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>&nbsp;-&gt; General setup&nbsp; ---&gt;<br>&nbsp; &nbsp; -&gt;&nbsp;Timers subsystem&nbsp; ---&gt;<br>&nbsp; &nbsp; &nbsp; -&gt;&nbsp;Timer tick handling ( ... )&nbsp; ---&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<strong>(X) Full dynticks system (tickless)<\/strong><\/code><\/code><\/pre>\n\n\n\n<p><strong>CPU frequency scaling<\/strong>&nbsp;:&nbsp;La mise \u00e0 l&rsquo;\u00e9chelle de la fr\u00e9quence du CPU&nbsp;aide \u00e0 \u00e9conomiser de l&rsquo;\u00e9nergie en ralentissant le CPU lorsque la charge est faible et en l&rsquo;acc\u00e9l\u00e9rant \u00e0 nouveau lorsque la charge augmente. Cela peut avoir un impact sur les performances du syst\u00e8me, car l&rsquo;augmentation de la fr\u00e9quence du CPU en r\u00e9ponse \u00e0 une charge syst\u00e8me plus \u00e9lev\u00e9e ne se produit pas instantan\u00e9ment.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>&nbsp;-&gt; Power management and ACPI options&nbsp; ---&gt;<br>&nbsp; &nbsp; -&gt;&nbsp;CPU Frequency scaling&nbsp; ---&gt;<br>&nbsp; &nbsp; &nbsp;&nbsp;<strong>&#91;*] CPU Frequency scaling<\/strong><br>&nbsp; &nbsp; &nbsp; -&gt;&nbsp;Default CPUFreq governor ( ... )&nbsp; ---&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<strong>(X) performance<\/strong><\/code><\/code><\/pre>\n\n\n\n<p>Une fois la configuration du noyau pr\u00eate,&nbsp;enregistrez (<strong>Save<\/strong>) et quittez (<strong>Exit<\/strong>) <strong>menuconfig<\/strong>.<\/p>\n\n\n\n<h2 id=\"Construction-du-noyau\">Construction du noyau<\/h2>\n\n\n\n<p>Nous allons maintenant construire le noyau, ce qui prendra un certain temps (20-40 minutes sur un processeur moderne).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>make clean<br>make -j `nproc` deb-pkg LOCALVERSION=-custom KDEB_PKGVERSION=$(make kernelversion)-1<\/code><\/p><\/blockquote>\n\n\n\n<p>Explications basiques :<\/p>\n\n\n\n<ul><li><strong>make clean<\/strong>\u00a0:\u00a0Nettoye\u00a0le code source.<\/li><li><strong>make deb-pkg<\/strong>\u00a0: Compile\u00a0en cr\u00e9ant\u00a0des paquets debian (.deb).<\/li><li><strong>-j `nproc`<\/strong>\u00a0: Facultatif. Prend le nombre de threads total de votre processeur (la compilation sera la plus rapide possible).<\/li><li><strong>LOCALVERSION=<\/strong>\u00a0: Facultatif. Donne le nom custom au noyau.\u00a0Vous pouvez utiliser votre propre nom.<\/li><li><strong>KDEB_PKGVERSION=<\/strong>\u00a0: Facultatif. Cet argument sert \u00e0 versionner le kernel\u00a0(soit version 1).<\/li><\/ul>\n\n\n\n<h2 id=\"Installation-du-noyau-modifi\u00e9\">Installation du noyau modifi\u00e9<\/h2>\n\n\n\n<p>Une fois la construction termin\u00e9e, v\u00e9rifiez les paquets Debian.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>ls ..\/*.deb<\/code><\/p><\/blockquote>\n\n\n\n<p><strong>Make deb-pkg<\/strong> g\u00e9n\u00e9rera jusqu&rsquo;\u00e0 5 paquets Debian :<\/p>\n\n\n\n<ul><li><strong>linux-headers-&lt;version>.deb<\/strong>\u00a0: Qui contient les fichiers d&rsquo;en-t\u00eate n\u00e9cessaires \u00e0 la compilation modules externes.<\/li><li><strong>linux-image-&lt;version>.deb<\/strong>\u00a0: Qui contient l&rsquo;image du noyau et les modules associ\u00e9s.<\/li><li><strong>linux-image-&lt;version>-dbg.deb<\/strong>\u00a0:\u00a0Qui contient les symboles de d\u00e9bogage pour l&rsquo;image du noyau et ses modules.<\/li><li><strong>linux-libc-dev_&lt;version>.deb<\/strong>\u00a0:\u00a0Qui contient des en-t\u00eates pour certaines biblioth\u00e8ques de l&rsquo;espace utilisateur comme GNU glibc.<\/li><li><strong>linux-firmware-image-&lt;version>.deb<\/strong>\u00a0:\u00a0Qui contient les fichiers de firmware n\u00e9cessaires \u00e0 certains pilotes (ce paquet peut \u00eatre manquant lorsque vous compilez \u00e0 partir des sources du noyau fournies par Debian).<\/li><\/ul>\n\n\n\n<p>Ensuite, il faut installer&nbsp;tous les paquets Debian du noyau.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>dpkg -i ..\/*.deb<\/code><\/p><\/blockquote>\n\n\n\n<p>Maintenant que le&nbsp;nouveau noyau&nbsp;est install\u00e9, red\u00e9marrez le syst\u00e8me.&nbsp;Une fois que votre syst\u00e8me a red\u00e9marr\u00e9, votre nouveau noyau devrait \u00eatre en cours d&rsquo;ex\u00e9cution.&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>reboot<\/code><\/p><\/blockquote>\n\n\n\n<p>Pour v\u00e9rifier&nbsp;la nouvelle version patch\u00e9&nbsp;du noyau.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>uname -a<\/code><\/p><\/blockquote>\n\n\n\n<p>Le&nbsp;noyau de votre distribution Debian est maintenant temps r\u00e9el (<strong>PREEMPT RT)<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le noyau Linux est le c\u0153ur d\u2019un syst\u00e8me d\u2019exploitation de type UNIX. Principalement \u00e9crit en C, il assure la gestion des ressources mat\u00e9rielles et fournit aux programmes une interface pour y acc\u00e9der. Il prend aussi en charge l\u2019amor\u00e7age du syst\u00e8me.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[18,17],"_links":{"self":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts\/327"}],"collection":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/comments?post=327"}],"version-history":[{"count":10,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts\/327\/revisions"}],"predecessor-version":[{"id":401,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts\/327\/revisions\/401"}],"wp:attachment":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/media?parent=327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/categories?post=327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/tags?post=327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}