Si es completamente nuevo en el desarrollo de kernel, sugiero no comenzar con el desarrollo de hardware y acceder a algunos módulos kernel "solo software" como proc file/sysfs o para ejemplos más complejos de sistemas de archivos/desarrollo de redes, desarrollando uml/vmware/virtualbox/... máquina, por lo que dañar tu máquina no te dolerá tanto :) Para el desarrollo integrado, puedes optar por un pequeño kit de desarrollo ARM o una pequeña máquina Via C3/C4, o cualquier PC vieja que puedas quemar con su dispositivo USB/PCI/homebrew.
Un buen lugar para comenzar es probablemente Kernelnewbies.org - que tiene muchos enlaces e información útil para los desarrolladores de kernel, y también presenta una lista de tareas fáciles de implementar para los principiantes.
Algunos libros para leer:
Understanding the Linux Kernel - una muy buena referencia que detalla el diseño de los subsistemas del kernel
Linux Device Drivers - se escribe más como un tutorial con una gran cantidad de código de ejemplo, se centra en conseguir que va y explicando aspectos clave del kernel de Linux. Introduce el proceso de compilación y los conceptos básicos de los módulos kernel.
Linux Kernel Module Programming Guide - Parte del material más introductoria
como se sugirió anteriormente, mirando el código de Linux es siempre una buena idea, sobre todo porque Linux Kernel API de tienden a cambiar con bastante frecuencia ... LXR ayuda mucho con una muy agradable interfaz de navegación - lxr.linux.no
Para comprender el proceso de construcción del kernel, este enlace puede ser útil:
Linux Kernel Makefiles (kbuild)
Último ¡pero no menos importante, explore el directorio de Documentación de la distribución de Kernel Source!
Éstos son algunos ejercicios interesantes robados insolencia de una clase de desarrollo del kernel:
- escribir un módulo del kernel que crea el archivo/proc/unidades de tiempo que informan de la hora actual en unidades de tiempo en cada acceso de lectura.
- Escriba un módulo kernel que proporcione el archivo proc/proc/sleep. Cuando una aplicación escribe una cantidad de segundos como texto ASCII en este archivo ("echo 3>/proc/sleep"), debe bloquearse durante la cantidad de segundos especificada. Los accesos de escritura no deberían tener ningún efecto secundario sobre el contenido del archivo, es decir, en los accesos de lectura, el archivo debería aparecer vacío (ver LDD3, cap.6/7)
- Escribir un archivo de proceso donde se pueda almacenar algo de texto temporalmente (usando echo "blah">/proc/pipe) y sácalo de nuevo (cat/proc/pipe), limpiando el archivo. Tenga cuidado con los problemas de sincronización.
- Modifique el módulo de ejemplo de canal para registrarlo como un dispositivo de caracteres/dev/pipe, agregue la asignación de memoria dinámica para solicitudes de escritura.
- Escriba un sistema de archivos realmente simple.
Todo el mundo solo menciona Linux: considere mirar FreeBSD u otra * variante BSD. Ya que se basaron en el código desarrollado en una universidad y las personas involucradas estaban enseñando cursos basados en este código. Podría argumentarse que podría ser la mejor experiencia de aprendizaje. También está http://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0201702452 para obtener una buena descripción –
También está http://www.amazon.com/TCP-IP-Illustrated -Vol-Implementation/dp/020163354X/ref = sr_1_2? S = books & ie = UTF8 & qid = 1296814492 & sr = 1-2 que es un excelente tutorial de código * de la pila TCP/IP de BSD. Los otros libros de la serie también son muy recomendables. Por cierto, esta pegajosidad TCP/IP también se usa en muchos sistemas incrustados en tiempo real, como p. http://www.rtems.org –
Si quiere saber cómo funcionan los sistemas operativos, consulte http://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/0470128720/ref=sr_1_1 ? ie = UTF8 & s = books & qid = 1296814961 & sr = 1-1 y por supuesto los libros de Andy Tannenbaum –