Análisis detallado del desarrollo del módulo del kernel bajo el sistema operativo Linux

  
 

1. modprobe load kernel module

a) Encuentre alias en /etc/module.conf

b) Determine si hay una dependencia en lib /modules /version /module.dep El módulo debe cargarse antes de tiempo (el archivo es creado por depmod-a)

2. El kernel 2.4 no tiene que usar init_module y cleanup_module para hacer las funciones de inicio y fin, pero necesita usar module_init y

Module_exit declaración.

3. Las macros __init y __exit pueden hacer que las funciones reclamen automáticamente la memoria después de ejecutarse (limitado a los módulos), __initdata para variables,

Ejemplo:

# Incluir //necesita incluir el archivo de encabezado

static int ntest __initdata = 3;

static int __init test_init (void) {...}

static void __exit test_exit ( Void) {...}

module_init (test_init); //Declarar después de la función de implementación

module_exit (test_exit);

4. Algunas descripciones de los módulos son relevantes Macro, puede utilizar objdump para ver información relacionada.

MODULE_LICENSE () Descripción Código Tipo de licencia

MODULE_DESCRIPTION () Descripción del módulo

MODULE_AUTHOR () Autor

MODULE_SUPPORTED_DEVICE () Módulo Dispositivos compatibles

5. El paso de parámetros utiliza la macro MODULE_PARM (nombre de variable, tipo).

Los tipos admitidos son " b " bit " h " short " i " integer " l " long " s " string '

static int myint = 9;

static char * mystr = " prueba "; //Tenga en cuenta que debe pasar el valor predeterminado del parámetro

MODULE_PARM (myint, " i ");

MODULE_PARM (mystr , " s ");

6. Compilación de varios archivos en un módulo del kernel:

a) Es necesario agregar

#define __NO_VERSION __

#include

b) Compile con un archivo de núcleo único normal

c) Conexión: ld -m elf_i386 -r -o < 1st src file.o > < 2nd Src file.o >

7. strace Verifique la llamada al sistema utilizada por un programa

8. Acerca de la estructura file_operations se define en el archivo linux /fs.h.

Uso:

struct file_operations fops = {read: device_read, write: device_write, open: device_open, release: device_release} C99 use: struct file_operations fops = {.read = device_read , .write = device_write, .open = device_open, .release = device_release}

Copyright © Conocimiento de Windows All Rights Reserved