Introdução
Autor
- Linux Kernel Module Programming Guide foi escrito originalmente por Ori Pomerantz para o Linux v2.2
- Atualizado por Peter Jay Salzman para o Linux v2.4
- Co-mantido por Michael Burian para o Linux v2.6
- Exemplos atualizados por Bob Mottram para versões a partir do Linux v3.8
- Atualizado por Jim Huang para versões recentes do Linux (v5.0 ou superior) e com correções na documentação em LaTeX
Agradecimentos
- Vários colaboradores forneceram correções e sugestões
O que é um módulo do kernel?
- Um módulo do kernel Linux é um segmento de código que pode ser carregado e descarregado dinamicamente no kernel conforme necessário
- Os módulos do kernel expandem a funcionalidade do kernel sem reiniciar o sistema
- Sem módulos, seria necessário recompilar o kernel e reiniciar o sistema sempre que uma nova funcionalidade fosse adicionada
Pacote de módulos do kernel
- Ubuntu/Debian:
sudo apt-get install build-essential kmod
- Arch Linux:
sudo pacman -S gcc kmod
Quais módulos existem no meu kernel?
- É possível verificar os módulos atualmente carregados no kernel com o comando
lsmod
- Também é possível verificar no arquivo
/proc/modules
É necessário baixar e compilar o kernel?
- Não é necessário baixar e compilar o kernel para seguir este guia
- É seguro executar os exemplos em uma distribuição de testes
Antes de começar
- Observações importantes sobre controle de versão de módulos, uso do X Window System, SecureBoot etc.
Headers
- É necessário instalar os arquivos de header do kernel
- Ubuntu/Debian:
sudo apt-get install kmod linux-headers-$(uname -r)
- Arch Linux:
sudo pacman -S linux-headers
- Fedora:
sudo dnf install kernel-devel kernel-headers
Exemplos
- Todos os exemplos estão no subdiretório
examples da documentação
Hello World
O módulo mais simples
- Criar e compilar o arquivo
hello-1.c
- Explicação de como carregar e descarregar o módulo
Hello e Goodbye
- Exemplo de uso das macros
module_init e module_exit
Macros __init e __exit
- A macro
__init libera a memória quando a função de inicialização é concluída
- A macro
__exit omite a função quando o módulo está embutido no kernel
Licença e documentação do módulo
- Usar a macro
MODULE_LICENSE para definir a licença do módulo
- Exemplo de uso das macros
MODULE_AUTHOR e MODULE_DESCRIPTION
Passando argumentos de linha de comando
- Usar a macro
module_param para passar argumentos de linha de comando ao módulo
- Usar a macro
MODULE_PARM_DESC para adicionar descrições aos argumentos
Módulos distribuídos em vários arquivos
- Exemplo de módulo de kernel dividido em vários arquivos-fonte
Compilando módulos para kernels pré-compilados
- Explicação de como compilar módulos para kernels pré-compilados
Resumo do GN⁺
- Este guia é uma referência abrangente sobre programação de módulos do kernel Linux, cobrindo desde os conceitos básicos até tópicos avançados com vários exemplos
- Por meio dos módulos do kernel, é possível expandir a funcionalidade do kernel sem reiniciar o sistema, o que traz grandes vantagens para desenvolvedores
- É importante entender e seguir com cuidado observações como controle de versão de módulos, SecureBoot etc.
- Projetos relacionados incluem Linux Device Drivers e The Linux Programming Interface
1 comentários
Comentários do Hacker News
qemué uma boa forma de ganhar experiência com hacking de kernel