Modules : Blacklistage – Forçage - Paramétrage

Mise à jour : Debian 9.4

Ce document décrit comment forcer, interdire ou paramétrer le chargement d'un module.

Référence

1 - Blocage du chargement au démarrage (blacklistage)

L'empêchement du chargement d'un module pendant le démarrage du noyau peut-être spécifié

A noter que

1.1 - Vérifications préliminaires

Exemple : Blocage du chargement du module bluetooth.ko

# lsmod |grep "bluetooth "
bluetooth 548864 9 btrtl,btintel,bnep,btbcm,btusb
$ lsinitramfs /initrd.img |grep bluetooth.ko

1.2 - Solution 1 - Utilisation de la ligne de commande du noyau

Ajouter dans la ligne de commande du noyau : module_blacklist=module1,module2,module3. Exemple :

linux vmlinuz /vmlinuz root=/dev/sda1 quiet splash module_blacklist=bluetooth

Au redémarrage suivant, le module bluetooth n'est pas chargé :

$ lsmod |grep "bluetooth "

Et son chargement n'est pas autorisé !

# modprobe bluetooth
modprobe: ERROR: could not insert 'bluetooth': Operation not permitte

1.3 - Solution 2 - Utilisation de fichiers de configuration

Il n'est pas suffisant de bloquer le module bluetooth, il faut également bloquer le module btusb

$ cat /etc/modprobe.d/nobluetooth.conf
# Blacklist du bluetooth
blacklist bluetooth
blacklist btusb
# update-initramfs -u

Au redémarrage suivant, le module bluetooth n'est pas chargé :

$ lsmod |grep "bluetooth "

Mais son chargement est autorisé !

# modprobe bluetooth

2 - Chargement avec des paramètres modifiés

Les paramètres modifiés peuvent être spécifiés

A noter que

2.1 - Vérifications préliminaires

Exemple : Suppression du modesetting du module i915

Les valeurs possibles du modesetting du module d'affichage i915 sont 0, 1 et -1 :

# modinfo i915 |grep modesetting
parm: modeset:Use kernel modesetting [KMS] (0=disable, 1=on, -1=force vga console preference [default]) (int)

Par défaut, le modesetting vaut -1 et est autorisé :

# systool -v -m i915 |grep modeset
modeset = "-1"

Le framebuffer inteldrmfb est activé :

# dmesg |grep inteldrmfb
[ 1.580936] fbcon: inteldrmfb (fb0) is primary device
[ 2.403081] i915 0000:00:02.0: fb0: inteldrmfb frame buffer device

Pour supprimer le modesetting :

2.2 - Solution 1 - Utilisation de la ligne de commande du noyau

Pour charger un module avec un paramètre donné, ajouter dans la ligne de commande du noyau, nom_du_module.nom_du_paramètre=valeur

linux vmlinuz /vmlinuz root=/dev/sda1 quiet splash i915.modeset=0

Au redémarrage suivant, la console est en mode texte, le framebuffer est

# systool -v -m i915 |grep modeset
0

Le framebuffer interldrmfb est absent

# dmesg |grep inteldrmfb

2.3 - Solution 2 - Utilisation de fichiers de configuration

$ cat /etc/modprobe.d/nomodeset.conf
# nomodeset
options i915 modeset=0
# update-initramfs -u

Au redémarrage suivant, le modesetting est supprimé, comme dans la solution 1.

3 - Forcer le chargement d'un module

L'objectif est de forcer le chargement d'un module.

3.1 - Utilisation de fichiers de configuration

$ cat /etc/modules-load.d/fan.conf
# kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

fan
# update-initramfs -u

Au redémarrage suivant, le module fan est chargé.

3.2 - Ajout du module dans initrd

Cette méthode permet un chargement du module pendant les toutes premières phases du chargement du noyau.

$ cat /etc/initramfs-tools/modules
# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax: module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
pcspkr
# update-initrafms -u
# lsinitramfs /initrd.img |grep pcspkr.ko
lib/modules/4.9.0-0.bpo.1-amd64/kernel/drivers/input/misc/pcspkr.ko
# dmesg |grep pcspkr
[ 2.522073] input: PC Speaker as /devices/platform/pcspkr/input/input16

$ lsmod |grep pcspkr
pcspkr 16384 0