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
mostra o número de módulos de referência e os respectivos 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/6.4.0-150600.9-default/kernel/arch/x86/kvm/kvm.ko.zst
license: GPL
author: Qumranet
suserelease: SLE15-SP6
srcversion: 9DACE73AC65F98D556DAD60
depends: irqbypass
supported: yes
retpoline: Y
intree: Y
name: kvm
vermagic: 6.4.0-150600.9-default SMP mod_unload modversions
28.2 Adicionando e removendo módulos do kernel #
É possível usar insmod
e rmmod
para adicionar e remover módulos do kernel, mas, em vez disso, a recomendação é usar a ferramenta modprobe
. O 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, em seguida, reinicialize a máquina (substitua NAME pelo nome do initrd atual e KERNELVERSION pelo kernel em execução no momento):
>
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 colocar um módulo do kernel na lista negra permanentemente por meio do GRUB, abra o arquivo /etc/default/grub
para edição e adicione a opção modprobe.blacklist=MODULE_NAME
ao comando GRUB_CMDLINE_LINUX
. Em seguida, execute o comando sudo grub2-mkconfig -o /boot/grub2/grub.cfg
para habilitar as mudanças.