Quiero entender el código del kernel de Linux, y lo he estado revisando, pero no puedo tener una idea completa de lo que está sucediendo (me estoy concentrando en la parte de la red del kernel de Linux), así que cualquiera de ustedes puede sugerir algo bueno prácticas de lectura de código C (o cualquier otro idioma) en general y específico para la parte de red del kernel de Linux. Gracias por adelantado
c
linux-kernel
davidhaskins
fuente
fuente
Respuestas:
Si necesita aprender C leyendo primero, entonces el núcleo de Linux no es donde comenzaría: es un programa bastante atípico de bajo nivel (aunque he encontrado que está bastante bien estructurado).
Más bien, mire el código fuente de algún programa de utilidad BSD, por ejemplo, aquellos en OpenBSD . Lea su página de manual para obtener una especificación semiformal de alto nivel del programa.
Tome una copia de la lectura de códigos de Spinellis y / o la práctica de programación de Kernighan y Pike .
Finalmente, lea un buen libro sobre componentes internos del núcleo de Unix o Linux y comience a leer el núcleo. (Descubrí que el diseño del sistema operativo Unix de Maurice J. Bach (ca. 1986) sigue siendo un buen comienzo, incluso para Linux.
fuente
Lo que me sorprendió ver cuando intenté hacer lo mismo (que quieres hacer) es encontrar tan pocos comentarios relevantes (si los hay) en un código tan complejo.
La documentación debe ser el código, correcto, pero la función de comentarios existe en el lenguaje de programación C por alguna razón.
Si se han eliminado, probablemente también sea por una razón: para mantenerte alejado de él.
Dudo sinceramente que todos los desarrolladores de kernel tengan que trabajar en esta base de código limpiada y mi opinión es que (al menos) el autor de cualquier "característica" del kernel (como epoll, por el bien de la discusión) mantiene Una versión privada del código CON todos esos comentarios faltantes.
¿Por qué creo esto?
Un destacado desarrollador de kernel, tratando de convencerme de que publique el código fuente del servidor G-WAN como código abierto, me aconsejó "hacer que sea lo más difícil de leer".
Agregó que esta táctica funcionó maravillosamente para él durante décadas en todos sus proyectos de "código abierto".
Controlar cualquier parte crítica de un proyecto de "código abierto" ampliamente utilizado obviamente crea oportunidades cuando sus ingresos provienen exclusivamente de la consultoría.
Entonces, volviendo a su pregunta, lo más útil que puede hacer para comprender este código es estudiarlo paso a paso y AGREGAR los comentarios que faltan.
Luego, progresivamente, comenzará a tener sentido (y descubrirá por qué se han eliminado los comentarios).
fuente
i++ // increment i by 1
Lo que a veces me ayuda es depurar el código. La visualización de los datos reales y las rutas reales tienden a hacerme más comprensible. Como lo señalaron otros miembros, el código del kernel de Linux es un mal punto de partida para comprender c.
fuente