2 pontos por GN⁺ 2024-07-28 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-07-28
Comentários do Hacker News
  • Há opiniões de que o exemplo de "Detecting button presses" é difícil porque precisa compilar um módulo para RPi
    • qemu é uma boa forma de ganhar experiência com hacking de kernel
  • Há opiniões de que a Linux Foundation deveria patrocinar a atualização do LDD (linux device driver) e dos livros sobre o kernel Linux
  • Um usuário compartilhou a experiência de ter lido isso pela primeira vez há 22 anos
  • Há notícias de que a atualização mais recente do livro The Linux Memory Manager foi no início de julho e que ele está sendo editado no momento
  • Há perguntas gerais sobre programação do kernel Linux, por exemplo, sobre hacking de sistema de arquivos ou gerenciamento de memória
    • Havia o livro "Linux Kernel Development", de Robert Love, mas provavelmente ele não é mais atualizado
  • Há elogios a um tutorial detalhado e prático sobre compilar módulos de kernel diretamente
  • Há uma pergunta sobre se o autor usou um LLM para escrever ou melhorar o texto