[Fédora] .ko et module

Résolu/Fermé
skarsnick Messages postés 79 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 17 décembre 2009 - 26 mars 2007 à 10:16
 cb - 18 avril 2008 à 20:25
Bonjour,
j'ai vu dans un makefile la création d'un .ko dans le but de transformer un script en C en un module (que l'on peut gérer avec rmmod, insmod, modprobe...)
Le fichier C fait une action toutes les secondes, et j'aimerai pouvoir l'arrêter et le relancer à la manière d'un module

Je vous quote le passage du make file pour ce qui arriveront à le comprendre:

Dir $(MAKE) -C /lib/module/'uname-r'/build SUBDIRS='pwd' modules cp *.ko Dir/

Je débute en lunix, je ne comprend pas bien ce bout de code.

J'espère que vous pourrez m'aider
Merci

4 réponses

mamiemando Messages postés 33433 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 décembre 2024 7 809
26 mars 2007 à 16:35
Bon alors déjà le C n'est pas un script car c'est compilé et pas interprété. Concrètement ça veut dire que le code source est lu par un compilateur qui génère un exécutable et le programme en lui même est dès lors complètement indépendant du code source (contrairement par exemple à un script shell).

Ensuite un .ko est en fait un module, c'est à dire un morceau de kernel que l'on peut charger ou décharger a priori à volonté (voir les commandes modprobe, insmod, rmmod, et lsmod). Vois un module comme un driver (par exemple tu peux avoir un module qui sert à controler ta carte wifi, un autre le "bip" de ta carte mère etc...). Chaque module ne peut être chargé que si ça version correspond à celle du noyau sur lequel tu as démarré. Pour voir ta version de kernel :
uname -a

Exemple :
(mando@cobo) (~) $ uname -a
Linux cobo 2.6.15-1-686-smp #2 SMP Mon Mar 6 15:34:50 UTC 2006 i686 GNU/Linux

Celà signifie que là je ne peux charger que des noyaux pour un noyau 2.6.15-1-686-smp. Les modules correspondants sont dans /lib/modules/2.6.15-1-686-smp/

Quand tu utilises la commande modprobe (qui sert à charger un module), il va automatiquement piocher dans le répertoire associé à ton noyau, contrairement à la commande insmod. Tu peux ensuite vérifier que le module est chargé correctement avec la commande
lsmod

Pour plus d'informations tape dans une console :
man rmmod
man lsmod
man modprobe
man insmod

Enfin la ligne dont tu parles dans le makefile sert uniquement à créer les .ko dans le bon répertoire lors de la compilation. Bien sûr la compilation, l'insertion, la suppression de module ne peuvent être faits qu'en root.

Bonne chance
1
Bonjour,
j'écris un script pour insérer automatiquement le fichier driver (insmod *.ko) mais avant ça, je voulais créer un test pour voir si celui-ci existe déjà afin d'éviter le message "déjà existant...". Cependant, je n'arrive pas à faire ce test avec lsmod...
Si vous avez une idée pour compléter mon script... car google n'est pas mon ami sur ce coup là :(

#!/bin/sh
echo -n "Nom du driver"
read Name

if # A compléter pour tester si le driver est déjà inséré
then
echo "Driver déjà inséré"
else
echo "Insertion du driver"
insmod c Name 250 0
fi
0
mamiemando Messages postés 33433 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 décembre 2024 7 809
7 avril 2008 à 16:23
if [ `lsmod | grep nom_du_module | wc -l` -ge 1 ] ; then echo "déjà inséré"; fi

Bonne chance
0
Je n'étais vraiment pas loin au apostrophes près :( j'ai du mal avec les " et les ', il faudra que je révise tout ça...
Sinon, j'ai remarqué que lorsqu'on insère un fichier mon_module-driver.ko, il apparait sous la forme mon_module_driver dans le lsmod, donc en adaptant légèrement, ça marche nickel !
Un grand merci à toi ;)
0
mamiemando Messages postés 33433 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 décembre 2024 7 809
14 avril 2008 à 10:49
Les " ... " et les ' ... ' c'est pareil. L'avantage c'est des "..." c'est qu'on peut mettre des ' dans la chaîne entre "..." sans avoir à taper \'.

Par contre les ` ... ` ça veut dire tout autre chose : ça signifie récupérer le résultat de la commande entre ` ... `

Bonne continuation
0
Merci pour les infos. J'ai fini le script et ça marche tip top.
La manipulation des chaînes se fait vraiment bien, y a des commandes très sympa qui font ça en une commande (pour le test, il fallait remplacer le "-driver.ko" par "_driver", rien de méchant ^^)
Merci pour ton aide
0