Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HowTo] Charger des modules différents selon le kernel
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
yaubi
Apprentice
Apprentice


Joined: 15 Jan 2003
Posts: 194
Location: Oxford, UK

PostPosted: Tue Mar 16, 2004 5:30 pm    Post subject: [HowTo] Charger des modules différents selon le kernel Reply with quote

Bonjour à tous,

La question de Gnafron (http://forums.gentoo.org/viewtopic.php?t=149726) m'a rappelé qu'il y a quelques mois je jonglais avec une bonne dixaine de noyaux, de différentes versions, différentes branches, différentes configurations. J'avais besoin de tester un module kernel en béta dans de multiples environnements.

Le problème qui frappe instantanément est celui du chargement des modules au démarrage. Certes, on peut les charger à la main, mais c'est fastidieux, et puis surtout il y a un service pour faire ça automatiquement, j'ai nommé : /etc/init.d/modules.

Pour ceux qui ne sont pas sûr de la manière dont il fonctionne, c'est très simple : il regarde quelle est la version du kernel en cours de fonctionnement et charge les modules indiqués dans le fichier /etc/modules.autoload.d/kernel-VERSION.

La limitation de ce script vient du fait qu'il ne fait pas une distinction très détaillée entre les noyaux : tout au plus, il va différencier un 2.4 d'un 2.6. Ca serait quand même bien pratique qu'il puisse faire la différence entre :
- un 2.4.22 et un 2.4.24
- un 2.4.22-gentoo et un 2.4.22-ck
- un 2.4.22-gentoo-r6 et un 2.4.22-gentoo-r7
- un 2.4.22-gentoo-r6 #1 et un 2.4.22-gentoo-r6 #3
Dans le dernier exemple, le premier noyau correspond à la première compilation (#1) tandis que le deuxième correspond à la troisième (#3). On peut connaître le numéro de compilation en faisant : uname -rv

J'ai donc modifié un peu le script /etc/init.d/modules pour qu'il prenne en compte ces différences, à chaque niveau. Voir le patch en fin de post.

Ainsi, le fichier /etc/modules.autoload.d/kernel-2.4.22-gentoo-r6#3 listera les modules à charger pour le noyau du même nom. Pour simplifier la tâche, j'ai prévu qu'on ne soit pas forcément obliger de nommer ce fichier de manière aussi précise. On peut se limiter à /etc/modules.autoload.d/kernel-2.4.22, auquel cas la liste des modules qu'il contient sera chargée pour tous les noyau 2.4.22 qui n'ont pas leur propre fichier. En fait, on peut choisir le niveau de détection : depuis 2.4 jusqu'à 2.4.22-gentoo-r7#1 (voir les exemples plus haut).

Voilà, c'était mon défi du jour :)
J'espère que ça servira à quelqu'un.
Sur ce, bonnes vacances ! (enfin pour moi, c'est les vacances, en France je ne sais pas)

Yoann

PJ: Voici mon patch :

Code:
--- ./modules   2004-03-16 16:31:54.000000000 +0000
+++ /etc/init.d/modules 2004-03-16 17:11:55.000000000 +0000
@@ -94,22 +94,35 @@
                # Loop over every line in /etc/modules.autoload.
                load_modules /etc/modules.autoload
        else
-               local KV="$(uname -r)"
-               local KV_MAJOR="`KV_major "${KV}"`"
-               local KV_MINOR="`KV_minor "${KV}"`"
-
+               local KV_build=$(uname -rv | cut -d' ' -f1,2 | sed 's/ //')
+               local KV_release=$(echo ${KV_build} | cut -d'#' -f1)
+               local KV_branch=$(echo ${KV_release} | cut -d'-' -f1,2)
+               local KV_micro=$(echo ${KV_branch} | cut -d'-' -f1)
+               local KV_minor=$(echo ${KV_micro} | cut -d'.' -f1,2)
+
                # New support for /etc/modules.autoload/kernel-$KV
-               if [ "$(get_KV)" -ge "$(KV_to_int '2.5.48')" ] && \
-                  [ -f /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}" ]
+                if [ -e /etc/modules.autoload.d/kernel-${KV_build} ]
                then
-                       load_modules /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}"
-
-               elif [ ! -f /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}" ]
+                  load_modules /etc/modules.autoload.d/kernel-${KV_build}
+
+               elif [ -e /etc/modules.autoload.d/kernel-${KV_release} ]
                then
-                       ewarn "Missing /etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
-                       load_modules /etc/modules.autoload.d/kernel-2.4
-               else
-                       load_modules /etc/modules.autoload.d/kernel-2.4
+                  load_modules /etc/modules.autoload.d/kernel-${KV_release}
+
+               elif [ -e /etc/modules.autoload.d/kernel-${KV_branch} ]
+               then
+                  load_modules /etc/modules.autoload.d/kernel-${KV_branch}
+
+               elif [ -e /etc/modules.autoload.d/kernel-${KV_micro} ]
+               then
+                  load_modules /etc/modules.autoload.d/kernel-${KV_micro}
+
+               elif [ -e /etc/modules.autoload.d/kernel-${KV_minor} ]
+               then
+                  load_modules /etc/modules.autoload.d/kernel-${KV_minor}
+
+                else
+                  ewarn "Missing /etc/modules.autoload.d/kernel-${KV_build}"
                fi
        fi
 
Back to top
View user's profile Send private message
anigel
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 1880
Location: Un petit bled pas loin de Limoges ;-)

PostPosted: Wed Mar 17, 2004 11:09 am    Post subject: Reply with quote

Excellente idée !

Tu as pensé à soumettre ton travail pour l'incorporer dans la distrib ? J'avais moi aussi bricolé un truc similaire il y a quelques mois, mais je n'avais jamais pensé à le diffuser.

M'est d'avis qu'on doit pas être juste 2 tordus à avoir l'usage d'un tel patch ?
_________________
Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres.
Back to top
View user's profile Send private message
Duncan117
n00b
n00b


Joined: 27 Feb 2004
Posts: 31

PostPosted: Wed Mar 17, 2004 12:17 pm    Post subject: Reply with quote

Merci beaucoup Yoann ! 8)

Effectivement anigel, vous ne devez pas être que 2 tordus :lol: à utiliser un tel patch. En fait, si je n'utilisais pas beaucoup ce mécanisme, c'est parce qu'il n'était pas aussi souple que vous venez de le rendre.

Merci encore. Trés pratique maintenant et je n'aurais aucune excuse de ne pas l'utiliser. :wink:
Back to top
View user's profile Send private message
DomiX
Apprentice
Apprentice


Joined: 26 Oct 2003
Posts: 209
Location: Paris (FRANCE)

PostPosted: Wed Mar 17, 2004 3:22 pm    Post subject: Reply with quote

Bonjour

Ce patch m'intéresse mais comment l'appliquer ? :oops: :roll:

A+
_________________
"La connaissance technique ne suffit pas. On doit surpasser les techniques de sorte que l'art devienne un art sans artifice qui apparaît de l'inconscient."

- Daisetsu Suzuki (1870-1966) -
Back to top
View user's profile Send private message
yaubi
Apprentice
Apprentice


Joined: 15 Jan 2003
Posts: 194
Location: Oxford, UK

PostPosted: Wed Mar 17, 2004 10:39 pm    Post subject: Reply with quote

anigel wrote:
Excellente idée !

Merci, merci, tu es trop bon ... :)

anigel wrote:
Tu as pensé à soumettre ton travail pour l'incorporer dans la distrib ?


Non, je n'ai pas soumis mon travail pour l'incorporer dans la distrib'. Ca n'est pas encore suffisament testé pour en prétendre quelque chose, à mon avis. Et puis je ne pense pas que ce soit une solution robuste, c'est juste une bidouille faite à la va-vite. D'ailleurs, je viens de me rendre compte aujourd'hui que mon patch ne gère pas le cas des Release Candidate (par ex: 2.4.26-rc3-gentoo). Et comme j'ai la flemme de le modifier ...

Mais bon, rien n'empèche l'un de vous de le reprendre, éventuellement le modifier, et soumettre un rapport de bug à l'équipe de développement :)

Yoann
Back to top
View user's profile Send private message
yaubi
Apprentice
Apprentice


Joined: 15 Jan 2003
Posts: 194
Location: Oxford, UK

PostPosted: Wed Mar 17, 2004 10:45 pm    Post subject: Reply with quote

DomiX wrote:
Bonjour
Ce patch m'intéresse mais comment l'appliquer ? :oops: :roll:
A+


Bonjour Domix.

Pour appliquer ce patch, rien de plus simple :
- copie/colle le patch dans un fichier qu'on appellera modules.patch, par exemple
- exécute la commande patch -p0 < modules.patch en tant que root
et voila !

Tu n'as plus qu'à créer, dans /etc/modules.autoload.d/, un fichier au nom de ton noyau (voir mon premier post), contenant les modules que tu veux charger au démarrage de ce noyau.

Have Fun !
Yoann
Back to top
View user's profile Send private message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Thu Mar 18, 2004 9:47 am    Post subject: Reply with quote

Je trouve aussi l'idée excellente, merci yaubi. Je te conseille de bugziller la chose rapidement, même si tu ne la trouves pas parfaite, parceque de toute façon c'est le genre de truc qui prennent toujours du temps à être acceptés. Ça permettra aux devs de commencer à réfléchir sur le principe, c'est toujours ça de gagné, voir de corriger aux même les imperfections que tu auras listées.
Back to top
View user's profile Send private message
yaubi
Apprentice
Apprentice


Joined: 15 Jan 2003
Posts: 194
Location: Oxford, UK

PostPosted: Fri Mar 19, 2004 12:11 am    Post subject: Reply with quote

TGL wrote:
Je te conseille de bugziller la chose rapidement


Oui, Ôh grand modérateur, oui ! :)

Bon, c'est chose faite. Et comme je suis un perfectioniste pointilleux (tout ça d'un seul coup), j'ai tout refait et de manière totalement différente. Du coup, maintenant, c'est du robuste et un plus c'est du joli :)

Pour les curieux : http://bugs.gentoo.org/show_bug.cgi?id=35872

Le code commenté :
Code:
                # New support for /etc/modules.autoload/kernel-$KV
 
                # The kernel version is stored in a question-mark field
                # separator format, like "2?4?26?rc3?gentoo?r2?1", where the
                # final 1 is the build number.
                #
                local KV=kernel-$(uname -rv | awk '{gsub("[.\\-#]","?"); print $1$2}')
 
                # This weird format acts here as a wilcard pattern. The
                # purpose is to find a file whose name is at least part of
                # our kernel version.
                #
                while [ ! $(ls /etc/modules.autoload.d/${KV} 2>/dev/null) ]
                do
                        # Let's drop the last field in the version number
                        # to check if the corresponding file exists
                        #
                        KV_reduced=$(echo ${KV} | awk '{sub("\\?[^\\?]*$",""); print}')
 
                        # If we tried all the possibilities unsucessfully,
                        # then fallback with the ligther name (hopefully the
                        # most general, like kernel-2.4) and print a warning.
                        #
                        if [ ${KV_reduced} == ${KV} ]
                        then
                                KV=$(ls -1 /etc/modules.autoload.d/ | awk '{if(!drop)print;drop++}')
                                ewarn "Missing /etc/modules.autoload.d/kernel-VERSION"
                                break
                        fi
 
                        KV=${KV_reduced}
                done

                # Now we have found the file with the closest name, we just
                # need to load the modules it lists. Note that if
                # /etc/modules.autoload.d/ is empty, KV is an empty string.
                #
                [ ${KV} ] && load_modules $(ls /etc/modules.autoload.d/${KV})



Le patch :

Code:
--- ./modules   2004-03-18 23:31:29.000000000 +0000
+++ /etc/init.d/modules 2004-03-18 23:48:50.000000000 +0000
@@ -92,25 +92,28 @@
        if [ -f /etc/modules.autoload -a ! -L /etc/modules.autoload ]
        then
                # Loop over every line in /etc/modules.autoload.
+               #
                load_modules /etc/modules.autoload
        else
-               local KV="$(uname -r)"
-               local KV_MAJOR="`KV_major "${KV}"`"
-               local KV_MINOR="`KV_minor "${KV}"`"
-
                # New support for /etc/modules.autoload/kernel-$KV
-               if [ "$(get_KV)" -ge "$(KV_to_int '2.5.48')" ] && \
-                  [ -f /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}" ]
-               then
-                       load_modules /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}"
+
+               local KV=kernel-$(uname -rv | awk '{gsub("[.\\-#]","?"); print $1$2}')
+
+                while [ ! $(ls /etc/modules.autoload.d/${KV} 2>/dev/null) ]
+               do
+                       KV_reduced=$(echo ${KV} | awk '{sub("\\?[^\\?]*$",""); print}')
+
+                       if [ ${KV_reduced} == ${KV} ]
+                       then
+                               KV=$(ls -1 /etc/modules.autoload.d/ | awk '{if(!drop)print;drop++}')
+                               ewarn "Missing /etc/modules.autoload.d/kernel-VERSION"
+                                break
+                       fi
 
-               elif [ ! -f /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}" ]
-               then
-                       ewarn "Missing /etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
-                       load_modules /etc/modules.autoload.d/kernel-2.4
-               else
-                       load_modules /etc/modules.autoload.d/kernel-2.4
-               fi
+                       KV=${KV_reduced}
+               done
+
+                [ ${KV} ] && load_modules $(ls /etc/modules.autoload.d/${KV})
        fi
 
        #


Pour ceux qui ont déja appliqué le premier patch, il faut le retirer avant d'appliquer celui-ci.

Il est maintenant temps pour moi d'aller me coucher, j'ai de la route à faire demain, je rentre en France. Vive les vacances !! :)

Yoann
Back to top
View user's profile Send private message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Fri Mar 19, 2004 1:11 am    Post subject: Reply with quote

yaubi wrote:
Oui, Ôh grand modérateur, oui ! :)
Mais heu, j'peux plus rien dire sans qu'on me traite de modéro, c'est lourd... :D

yaubi wrote:
http://bugs.gentoo.org/show_bug.cgi?id=35872
Je testerai en détail ce WE avant d'agrémenter ton bug d'un "chez moi ça marche et c'est utile". ;)

yaubi wrote:
Il est maintenant temps pour moi d'aller me coucher, j'ai de la route à faire demain, je rentre en France. Vive les vacances !! :)
Bon retour vers la vrai bouffe.
Back to top
View user's profile Send private message
yuk159
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1801
Location: noumea ,nouvelle-caledonie

PostPosted: Fri Mar 19, 2004 1:30 am    Post subject: Reply with quote

TGL wrote:
yaubi wrote:
Oui, Ôh grand modérateur, oui ! :)
Mais heu, j'peux plus rien dire sans qu'on me traite de modéro, c'est lourd... :D


C'est la rancon de la gloire ca :lol:

@Yaubi : je testerai aussi ton patch ce week-end, ca tombe bien parce qu'il faut que je teste les differents noyaux PPC, merci :D
_________________
The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
un blog de plus :)
Back to top
View user's profile Send private message
yuk159
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1801
Location: noumea ,nouvelle-caledonie

PostPosted: Sun Mar 21, 2004 9:16 am    Post subject: Reply with quote

J'ai malheureusement eu un onduleur qui a crame sur un des petits serveurs dont je m'occupe :( , donc je remets mes projets perso au week-end prochain ;)
_________________
The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
un blog de plus :)
Back to top
View user's profile Send private message
dioxmat
Bodhisattva
Bodhisattva


Joined: 04 May 2002
Posts: 709
Location: /home/mat

PostPosted: Sun Mar 21, 2004 11:55 am    Post subject: Reply with quote

TGL wrote:
yaubi wrote:
Oui, Ôh grand modérateur, oui ! :)
Mais heu, j'peux plus rien dire sans qu'on me traite de modéro, c'est lourd... :D


Niark ya pas de raison pour que je sois le seul a subir ca :)
_________________
mat
Back to top
View user's profile Send private message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Sun Mar 21, 2004 12:02 pm    Post subject: Reply with quote

dioxmat wrote:
Niark ya pas de raison pour que je sois le seul a subir ca :)

Alors là, un message aussi futile, je trouve ça vraiment déplacé de la part d'un modéro... :Þ
Back to top
View user's profile Send private message
dioxmat
Bodhisattva
Bodhisattva


Joined: 04 May 2002
Posts: 709
Location: /home/mat

PostPosted: Sun Mar 21, 2004 12:15 pm    Post subject: Reply with quote

TGL wrote:
dioxmat wrote:
Niark ya pas de raison pour que je sois le seul a subir ca :)

Alors là, un message aussi futile, je trouve ça vraiment déplacé de la part d'un modéro... :Þ


Entierement d'accord :)

<inserez ici un message pour rester dans le sujet du thread>
_________________
mat
Back to top
View user's profile Send private message
yuk159
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1801
Location: noumea ,nouvelle-caledonie

PostPosted: Sun Mar 21, 2004 4:21 pm    Post subject: Reply with quote

Mort de rire :lol: :lol: :lol: les moderos qui troll entre eux maintenant :lol:
_________________
The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
un blog de plus :)
Back to top
View user's profile Send private message
**ironman**
n00b
n00b


Joined: 15 Jul 2004
Posts: 63
Location: Paris, France

PostPosted: Tue Nov 01, 2005 1:53 pm    Post subject: Reply with quote

Bonjour,

J'aimerais me servir du patch de Yaubi, le problème est quand je l'exécute j'obtiens l'erreur suivante :
Code:
 # patch -p0 < modules.patch
patching file /etc/init.d/modules
Hunk #1 FAILED at 92.
1 out of 1 hunk FAILED -- saving rejects to file /etc/init.d/modules.rej


Faut-il placer le patch dans un répertoire spécifique ?

Faut-il l'exécuter depuis un répertoire spécifique ?

Merci pour votre aide.
_________________
** IronMan **
Back to top
View user's profile Send private message
billiob
Guru
Guru


Joined: 30 Dec 2004
Posts: 425
Location: Paris, France

PostPosted: Tue Nov 01, 2005 3:43 pm    Post subject: Reply with quote

Ce patch n'est pas déja inclus dans portage ??
Ceci ressemble étrangement : (pris de /etc/init.d/modules)
Code:
 for x in "${KV}" ${KV_MAJOR}.${KV_MINOR}.${KV_MICRO} ${KV_MAJOR}.${KV_MINOR} ; do
                        if [[ -f /etc/modules.autoload.d/kernel-"${x}" ]] ; then
                                autoload="/etc/modules.autoload.d/kernel-${x}"
                                break
                        fi
                done

_________________
billiob
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum