2008-09-25 13 views
13

¿Qué proyectos pequeños sugerirías a un novato con el kernel, pero alguien que tenga muchos sistemas y experiencia en C? El objetivo es desarrollar una familiaridad con el código fuente del núcleo, y una facilidad para la experimentación con ideas locas.¿Cuáles son algunos proyectos de kernel de Linux pequeños e interesantes para ayudar a aprender la fuente?

Estoy tratando de pensar en algunas pequeñas tareas manejables (por ejemplo, agregar un syscall), pero ¿qué sugieres? Para un público objetivo, piense en alguien que tenga al menos un curso de pregrado en el sistema operativo.

Respuesta

5

Cuando tomé el curso de pregrado en el sistema operativo, una de nuestras tareas fue agregar algunas llamadas al sistema. Eran extremadamente simples, nada más que leer y restablecer los contadores que contaban la cantidad de veces que se invocaron otras llamadas de 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 núcleo, pero es suficiente para familiarizarte con las convenciones de codificación, al menos.

También puede considerar:

  • La adición de otro modo (muy simple) al programador para implementar una política que le parezca interesante. La "única implementación para gobernarlos a todos" es bastante difícil (y aún más difícil de acordar), pero hacer un simple planificador de O (N), incluso un programador O (1) rudimentario, puede hacerse de manera relativamente simple, algorítmicamente hablando. Aun así, requiere hurgar en un montón de código.

  • Escribir un controlador de dispositivo para una pieza muy simple de hardware externo, como un microcontrolador de 8 bits que se comunica en serie, o incluso algo que construya usted mismo. Si tiene alguna experiencia de hardware, tal vez intente escribir un controlador de dispositivo que emule un controlador NES (utilice unos pocos cables usando el puerto serie y tal vez un registro de desplazamiento de serie a paralelo). También podría hacer algo como conducir una pantalla LED de 7 segmentos realmente simple (como la que tiene en una alarma de reloj), o una pequeña colección de ellos.

5

A riesgo de comenzar una guerra de llamas: recomendaría que se mantenga 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 mejor estructurado (esto es, por supuesto, una opinión subjetiva), realmente diseñado e incluso documentado. Además, tienen un depurador de kernel (tenga en cuenta que Linus está en contra de los depuradores del kernel y de la API estable del kernel, lo que hace que cualquier núcleo sea un objetivo móvil para su trabajo). Estos OS-es incluso tienen una lista de proyectos en sus respectivos sitios web, y personalmente tengo una muy buena experiencia con personas en foros de OpenSolaris y listas de correo de NetBSD.

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

+0

[cita requerida] de Linus estar en contra de los depuradores de kernel? Soy consciente de su razón de ser en contra de comprometerse con una API. – pjc50

+2

¿Es esta citación lo suficientemente buena: http://www.linuxtoday.com/news_story.php3?ltsn=2000-09-07-002-21-OS-CY-KN – zvrba

1

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

También hay cynix, un simple IA-32 kernel monolítico de tipo Unix (Unmaintained)

Un gran tutorial es "Roll your own toy UNIX-clone OS".

0

Intente descargar el código fuente del MINIX y jugar con él, tratar de comprender la lógica y que llevará tiempo, sin duda, pero si usted se pega a ella se puede ser un experto en algún tiempo

Cuestiones relacionadas