2 puntos por GN⁺ 2024-07-28 | 1 comentarios | Compartir por WhatsApp

Introducción

Autor

  • Linux Kernel Module Programming Guide fue escrita originalmente por Ori Pomerantz para Linux v2.2
  • Peter Jay Salzman la actualizó para Linux v2.4
  • Michael Burian la co-mantuvo para Linux v2.6
  • Bob Mottram actualizó los ejemplos para versiones posteriores a Linux v3.8
  • Jim Huang la actualizó para versiones recientes de Linux (v5.0 o superiores) y corrigió la documentación en LaTeX

Agradecimientos

  • Varios colaboradores aportaron correcciones y sugerencias

¿Qué es un módulo del kernel?

  • Un módulo del kernel de Linux es un segmento de código que puede cargarse y descargarse dinámicamente en el kernel según sea necesario
  • Los módulos del kernel amplían la funcionalidad del kernel sin reiniciar el sistema
  • Sin módulos, habría que recompilar el kernel y reiniciar el sistema cada vez que se agregara una nueva función

Paquete de módulos del kernel

  • Ubuntu/Debian: sudo apt-get install build-essential kmod
  • Arch Linux: sudo pacman -S gcc kmod

¿Qué módulos tiene mi kernel?

  • Con el comando lsmod se pueden ver los módulos cargados actualmente en el kernel
  • También puede comprobarse en el archivo /proc/modules

¿Es necesario descargar y compilar el kernel?

  • No es necesario descargar ni compilar el kernel para seguir esta guía
  • Es más seguro ejecutar los ejemplos en una distribución de prueba

Antes de empezar

  • Precauciones sobre control de versiones de módulos, uso de X Window System, SecureBoot, etc.

Headers

  • Es necesario instalar los archivos de headers del 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

Ejemplos

  • Todos los ejemplos están en el subdirectorio examples del documento

Hello World

El módulo más simple

  • Crear y compilar el archivo hello-1.c
  • Explicación de cómo cargar y descargar el módulo

Hello y Goodbye

  • Ejemplo de uso de las macros module_init y module_exit

Macros __init y __exit

  • La macro __init libera memoria cuando la función de inicialización termina
  • La macro __exit omite la función cuando el módulo está integrado en el kernel

Licencia y documentación del módulo

  • Usar la macro MODULE_LICENSE para especificar la licencia del módulo
  • Ejemplos de uso de las macros MODULE_AUTHOR y MODULE_DESCRIPTION

Pasar argumentos de línea de comandos

  • Usar la macro module_param para pasar argumentos de línea de comandos al módulo
  • Usar la macro MODULE_PARM_DESC para agregar una descripción de los argumentos

Módulos distribuidos en varios archivos

  • Ejemplo de un módulo del kernel dividido en varios archivos fuente

Compilar módulos para un kernel precompilado

  • Explicación de cómo compilar módulos para un kernel precompilado

Resumen de GN⁺

  • Esta guía es una referencia integral sobre programación de módulos del kernel de Linux, y cubre desde conceptos básicos hasta temas avanzados con diversos ejemplos
  • Los módulos del kernel permiten ampliar la funcionalidad del kernel sin reiniciar el sistema, lo que representa una gran ventaja para los desarrolladores
  • Es importante comprender y seguir bien las precauciones relacionadas con control de versiones de módulos, SecureBoot, etc.
  • Entre los proyectos relacionados están Linux Device Drivers y The Linux Programming Interface

1 comentarios

 
GN⁺ 2024-07-28
Comentarios en Hacker News
  • Hay una opinión de que el ejemplo de "Detecting button presses" es difícil porque requiere compilar un módulo para RPi
    • qemu es una buena forma de experimentar el hacking del kernel
  • Hay una opinión de que la Linux Foundation debería patrocinar la actualización de los libros LDD (Linux Device Driver) y del kernel de Linux
  • Un usuario comparte que lo leyó por primera vez hace 22 años
  • Hay noticias de que la actualización más reciente del libro The Linux Memory Manager fue a inicios de julio y que actualmente está en edición
  • Hay preguntas generales sobre programación del kernel de Linux, por ejemplo sobre hacking de sistemas de archivos o de gestión de memoria
    • Existía el libro "Linux Kernel Development" de Robert Love, pero probablemente ya no se actualiza
  • Hay elogios para el tutorial detallado y práctico sobre compilar módulos del kernel directamente
  • Hay una pregunta sobre si el autor usó un LLM para escribir o mejorar el texto