Cómo usarlo, lleve consigo un libro de análisis del código fuente de la versión 2.4 del kernel de Linux
Estructura del directorio de código
Antes de leer el código fuente, también es importante comprender la distribución general del código fuente del kernel de Linux. Los sistemas operativos modernos generalmente incluyen gestión de procesos, gestión de memoria, sistemas de archivos, controladores, redes, etc. Los distintos directorios del código fuente del kernel de Linux corresponden aproximadamente a esto y están compuestos de la siguiente manera (asumiendo que son relativos al directorio Linux-2.4.23):
1. relacionado con la arquitectura. Por ejemplo, i386 es un subdirectorio para CPU Intel y arquitecturas compatibles. Las PC generalmente se basan en este directorio.
El directorio 2.include contiene la mayoría de los archivos de encabezado necesarios para compilar el kernel, como los archivos de encabezado independientes de la plataforma en el subdirectorio include/linux.
El directorio 3.init contiene el código de inicialización del kernel (no el código de inicio del sistema), que contiene los archivos main.c y Version.c. Este es un buen punto de partida para estudiar cómo funciona el kernel.
El directorio 4.mm contiene todo el código de administración de memoria. El código de administración de memoria relevante para una arquitectura de hardware específica se encuentra en los directorios arch/*/mm.
5. El directorio de controladores contiene todos los controladores de dispositivos del sistema. Está dividido en varias categorías de controladores de dispositivos, cada categoría tiene un subdirectorio correspondiente, por ejemplo, los controladores de la tarjeta de sonido corresponden a controladores/sonido.
6. El directorio ipc contiene código de comunicación entre procesos centrales.
7. El directorio de módulos contiene módulos integrados y cargables dinámicamente.
8. El directorio fs contiene código para sistemas de archivos compatibles con Linux. Diferentes sistemas de archivos corresponden a diferentes subdirectorios, por ejemplo, el sistema de archivos ext3 corresponde al subdirectorio ext3.
El código central de la gestión del kernel se coloca aquí. Además, el código relacionado con la arquitectura del procesador también se coloca en el directorio arch/*/kernel.
El directorio 9.net contiene el código de la parte central de la red, y cada uno de sus subdirectorios corresponde a un aspecto de la red.
El directorio 10.lib contiene el código de la biblioteca principal, pero el código de la biblioteca relacionado con la arquitectura del procesador se coloca en el directorio arch/*/lib/.
El directorio 11.scripts contiene archivos de script para configurar el kernel.
12.
12. El directorio de documentación contiene documentos relacionados con la función de cada directorio.
En términos generales, hay un archivo .depend y un archivo Makefile en cada directorio. Ambos archivos son archivos auxiliares utilizados durante el proceso de compilación. Leer estos dos archivos detenidamente le ayudará a comprender las conexiones y dependencias entre los archivos. También hay un archivo Léame en algunos directorios, que es una descripción de los archivos en el directorio y también es útil para comprender el código fuente del kernel.
En cuanto al método u orden de lectura, existen direcciones verticales y horizontales. Vertical se refiere a leer paso a paso según el orden de ejecución del programa; horizontal se refiere a leer módulo por módulo. A menudo se combinan.
El código de inicio de Linux se puede leer paso a paso de acuerdo con la secuencia de inicio de Linux para la parte de administración de memoria y se puede leer y analizar por separado; De hecho, este es un proceso iterativo y es imposible entenderlo después de leerlo una vez.