¿Cómo ver el código fuente del kernel de Linux?
En los sistemas Linux, el código fuente generalmente se encuentra en el directorio /usr/src/linux*.*.* (*. *. * representa la versión del kernel, como 2.4.23), que es el código fuente del kernel (si no hay un directorio similar, es porque el código del kernel aún no se ha instalado). También se puede descargar gratuitamente desde Internet. Tenga en cuenta que no siempre vaya allí para descargar, utilice su sitio espejo. Busque el sitio de descarga apropiado en mirrors/ y vaya a pub/linux/kernel/v2.6/ para descargar el kernel 2.4.23.
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 constan de 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 la compilación. Leer estos dos archivos detenidamente ayudará a aclarar las conexiones y dependencias entre los archivos. Algunos directorios también tienen un archivo Léame, que es una descripción de los archivos del directorio y también es útil para comprender el código fuente del kernel.
El método u orden de lectura se divide en vertical y horizontal. La lectura vertical se refiere a la lectura paso a paso según el orden de ejecución del programa; la lectura horizontal se refiere a la lectura módulo por módulo. Estos dos métodos se utilizan a menudo en combinación. 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.