28 Gerenciando módulos do kernel #
Embora o Linux seja um kernel monolítico, ele pode ser ampliado usando módulos do kernel. Esses são objetos especiais que podem ser inseridos no kernel e removidos sob demanda. Em termos práticos, os módulos do kernel tornam possível adicionar e remover drivers e interfaces que não estão incluídos no próprio kernel. O Linux dispõe de vários comandos para gerenciar módulos do kernel.
28.1 Listando módulos carregados com lsmod e modinfo #
Use o comando lsmod
para ver os módulos do kernel que estão carregados no momento. A saída do comando pode ter a seguinte aparência:
>
lsmod
Module Size Used by
snd_usb_audio 188416 2
snd_usbmidi_lib 36864 1 snd_usb_audio
hid_plantronics 16384 0
snd_rawmidi 36864 1 snd_usbmidi_lib
snd_seq_device 16384 1 snd_rawmidi
fuse 106496 3
nfsv3 45056 1
nfs_acl 16384 1 nfsv3
A saída é dividida em três colunas. A coluna Module
(Módulo) lista os nomes dos módulos carregados, enquanto a coluna Size
(Tamanho) exibe o tamanho de cada módulo. A coluna Used by
(Usado por) mostra o número de módulos de referência e seus nomes. Essa lista pode estar incompleta.
Para ver informações detalhadas sobre um módulo do kernel específico, use o comando modinfo MODULE_NAME
, em que MODULE_NAME é o nome do módulo do kernel desejado. O binário modinfo
reside no diretório /sbin
, que não está na variável de ambiente PATH do usuário. Isso significa que você deve especificar o caminho completo para o binário ao executar o comando modinfo
como um usuário comum:
>
/sbin/modinfo kvm
filename: /lib/modules/5.3.18-57-default/kernel/arch/x86/kvm/kvm.ko.xz
license: GPL
author: Qumranet
suserelease: SLE15-SP3
srcversion: 3D8FBA9060D4537359A06FC
depends: irqbypass
supported: yes
retpoline: Y
intree: Y
name: kvm
vermagic: 5.3.18-57-default SMP mod_unload modversions
28.2 Adicionando e removendo módulos do kernel #
Embora seja possível usar insmod
e rmmod
para adicionar e remover módulos do kernel, em vez disso, é recomendável usar a ferramenta modprobe
. modprobe
oferece diversas vantagens importantes, incluindo a resolução automática de dependências e a criação de lista negra.
Quando usado sem parâmetros, o comando modprobe
instala um módulo do kernel especificado. O modprobe
deve ser executado com privilégios de root:
>
sudo
modprobe acpi
Para remover um módulo do kernel, use o parâmetro -r
:
>
sudo
modprobe -r acpi
28.2.1 Carregando módulos do kernel automaticamente na inicialização #
Em vez de carregar os módulos do kernel manualmente, você pode carregá-los automaticamente durante o processo de boot usando o serviço systemd-modules-load.service
. Para habilitar um módulo do kernel, adicione um arquivo .conf
ao diretório /etc/modules-load.d/
. Convém dar ao arquivo de configuração o mesmo nome do módulo. Por exemplo:
/etc/modules-load.d/rt2800usb.conf
O arquivo de configuração deve conter o nome do módulo do kernel desejado (por exemplo, rt2800usb
).
A técnica descrita permite que você carregue os módulos do kernel sem parâmetros. Se você precisa carregar um módulo do kernel com opções específicas, em vez disso, adicione um arquivo de configuração ao diretório /etc/modprobe.d/
. O arquivo deve ter a extensão .conf
. O nome do arquivo deve cumprir a seguinte convenção de nomeação: priority-modulename.conf
. Por exemplo: 50-thinkfan.conf
. O arquivo de configuração deve conter o nome do módulo do kernel e os parâmetros desejados. Você pode usar o comando de exemplo a seguir para criar um arquivo de configuração com o nome do módulo do kernel e seus parâmetros:
>
echo "options thinkpad_acpi fan_control=1" | sudo tee /etc/modprobe.d/thinkfan.conf
A maioria dos módulos do kernel é carregada pelo sistema automaticamente quando um dispositivo é detectado ou o espaço do usuário requer funcionalidades específicas. Portanto, a adição manual de módulos a /etc/modules-load.d/
raramente é necessária.
28.2.2 Adicionando módulos do kernel à lista negra com modprobe #
A adição de um módulo do kernel à lista negra o impede de ser carregado durante o processo de boot. Isso pode ser útil quando você deseja desabilitar um módulo que você suspeita ser a causa de problemas no sistema. Você ainda pode carregar manualmente os módulos do kernel que constam na lista negra usando as ferramentas insmod
ou modprobe
.
Para adicionar um módulo à lista negra, crie um arquivo /etc/modprobe.d/60-blacklist-MODULE_NAME.conf
com o seguinte conteúdo:
blacklist MODULE_NAME
Execute o comando dracut
como root para gerar uma nova imagem do initrd
e reinicialize sua máquina (substitua NAME pelo nome do initrd atual e KERNELVERSION pelo kernel que está em execução):
>
su
echo "blacklist nouveau" >> /etc/modprobe.d/60-blacklist-nouveau.conf
/usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force /boot/$initrd-NAME $KERNELVERSION
reboot
Para desabilitar um módulo do kernel apenas temporariamente, inclua-o na lista negra diretamente durante a inicialização. Para fazer isso, pressione a tecla E quando aparecer a tela de boot. Essa ação direciona você para um editor mínimo que permite modificar os parâmetros de boot. Localize a linha que tem a seguinte aparência:
linux /boot/vmlinuz...splash= silent quiet showopts
Adicione o comando modprobe.blacklist=MODULE_NAME
ao fim da linha. Por exemplo:
linux /boot/vmlinuz...splash= silent quiet showopts modprobe.blacklist=nouveau
Pressione F10 ou Ctrl–X para inicializar com a configuração especificada.
Para adicionar um módulo do kernel à lista negra permanentemente pelo GRUB, abra o arquivo /etc/default/grub
para edição e adicione a opção modprobe.blacklist=MODULE_NAME
ao comando GRUB_CMD_LINUX
. Em seguida, execute o comando sudo grub2-mkconfig -o /boot/grub2/grub.cfg
para habilitar as mudanças.