Skip to topic | Skip to bottom
Home
Minfo
Minfo.Tp2r1.4 - 16 Sep 2007 - 19:29 - NicolasNobelistopic end

Start of topic | Skip to actions

Avant propos

Essayez de vous placer sur le même poste que celui utilisé pendant le premier TD. En effet, /tmp et /var/tmp ne sont pas effacés d'une semaine à l'autre : vous pourrez ainsi conserver vos images QEMU.

Rappels TP précédent

1. Si vous n'avez pas qemu et qemu-img installés, exécutez la commande ln -s ~cg052805/bin/qemu{,-img} ~/bin/.

2. Si vous n'avez pas les images de la machine virtuelle, exécutez les commandes suivantes :

Image principale : cd /var/tmp/ && wget http://www-sop.inria.fr/oasis/personnel/Guillaume.Chazarain/TPLinux/centos-3.8.bz2 && bunzip2 centos-3.8.bz2
Image COW : cd /var/tmp/ && qemu-img create -b centos-3.8 -f qcow centos-3.8-COW (vous pouvez également utiliser le script situé sur ~cg052805/bin/newimage)

Pour des raisons de performances (NFS), les images doivent toujours se trouver dans /var/tmp/.

3. Pour simplifier l'accès à votre compte dans la machine virtuelle, exécutez la commande ln -s ~cg052805/bin/myqemu ~/bin/. Lancez ensuite qemu en utilisant la commande myqemu (myqemu /var/tmp/centos-3.8-COW). Vous n'aurez plus qu'à exécuter /mount_account dans la machine virtuelle, répondre yes puis entrer votre mot de passe et votre compte sera visible sous /home/$LOGIN.

HELP Astuce1 : pour obtenir plusieurs terminaux sous QEmu, utilisez les combinaisons de touche ALT + <- (flèche gauche) ou ALT + -> (flèche droite).

HELP Astuce2 : vous aurez souvent besoin de passer root dans la machine virtuelle au cours de ce TP. Ajoutez l'utilisateur tplinux comme sudoers en ajoutant au fichier /etc/sudoers la ligne tplinux ALL=NOPASSWD: ALL. Dorénavant pour lancer une commande en tant que root, il vous suffira de la préfixer du mot-clé sudo.

Paramètres et version d'un module

1. Créez un module asy_tp2_param qui accepte en paramètre un entier n et une chaîne de caractères text, et faites en sorte qu'il affiche n fois la chaîne de caractères lors de son chargement dans le noyau. Testez ce module.

2. Faites en sorte que le module précédent se charge à l'aide de la commande modprobe. Quand vous avez trouvé les opérations qui le permettent, ajoutez une cible install à votre makefile de façon à automatiser la procédure.

3. Modifiez la configuration du système de sorte que, lors de son chargement avec la commande modprobe, le module ne soit plus chargé avec les valeurs par défaut de ses paramètres, mais avec d'autres valeurs fixées par le système. Et testez que tout cela fonctionne correctement.

HELP Astuce : la commande depmod -a -e vous affichera un warning, car certains symboles ne seront pas trouvés. Vous pourrez remédier à ce problème en indiquant quel fichier System.map (contenant ces symboles) utiliser : depmod -a -e -F /boot/System.map.

4. Ajoutez au module précédent les instructions qui lui interdisent de se charger si la version du noyau est inférieure à 2.4.30 et testez qu'il refuse bien de se charger. Modifiez-le maintenant pour qu'il ne se charge que si le noyau est un noyau 2.4.

5. Complétez-le maintenant avec ce qu'il faut pour que la commande modinfo retourne des informations utiles à propos de votre module.

Dépendances entre modules

1. Créez un module hello.o qui :

  • Affiche son nom lors de son chargement
  • Affiche son nom lors de son déchargement
  • Offre un service print_hello() qui consiste à afficher la chaîne "Hello, "

2. Créez un module world.o qui :

  • est dépendant du module hello.o
  • lors de son chargement :
    • affiche son nom
    • utilise le service print_hello()
    • affiche "world !"
  • lors de son déchargement : * affiche son nom

3. Installez les modules précédents de telle manière que le chargement du second provoque automatique le chargement du premier. Et vérifiez que cela fonctionne bien.

4. Ajoutez deux services (start et stop) au module hello, l'un permettant d'augmenter son compteur de référence, et l'autre de le diminuer. Créez ensuite deux modules supplémentaires starter.o et stopper.o, qui font chacun appel à l'un des deux services précédents. Vous vérifierez ensuite que pour que le module hello.o puisse être déchargé, il faut avoir chargé puis déchargé autant de fois le module starter.o que le module stopper.o :

  • Exemple de séquence sans échec :
modprobe hello.o
modprobe starter.o
modprobe stopper.o
modprobe -r hello.o starter.o stopper.o
  • Exemple de séquence qui doit échouer :
modprobe hello.o
modprobe starter.o
modprobe -r hello.o starter.o

HELP Astuce : vous pouvez voir l'état du compteur d'utilisation d'un module grâce à la troisième colonne de la commande lsmod.

Afficher la liste des modules

Ecrivez un module lsmod.o qui affiche la liste de tous les modules chargés dans le noyau. Attention comme expliqué en cours, pour écrire ce module vous aurez besoin d'un symbole du noyau qui n'est pas directement accessible à partir d'un module : module_list. Comme il n'est pas question pour l'instant de modifier le noyau, vous opterez pour la méthode "sale" présentée en cours (recherche du symbole dans le fichier System.map ). Les plus courageux d'entre-vous pourront chercher une solution afin d'automatiser la récupération de ce symbole lors de la compilation, à l'aide du makefile.

-- NicolasNobelis - 16 Sep 2007
to top


You are here: Minfo > ApprofondissementSysteme > Tp2

to top

Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback