¿Cuáles son algunos proyectos pequeños e interesantes del kernel de Linux para ayudar a aprender la fuente?

StackOverflow https://stackoverflow.com/questions/135637

Pregunta

¿Qué pequeños proyectos le sugerirían a un principiante con el kernel, pero a alguien que tenga muchos sistemas y experiencia en C? El objetivo es desarrollar una familiaridad con el código fuente del kernel y una facilidad para experimentar con ideas locas.

Estoy tratando de pensar en algunas tareas pequeñas y manejables (por ejemplo, agregar una syscall), pero ¿qué sugerirías? Para un público objetivo, piense en alguien que tenga al menos un curso de licenciatura en sistemas operativos.

¿Fue útil?

Solución

Cuando tomé el curso de pregrado de OS mencionado anteriormente, una de nuestras tareas fue agregar algunos syscalls. Eran extremadamente simples, nada más que leer y restablecer contadores que contaban el número de veces que se invocaban otras llamadas al sistema. Sin embargo, agregar un syscall requiere mirar y modificar bastantes archivos ... muchos de ellos están en el mismo subárbol relativamente pequeño de la fuente del kernel, pero es suficiente para familiarizarse con las convenciones de codificación, al menos.

También puedes considerar:

  • Agregar otro modo (muy simple) al programador para implementar una política que le resulte interesante. La " una implementación para gobernarlos a todos " es bastante difícil (e incluso más difícil de acordar), pero hacer un programador O (N) simple, incluso un programador O (1) rudimentario, se puede hacer de forma relativamente simple, algorítmicamente hablando. Aun así, se requiere hojear un montón de código.

  • Escriba un controlador de dispositivo para una pieza muy simple de hardware externo, como un microcontrolador de 8 bits que se comunica a través de una serie, o incluso algo que usted mismo construye. Si tiene alguna experiencia de hardware, tal vez intente escribir un controlador de dispositivo que pueda emular un controlador NES (golpear unos cuantos cables utilizando el puerto serie y tal vez un registro de desplazamiento de serie a paralelo). También puede hacer algo como manejar una pantalla LED de 7 segmentos realmente simple (como la que tiene en un reloj de alarma), o una pequeña colección de ellos.

Otros consejos

El proyecto Kernel Janitors tiene algunos excelentes.

A riesgo de iniciar una guerra de llamas: te recomiendo que te mantengas alejado del código del kernel de Linux. Si quieres ensuciarte las manos con la programación del kernel, ve con FreeBSD, NetBSD o OpenSolaris, por ejemplo. El código es mucho más limpio y está mejor estructurado (esto es, por supuesto, una opinión subjetiva), está realmente diseñado e incluso documentado. Además, tienen un depurador del kernel (tenga en cuenta que Linus está en contra de los depuradores del kernel y la API estable del kernel, lo que hace que cualquier kernel sea un objetivo móvil para su trabajo). Estos sistemas operativos incluso tienen una lista de proyectos en sus respectivos sitios web, y personalmente tengo una experiencia extremadamente buena con las personas en los foros de OpenSolaris y en las listas de correo de NetBSD.

Usted dice que tiene experiencia con C: consulte los repositorios de código fuente de Linux y OpenSolaris o algunos de los BSD, compare el código y forme su propia opinión. Lo que estoy diciendo es, supongo, que hay más para UNIX de código abierto que Linux, y que al menos deberías mirarlos antes de ir a Linux.

Un buen lugar para comenzar es un proyecto basado en Unix v6 . " Xv6, un simple sistema operativo de enseñanza similar a Unix "

También hay cynix , un simple kernel monolítico similar a Unix IA-32 (sin mantenimiento)

Un excelente tutorial es " Haga rodar su propio sistema operativo UNIX con clon de juguete " ;.

Intente descargar el código fuente de MINIX  y juegue con él, intente comprender la lógica y tomará tiempo, sin duda, pero si se apega a ella, puede ser un experto en algún momento

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top