Composición del kernel de diseño del controlador Linux

1. Estructura del directorio del código fuente del kernel

Consulte el código fuente del directorio raíz del kernel 4.4 a continuación: una
Inserte la descripción de la imagen aquí
breve descripción:

  • arch: contiene código relacionado con la arquitectura del hardware, cada plataforma ocupa un directorio correspondiente, como i386, arm, arm64, powerpc, mips, etc. El kernel de Linux actualmente admite alrededor de 30 arquitecturas. En el directorio arch, lo que se almacena es el soporte para la programación de procesos del kernel de Linux, administración de memoria, interrupción, etc. por los chips de cada plataforma y cada plataforma, así como el código de soporte a nivel de placa de cada SoC y placa de circuito específicos.
  • block: Bloquea la programación de E / S del controlador de dispositivo.
  • criptografía: algoritmos de cifrado y hash de uso común (como AES, SHA, etc.), así como algunos algoritmos de comprobación de compresión y CRC.
  • documentación: explicaciones generales y notas para cada parte del kernel.
  • controladores: controladores de dispositivo, cada controlador diferente ocupa un subdirectorio, como char, block, net, mtd, i2c, etc.
  • fs: varios sistemas de archivos compatibles, como EXT, FAT, NTFS, JFFS2, etc.
  • include: archivos de encabezado, los archivos de encabezado relacionados con el sistema se colocan en el subdirectorio include / linux. * init: código de inicialización del kernel. El famoso start_kernel () se encuentra en el archivo init / main.c.
  • ipc: el código para la comunicación entre procesos.
  • kernel: La parte central del kernel, incluida la programación de procesos, temporizadores, etc., y parte del código relacionado con la plataforma se coloca en el directorio arch / * / kernel.
  • lib: código de archivo de biblioteca.
  • mm: Código de gestión de memoria, parte del código relacionado con la plataforma se coloca en el directorio arch / * / mm.
  • net: código relacionado con la red para implementar varios protocolos de red comunes.
  • scripts: archivos de script usados ​​para configurar el kernel.
  • seguridad: principalmente un módulo SELinux.
  • sonido: códigos básicos del controlador y controladores de dispositivos comunes para dispositivos de audio ALSA y OSS.
  • usr: implementar cpio para empaquetado y compresión, etc.
  • incluir: Archivo de encabezado de nivel de API principal.

2. Componentes del kernel

Hay cinco componentes:

  • Programación de procesos (SCHED)
  • Gestión de memoria (MM)
  • Sistema de archivos virtual (VFS)
  • Interfaz de red (NET)
  • Comunicación entre procesos (IPC)

La relación se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí

2.1 Programación de procesos

La programación de procesos controla el acceso de múltiples procesos a la CPU en el sistema, de modo que se puedan ejecutar múltiples procesos en la CPU en "micro serie y macro paralelo". La programación de procesos está en el centro del sistema, y ​​otros subsistemas del kernel dependen de ella, porque cada subsistema necesita suspender o reanudar el proceso.

Estado del proceso de Linux:

  • Listo
  • sueño profundo
  • Sueño ligero
  • llevado a cabo
  • se acabó el tiempo
  • muerto

Los procesos de Linux cambian entre varios estados. En la programación del controlador de dispositivo, cuando no se puede cumplir con el recurso solicitado, el controlador generalmente programa otros procesos para que se ejecuten y pone el proceso en estado de suspensión. No se despertará y entrará en estado listo hasta que se libere el recurso solicitado. El sueño se divide en sueño interrumpible y sueño ininterrumpido La diferencia entre los dos es que el sueño interrumpible se despierta cuando se recibe una señal. Como se muestra en la figura siguiente: la
Inserte la descripción de la imagen aquí
aplicación creará un hilo: pthread_create () el
control del kernel reconstruye el hilo: pid_t kernel_thread (int (* fn) (void *), void * arg, unsigned long flags);

2.2 Gestión de la memoria

La función principal de la administración de memoria es controlar múltiples procesos para compartir de manera segura el área de memoria principal. Cuando la CPU proporciona una unidad de gestión de memoria (MMU), la gestión de memoria de Linux completa la conversión de memoria virtual a memoria física para cada proceso.

En términos generales, cada proceso de Linux con un procesador de 32 bits disfruta de 4 GB de espacio de memoria. 0 ~ 3 GB pertenecen al espacio del usuario y 3 ~ 4 GB pertenecen al espacio del kernel. El espacio del kernel es diferente para la memoria convencional, la memoria del dispositivo de E / S y la memoria de gama alta. Método de procesamiento. Por supuesto, los límites específicos entre el espacio del kernel y el espacio del usuario se pueden ajustar En la opción de configuración del kernel Características del kernel → División de memoria, el límite se puede establecer en 2GB o 3GB.
Términos y conceptos técnicos relacionados:

  • Algoritmo de amigos
  • Algoritmo LRU

El sistema general de
Inserte la descripción de la imagen aquí
administración de la memoria : El contenido de la administración de la memoria es relativamente complicado, se recomienda que el libro "Ejecutar el kernel de Linux" sea un buen análisis de la administración de la memoria.

2.3 Sistema de archivos virtual

El sistema de archivos virtual de Linux oculta los detalles específicos de varios hardware y proporciona una interfaz unificada para todos los dispositivos. Además, es independiente de cada sistema de archivos específico y es una abstracción de varios sistemas de archivos. Proporciona vfs_read (), vfs_write () y otras interfaces unificadas para aplicaciones de nivel superior, y llama a sistemas de archivos o controladores de dispositivos específicos de bajo nivel.
Inserte la descripción de la imagen aquí

2.4 Interfaz de red

La interfaz de red proporciona acceso a varios estándares de red y soporte para varios hardware de red. En Linux, la interfaz de red se puede dividir en protocolo de red y controlador de red. La parte del protocolo de red es responsable de la realización de cada posible protocolo de transmisión de red. El controlador de dispositivo de red es responsable de comunicarse con los dispositivos de hardware. Cada dispositivo de hardware posible tiene su correspondiente Controlador de dispositivo.
Inserte la descripción de la imagen aquí

2.5 Comunicación entre procesos

  • señal
  • Memoria compartida
  • cola de mensajes
  • tubería
  • Los sockets de dominio UNIX
    que forman parte de la capa de la aplicación en detalle, uno por uno, se explicarán en el siguiente desarrollo de la aplicación de Linux de Boge.

3. Compilar y cargar el kernel

Al compilar el kernel, primero debe configurar los módulos del kernel. Inglés Linux es poderoso. En proyectos reales, es imposible usar todos los módulos, especialmente los dispositivos integrados. Cuando los recursos son relativamente limitados, la adaptación es particularmente importante. importante. Después de recortar, se generará un archivo .config en el directorio raíz del kernel, y luego el kernel se compilará de acuerdo con el .config para generar una imagen reflejada.

El sistema de configuración del kernel tiene tres partes:

  • Makefile se distribuye en el código fuente del kernel y define las reglas de compilación del kernel de Linux
  • Archivo de configuración: proporcione a los usuarios opciones de configuración
  • Herramienta de configuración: interfaz o intérprete de comandos

3.1 El método de configuración del kernel

  • make config (la interfaz de configuración más tradicional basada en texto, no recomendada)
  • make menuconfig (interfaz de configuración basada en el menú de texto)
  • hacer xconfig (requiere que QT esté instalado)
  • make gconfig (Requiere que GTK + esté instalado)

Dicho esto, descargue el kernel y compílelo de acuerdo con la situación real. 4.4.252 se utiliza aquí

Inserte la descripción de la imagen aquí

3.2 Compilando el núcleo y los módulos

Tome la placa de desarrollo del brazo como ejemplo:
make ARCH = arm zImage
make ARCH = arm modules

Después de ejecutar el comando anterior, obtendrá la imagen del kernel sin comprimir vmlinux y el archivo de la tabla de símbolos del kernel System.map en el directorio raíz del código fuente, y obtendrá la imagen del kernel comprimida zImage en el directorio arch / arm / boot /. Obtenga el módulo de kernel seleccionado en el directorio correspondiente.

Supongo que te gusta

Origin blog.csdn.net/weixin_42955871/article/details/112981933
Recomendado
Clasificación