[Lxr-commits] CVS: html/fr/Tips tipgrub2.shtml,NONE,1.1
Brought to you by:
ajlittoz
From: Andre-Littoz <ajl...@us...> - 2014-01-18 10:02:50
|
Update of /cvsroot/lxr/html/fr/Tips In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv26025/fr/Tips Added Files: tipgrub2.shtml Log Message: */Tips/tipgrub2.shtml: new tip for GRUB2 source-tree configuration as an example of a simple 'maps' parameter --- NEW FILE: tipgrub2.shtml --- <!--#set var="pageLang" value="fr" --> <!--#set var="pageMetaTitle" value="Configuration de LXR pour GRUB2" --> <!--#set var="pageHeaderTitle" value="Configuration de LXR pour le chargeur GRUB2" --> <!--#set var="homePageHeader" value="0" --> <!--#include virtual="/backstore5/header.shtml" --> <!-- $Id: tipgrub2.shtml,v 1.1 2014/01/18 10:02:47 ajlittoz Exp $ --> <section> <p class="comment"> Pour bien comprendre cette astuce, lisez d'abord <a href="/<!--#echo var="langPrefix" -->LxrConf/lxrconfinclude.shtml">comment établir les chemins d'inclusion</a>, <a href="/<!--#echo var="langPrefix" -->LxrConf/lxrconfcondvars.shtml">comment définir des variables conditionnelles</a> et <a href="/<!--#echo var="langPrefix" -->LxrConf/lxrconfmaps.shtml">comment réécrire dynamiquement des chemins de fichier</a>. </p> <section> <h1>Liens d'inclusion habituels</h1> <p class="normal"> Le chargeur de démarrage GRUB2 a été porté sur de nombreuses architectures informatiques pour offrir un moyen uniforme de choisir et démarrer un OS. Toutefois, il n'existe qu'un arbre source englobant toutes les "machines" et "modes" possibles. </p> <p class="normal"> L'arbre source a une organisation plus simple que celui du noyau Linux, car le seul objectif est de démarrer la machine sans s'occuper de fonctions évoluées comme le <em>multi-threading</em>, le lancement de processus ou la synchronisation. </p> <p class="normal"> Mais, l'essentiel de l'initialisation matérielle doit être faite en assembleur et ce code ne peut pas être commun aux diverses architectures. Ceci amène "naturellement" à séparer les fichiers liés au matériel dans des sous-répertoires de presque tous les répertoires principaux. </p> <p class="normal"> Le répertoire <em>include/</em> contient à la fois les fichiers de définition <em>universels</em> et les fichiers spécifiques d'un matériel. Ces derniers sont rangés dans des sous-répertoires portant le nom de l'architecture. </p> <p class="normal"> Un fichier source typique commence par: </p> <pre class="example"> #include <grub/loader.h> #include <grub/command.h> #include <grub/multiboot.h> </pre> <p class="normal"> Comme on le voit, le répertoire <em>include/</em> est implicite. Son emplacement est passé au compilateur par une option. Nous devons donc imiter cela pour permettre la construction d'hyperlien sous les directives <code>#include</code>. C'est possible par le recours à un paramètre <code>'incprefix'</code> dans <em>lxr.conf</em>: </p> <div class="boxed"> <pre class="example"> , 'incprefix' => [ '/include' ] </pre> </div> <p class="comment"> <span class="caution">BUG!</span> Certains fichiers sont incorrectement rédigés et <code>grub/</code> manque dans l'argument de la directive <code>#include</code>. Pour obtenir quand même l'hyperlien, il suffit d'augmenter <code>'incprefix'</code> avec: </p> <pre class="example"> , 'incprefix' => [ '/include', '/include/grub' ] </pre> <p class="normal"> Des fichiers de définition globale résident aussi à la racine de l'arbre, comme <em>config.h</em>. Le paramètre <code>'incprefix'</code> complet devient: </p> <div class="boxed"> <pre class="example"> , 'incprefix' => [ '/include', '/', '/include/grub' ] </pre> </div> </section> <section> <h1>Liens d'architecture</h1> <p class="normal"> Les parties spécifiques d'un matériel sont rangées dans leur propre sous-répertoire (<em>i386/</em>, <em>ia64/</em>, <em>powerpc/</em>, <em>x86_64/</em>, …). But these parts are not directly <code>#include</code>d by the architecture-independent code. IMais, ces parties ne sont pas directement incluses par le code indépendant de l'architecture. Au lieu de cela, la directive est écrite <code>#include <grub/cpu/...></code> comme dans l'exemple suivant: </p> <pre class="example"> #include <grub/cpu/multiboot.h> #include <grub/cpu/relocator.h> </pre> <p class="normal"> Le répertoire abstrait <em>cpu/</em> est associé à un répertoire d'architecture réel par le système de gestion de configuration à travers la spécification d'une option au compilateur. Si nous sommes intéressés par l'architecture <em>mips</em>, nous ne pouvons pas modifier le <code>'incprefix'</code> ci-dessus car il faut substituer dynamiquement <code>mips</code> à <code>cpu</code>. </p> <p class="normal"> Cette réécriture est accomplie par la fonction <code>'maps'</code> avec substitution de variable. </p> <p class="normal"> D'abord, nous créons une variable dont la valeur sera l'architecture cible (ou plutôt, le nom du sous-répertoire pour l'architecture). Appelons-la <code>'a'</code> pour <em>architecture</em>: </p> <div class="boxed"> <pre class="example"> , 'variables' => { 'v' => { … } # Variable de version (obligatoire) , 'a' => { 'name' => 'Architecture' , 'range' => [ qw(i386 ia64 mips powerpc sparc64 x86_64) ] , 'default' => 'x86_64' } } </pre> <p class="comment"> Le contenu de <code>'range'</code> est déterminé d'après les noms des sous-répertoires dans <em>include/grub/</em>. Il y en a un nombre limité, ce n'est donc pas insurmontable. </p> </div> <p class="normal indent"> Quand LXR est lancé, cette variable est affichée dans l'en-tête de la page. Sélectionnez l'architecture cible et cliquez sur le bouton <em>Change</em> pour modifier la variable. </p> <p class="normal"> Ensuite, une règle de réécriture de chemin doit être appliquée juste avant le test d'existence du fichier avec la valeur de la variable en paramètre: </p> <div class="boxed"> <pre class="example"> , 'maps' => [ '^/include/grub/cpu/' => '/include/grub/$a/' ] </pre> </div> </section> <section> <h1>Liens d'environnement</h1> <p class="normal"> <em>GRUB2</em> peut être utiliser non seulement pour démarrer un matériel physique mais aussi une machine virtuelle ou un contexte multi-OS. Ceci introduit des variations subtiles dans le processus de démarrage. Ces variantes sont incluses avec des directives comme: </p> <pre class="example"> #include <grub/machine/memory.h> #include <grub/machine/kernel.h> </pre> <p class="normal"> Les fichiers de définition associés se trouvent dans un sous-répertoire du répertoire matériel spécifique. Il est facile de gérer le nouveau chemin virtuel avec une autre règle <code>'maps'</code>. </p> <p class="normal"> De nouveau, nous créons une variable dont la valeur sera l'environnement sélectionné (ou plutôt, le nom du sous-répertoire pour l'environnement). Appelons-la <code>'m'</code> pour <em>mode</em>: </p> <div class="boxed"> <pre class="example"> , 'variables' => { 'v' => { … } # Variable de version (obligatoire) , 'a' => { … } # Variable d'architecture , 'm' => { 'name' => 'Mode' , 'range' => [ qw(coreboot multiboot qemu pc) ] , 'default' => 'pc' } } </pre> <p class="comment"> Le contenu de <code>'range'</code> est encore renseigné d'après les noms des sous-répertoires dans <em>include/grub/</em>architecture<em>/</em>. </p> </div> <p class="normal"> La nouvelle règle de réécriture est aussi simple que la première: </p> <div class="boxed"> <pre class="example"> , 'maps' => [ … , '^/include/grub/machine/' => '/include/grub/$a/$m/' ] </pre> </div> </section> <section> <h1>Résumé</h1> <p class="normal"> Après configuration standard, le fichier <em>lxr.conf</em> n'a besoin d'être augmenté qu'en trois endroits: </p> <ul> <li class="normal">Définition de variable <div class="boxed"> <pre class="example"> , 'variables' => { 'v' => { … } # Variable de version (obligatoire) , 'a' => { 'name' => 'Architecture' , 'range' => [ qw(i386 ia64 mips powerpc sparc64 x86_64) ] , 'default' => 'x86_64' } , 'm' => { 'name' => 'Mode' , 'range' => [ qw(coreboot multiboot qemu pc) ] , 'default' => 'pc' } } </pre> </div> </li> <li class="normal">Répertoires à inclure <div class="boxed"> <pre class="example"> , 'incprefix' => [ '/include', '/', '/include/grub' ] </pre> </div> </li> <li class="normal">Règles de réécriture <div class="boxed"> <pre class="example"> , 'maps' => [ '^/include/grub/machine/' => '/include/grub/$a/$m/' , '^/include/grub/cpu/' => '/include/grub/$a/' ] </pre> </div> </li> </ul> </section> </section> <!--#include virtual="/backstore5/footer.shtml" --> |