Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo empezar a leer el código fuente del kernel de Linux?

¿Cómo empezar a leer el código fuente del kernel de Linux?

Soy ingeniero de pantallas de Android y hablaré según la experiencia laboral real (las opiniones pueden no ser correctas)

1. Preparación: qué versión elegir y qué herramientas usar, todas deben serlo. consideró.

Si desea consultar un libro, la versión del kernel generalmente debe sincronizarse con la versión del libro, en lugar de con la última versión. Esto se debe a que la última versión tiene más cambios que el libro en sí.

Herramientas, puede elegir Windows Source Insight o Linux Vim Ctags;

2.

En mi opinión, la parte más importante es comprender el mecanismo del módulo. comprender cómo los scripts de enlace compilados colocan los módulos en áreas específicas y cómo se cargan estos módulos después de iniciar el sistema (según qué reglas

Comprender el sistema sysfs, que es muy útil para conectar controladores al usuario); espacio importante!

Necesitamos pasar por la llamada al sistema open() para ver cómo se pasan los parámetros desde el espacio del usuario al kernel y cómo finalmente se implementa la operación open() en el open() del controlador a través del sistema vfs. ;

También debe tener un poco de conocimiento del algoritmo de asignación de memoria durante el proceso de inicio del kernel;

También debe tener un poco de conocimiento del algoritmo de asignación de memoria para cambiar del kernel. algoritmo asociado al algoritmo final.

También debe tener un ligero conocimiento del algoritmo de asignación de memoria para cambiar del algoritmo de compañero al algoritmo final;

También debe tener un ligero conocimiento del algoritmo de asignación de memoria para cambiar del algoritmo de compañero al algoritmo final.

Debe tener un concepto del proceso de implementación de la estructura de datos básica y del proceso de implementación del mecanismo de bloqueo en el kernel:

Para resumir esta parte, la ruta que debe considerar es:

p>

start_kernel()

Implementación de la macro module_init() // Mirando esto, se recomienda encarecidamente bifurcar la verdadera intención del makefile

sistema open() call

() Llamada al sistema

Implementación del marco sysfs

Cómo se implementa la lista doble enlazada;

Cuál es el final ¿Garantía para la cerradura? (De hecho, está garantizado por hardware)

En cuanto a la estructura de datos y los bloqueos, simplemente siga el contenido de "Diseño e implementación del kernel de Linux" para aprender uno por uno. Si está interesado, también puede implementar la API de **** pública de lista doble enlazada. Una vez utilizada en cualquier proyecto, no está mal simplemente incluirla.

Cuando lo busqué por primera vez, pensé: después de leer el contenido anterior, el código del kernel todavía te resulta difícil, pero ya no hay ningún misterio.

En el futuro, si deseas estudiar un determinado módulo, simplemente ubícate allí rápidamente.

3. Después de leer completamente la parte anterior con los ojos, es posible que hayas encontrado el núcleo, pero aún no hayas dado el primer paso en la larga marcha. En este momento, es particularmente importante actuar.

Existen varios métodos en Internet, como suscribirse a los errores en la lista de correo del kernel y luego intentar resolver los errores usted mismo. Este método es recomendable y muy bueno. Una pregunta que surge aquí es, ¿cómo depuramos esto?

Algunas personas configuran varias máquinas virtuales o varias máquinas físicas para que funcionen juntas, y esto también se puede hacer. (Pero mi capacidad práctica es realmente limitada, así que nunca he hecho esto. Lo hice más tarde con la ayuda de la junta de desarrollo de la empresa)

Si eres como yo, tu capacidad práctica es no es suficiente si tiene un teléfono móvil o un teléfono móvil similar. Si es una empresa de desarrollo, puede utilizar directamente la máquina de desarrollo de la empresa, registrar registros a través del puerto serie, establecer el nivel de printk () en 3 e imprimir. saque la información que necesita;

Si desea utilizar la máquina de desarrollo de la empresa, puede imprimir la información que necesita a través del puerto serie.

Si eres estudiante o aficionado, puedes gastar unos 500 yuanes para comprar una placa de desarrollo en Taobao, que también tiene un puerto serie. Toda la información de depuración se imprime a través del puerto serie y se guarda en un. Archivo de registro, y luego analicemos nuevamente;

En cuanto a qué tipo de placa comprar, puede elegir a voluntad. El clásico s3c2440 estará bien, una Raspberry Pi de alta gama, Allwinner o cualquier otra cosa. Estará bien. (No se recomienda Quanzhi. Agregan y modifican una gran cantidad de hardware y el controlador puede ser difícil de arreglar)

4. Elija el módulo que desee, estúdielo en profundidad, imprímalo a través del registro. Y piénselo una y otra vez. En este momento, el error es el mejor mentor. Preste más atención a los documentos en el directorio kernel/Documentos/.

Tenga cuidado de eliminar contenido que sea irrelevante para el módulo. De lo contrario, la vida es limitada y el código es ilimitado.

La última frase es que después de leer y pensar con los ojos, debes hacerlo y luego volver a pensar. De lo contrario, si sólo lees, sólo sabrás leer.