Tout sur la commande Linux/Unix: modprobe

Les Noyau Linux est devenu un gros logiciel. À certains égards, c'est une bonne chose. Dans d'autres, cela le rend quelque peu rigide. La solution est de diviser des parties du noyau en modules. Ces modules peuvent être chargés ou non, selon la configuration de l'ordinateur et vos besoins. La commande modprobe charge de nouveaux modules de noyau sur un système Linux, vous permettant d'activer de nouvelles fonctionnalités et une prise en charge sans redémarrage.

Portrait de jeune architecte utilisant un ordinateur portable dans un bureau
Westend61 / Getty Images

Utilisation de Modprobe

Modprobe est généralement simple à utiliser. Une fois que vous connaissez le module du noyau que vous souhaitez charger, transmettez-le à la commande modprobe.

sudo modprobe rtl8723de

C'est tout ce qu'on peut en dire. Le module est chargé jusqu'à ce que vous redémarriez votre système.

Si vous souhaitez supprimer un module sans redémarrer, relancez la commande avec le -r drapeau.

sudo modprobe -r rtl8723de

Pour la plupart, c'est ainsi que vous travaillerez avec modprobe. Pour en savoir plus, consultez la documentation technique ci-dessous.

Documentation technique Modprobe

La commande modprobe effectue une gestion de haut niveau des modules chargeables.

Synopsis

sonde de modulation [-adnqv] [-C configuration] module [symbole=valeur ...] sonde de modulation [-adnqv] [-C configuration] [-t taper] modèle sonde de modulation -l [-C configuration] [-t taper] modèle sonde de modulation -c [-C configurationsonde de modulation -r [-dnv] [-C configuration] [module ...] sonde de modulation -Vh.

Options

-une, --tous

Chargez tous les modules correspondants au lieu de vous arrêter après le premier chargement réussi.

-c, --showconfig

Affiche la configuration actuellement utilisée.

-C, --configconfiguration

Utiliser le fichier configuration au lieu de (l'optionnel) /etc/modules.conf pour spécifier la configuration. La variable d'environnement MODULECONF peut également être utilisé pour sélectionner (et remplacer) un fichier de configuration différent de celui par défaut /etc/modules.conf (ou /etc/conf.modules qui est obsolète).

Lorsque la variable d'environnement UNNAME_MACHINE est défini, modutils utilise sa valeur à la place du champ machine de l'appel système uname(). Ceci est principalement utile lors de la compilation de modules 64 bits dans un espace utilisateur 32 bits ou vice versa, définissez UNNAME_MACHINE au type de modules. Modutils actuel ne prend pas en charge le mode cross-build complet pour les modules, il se limite à choisir entre 32 bits et 64 bits versions de l'architecture hôte.

-ré, --déboguer

Afficher des informations sur la représentation interne de la pile de modules.

-h, --aider

Affichez un résumé des options et quittez immédiatement.

-k, --autonettoyage

Définissez le nettoyage automatique sur les modules chargés. Utilisé par le noyau lorsqu'il appelle modprobe pour satisfaire une fonctionnalité manquante (fournie sous forme de module). Les -q l'option est impliquée par -k. Ces options sont automatiquement envoyées à insmod.

-n, --spectacle

N'exécutez pas l'action, montrez seulement ce qui serait fait.

-q, --calmer

Ne vous plaignez pas de l'échec d'insmod à installer un module. Continuez comme d'habitude, mais en silence, avec d'autres possibilités que modprobe teste. Cette option est automatiquement envoyée à insmod.

-r, --supprimer

Supprimez le module (piles) ou effectuez un nettoyage automatique, selon qu'il existe des modules mentionnés sur la ligne de commande.

-s, --syslog

Rapport via syslog au lieu de stderr. Cette option est automatiquement envoyée à insmod.

-ttype de module; --tapertype de module

Ne considérez que les modules de ce type. modprobe ne regarde que les modules dont le chemin de répertoire inclut exactement /moduletype/. type de module peut inclure plus d'un nom de répertoire, par exemple, -tconducteurs/réseau répertorie les modules dans xxx/conducteurs/net/ et ses sous-répertoires.

-v, --verbeux

Imprimez toutes les commandes au fur et à mesure qu'elles sont exécutées.

-V, --version

Affiche la version de modprobe.

Les noms de modules ne doivent pas contenir de chemins (pas de /), le nom ne peut pas non plus contenir la fin .o. Par exemple, glisser est un nom de module valide pour sonde de modulation, /lib/modules/2.2.19/net/slip et glisser.o sont invalides. Cela s'applique à la ligne de commande et aux entrées dans le fichier config.

Description de la commande

Les utilitaires modprobe et depmod sont destinés à rendre un noyau modulaire Linux plus gérable pour les utilisateurs, les administrateurs et les responsables de la distribution.

Modprobe utilise un fichier de dépendance de type Makefile, créé par depmod, pour charger automatiquement les modules pertinents à partir de l'ensemble de modules disponibles dans des arborescences de répertoires prédéfinies.

Modprobe est utilisé pour charger un seul module, une pile de modules dépendants ou tous les modules marqués d'une étiquette spécifiée.

Modprobe charge automatiquement tous les modules de base nécessaires dans une pile de modules, comme décrit par le fichier de dépendance modules.dep. Si le chargement d'un de ces modules échoue, toute la pile actuelle de modules chargée dans la session en cours est déchargée automatiquement.

Modprobe a deux manières de charger des modules. Une façon (le mode sonde) essaiera de charger un module à partir d'une liste (définie par modèle). Modprobe arrête le chargement dès qu'un module se charge avec succès. Cela pourrait être utilisé pour charger automatiquement un pilote Ethernet à partir d'une liste. L'autre façon d'utiliser modprobe est de charger tous les modules à partir d'une liste.

Avec la possibilité -r, modprobe décharge automatiquement une pile de modules, de la même manière rmmod -r Est-ce que. Utiliser uniquement sonde de modulation -r nettoie les modules chargés automatiquement inutilisés et exécute également les commandes de pré- et post-suppression dans le fichier de configuration /etc/modules.conf.

Combiner les options -l et -t répertorie tous les modules disponibles d'un certain type.

Option -c imprime la configuration actuellement utilisée (par défaut + fichier de configuration).

Configuration

Le comportement de modprobe (et depmod) peut être modifié par le fichier de configuration (facultatif) /etc/modules.conf. Pour une description détaillée de ce que ce fichier peut contenir, ainsi que la configuration par défaut utilisée par depmod et modprobe, voir modules.conf(5).

Les commandes de pré et post-suppression ne sont pas exécutées si un module est nettoyé automatiquement par kerneld. Recherchez plutôt la prise en charge à venir du stockage de module persistant. Si vous souhaitez utiliser les fonctionnalités de pré-installation et de post-installation, désactivez le nettoyage automatique pour kerneld et mettez à la place quelque chose comme la ligne suivante dans crontab (cela est également utilisé pour les systèmes kmod) pour effectuer un nettoyage automatique tous les 2 minutes:

*/2 * * * * test -f /proc/modules && /sbin/modprobe -r

Stratégie

L'idée est que modprobe cherchera d'abord dans le répertoire contenant les modules compilés pour la version actuelle du noyau. Si le module n'y est pas trouvé, modprobe regarde dans le répertoire commun à la version du noyau (par exemple, 2.0, 2.2). Si le module n'est toujours pas trouvé, modprobe recherche dans le répertoire contenant les modules une version par défaut, et ainsi de suite.

Lorsque vous installez un nouveau Linux, les modules doivent être déplacés vers un répertoire lié à la version (et à la version) du noyau que vous installez. Ensuite, faites un lien symbolique de ce répertoire vers le répertoire par défaut.

Chaque fois que vous compilez un nouveau noyau, la commande faire des modules_install crée un nouveau répertoire, mais ne changera pas le lien par défaut.

Lorsque vous obtenez un module sans rapport avec la distribution du noyau, placez-le dans l'un des répertoires indépendants de la version sous /lib/modules.

Il s'agit de la stratégie par défaut, qui peut être remplacée dans /etc/modules.conf.

Exemples

modprobe -t net

Chargez l'un des modules qui sont stockés dans le répertoire étiqueté rapporter. Chaque module est essayé jusqu'à ce que l'un d'eux réussisse.

modprobe -a -t boot

Tous les modules qui sont stockés dans des répertoires étiquetés botte sont chargés.

glissement de la sonde de modulation

Cela tente de charger le module slhc.o s'il n'a pas été chargé auparavant, car le module slip a besoin de la fonctionnalité du module slhc. Cette dépendance est décrite dans le fichier modules.dep qui a été créé automatiquement par depmod.

modprobe -r glissement

Cela décharge le module de glissement. Il décharge également le module slhc automatiquement, à moins qu'il ne soit également utilisé par un autre module (par exemple, ppp).

Voir également: depmod(8), lsmod (8), kerneld (8), ksyms (8), rmmod(8).

Mode sans échec

Si l'uid effectif n'est pas égal à l'uid réel, alors modprobe traite son entrée avec une extrême méfiance. Le dernier paramètre est toujours traité comme un nom de module, même s'il commence par -. Il ne peut y avoir qu'un seul nom de module et des options du formulaire variable=valeur sont interdits. Le nom du module est toujours traité comme une chaîne, aucune méta-expansion n'est effectuée en mode sans échec. Cependant, l'expansion méta est appliquée aux données lues à partir du fichier de configuration.

euid peut ne pas être égal à uid lorsque modprobe est invoqué depuis le noyau, cela est vrai pour les noyaux 2.4.0-test11 et ultérieurs. Dans un monde idéal, modprobe pourrait faire confiance au noyau pour ne transmettre que des paramètres valides à modprobe. Cependant, au moins un exploit racine local s'est produit car le code du noyau de haut niveau a transmis des paramètres non vérifiés directement de l'utilisateur à modprobe. Modprobe ne fait donc plus confiance à l'entrée du noyau.

modprobe définit automatiquement le mode sans échec lorsque l'environnement se compose uniquement de ces chaînes.

ACCUEIL=/
TERME=linux
CHEMIN=/sbin:/usr/sbin:/bin:/usr/bin

Cela détecte l'exécution de modprobe depuis le noyau sur les noyaux 2.2 à 2.4.0-test11, même si uid == euid, ce qu'il fait sur les noyaux antérieurs.

Commandes de journalisation

Si le répertoire /var/log/ksymoops existe et modprobe est exécuté avec une option qui pourrait charger ou supprimer un module, modprobe enregistre sa commande et renvoie l'état dans /var/log/ksymoops/'date +%Y%m%d.log'. Il n'y a pas de commutateur pour désactiver cette journalisation automatique, si vous ne voulez pas que cela se produise, ne créez pas /var/log/ksymoops. Si ce répertoire existe, il doit appartenir à root et être en mode 644 ou 600 et vous devez exécuter le script insmod_ksymoops_clean tous les jours environ.

Utilitaires requis

depmod (8), insmod (8).

Utilisez le homme commande (% homme) pour voir comment une commande est utilisée sur votre ordinateur.