2008-09-13 10 views
36

Siempre me atrajo el mundo de la piratería de kernel y los sistemas integrados.
¿Alguien ha recibido buenos tutoriales (+ hardware fácilmente disponible) para comenzar a jugar con esas cosas?
Algo así como kits para escribir controladores, etc., que vienen con buena documentación y son asequibles?¿Hackear kernel de aprendizaje y desarrollo integrado en casa?

Gracias!

+1

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 –

+0

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 –

+0

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 –

Respuesta

33

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.
3

Para Linux embebido piratería, simple router Linksys WRT54G que se puede comprar en todas partes es una plataforma de desarrollo en su propia http://en.wikipedia.org/wiki/Linksys_WRT54G_series:

El WRT54G es notable por ser el primer dispositivo de red a nivel de consumidor que tuvo su firmware código fuente lanzado para satisfacer las obligaciones de la GPL de GNU. Esto permite a los programadores modificar el firmware para cambiar o agregar funcionalidad al dispositivo. Varios proyectos de firmware de terceros proporcionan al público un firmware mejorado para el WRT54G.

He intentado instalar OpenWrt y DD-WRT firmware en él. Puede verificarlos como punto de partida para hackear una plataforma de bajo costo.

1

Algunas cosas para estar preparados para:

  • podrás compilación cruzada. El dispositivo incrustado utilizará una CPU MIPS, PowerPC o ARM, pero no tendrá suficiente potencia de la CPU, memoria o almacenamiento para compilar su propio kernel en un período de tiempo razonable.
  • Un sistema integrado a menudo utiliza un puerto serie como consola, y para reducir el costo, generalmente no hay ningún conector soldado en las placas de producción. La depuración del pánico del núcleo es muy difícil a menos que pueda soldar en un conector de puerto serie, no tendrá mucha información sobre lo que salió mal.

La Linksys NSLU2 es una forma económica de obtener un sistema integrado real con el que trabajar, y tiene un puerto USB para agregar periféricos. También se puede usar cualquiera de varios puntos de acceso inalámbrico, consulte OpenWrt compatibility page. Tenga en cuenta que los modelos actuales del Linksys WRT54G que encontrará en las tiendas ya no se pueden usar con Linux: tienen menos RAM y Flash para reducir el número de puntos de acceso inalámbrico. costo. Cisco/Linksys ahora usa vxWorks en el WRT54G, con una huella de memoria más pequeña.

Si realmente desea participar, los kits de evaluación para CPU integradas comienzan en un par de cientos de dólares estadounidenses. Recomiendo no gastar dinero en estos a menos que lo necesite profesionalmente para un trabajo o contrato de consultoría.

3

Para empezar, la mejor manera es leer un montón de código. Dado que Linux es de código abierto, encontrará docenas de controladores. Encuentra uno que funcione de alguna manera, como lo que quieres escribir. Encontrará un código decente y relativamente fácil de entender (el dispositivo de retroalimentación, ROM fs, etc.)

También puede usar el lxr.linux.no, que es el código de Linux con referencias cruzadas. Si tiene que averiguar cómo funciona algo, y necesita ver el código, esta es una buena y fácil manera.

También hay un libro de O'Reilly (Comprensión del kernel de Linux, la 3ª edición es sobre los kernels 2.6) o si quiere algo gratis, puede usar el libro de programación de Linux avanzado (http://www.advancedlinuxprogramming.com/). También hay mucha documentación específica sobre sistemas de archivos, redes, etc.

5

Un absoluto debe es this libro de Rubini. (disponible como una copia impresa o una copia electrónica gratuita)

Proporciona implementaciones de varios controladores ficticios que no requieren que tenga ningún otro hardware que no sea su PC. Entonces, para comenzar a desarrollar kernel, es la forma más fácil de hacerlo.

En cuanto a hacer el trabajo incorporado, recomendaría comprar una de las numerosas SBC (computadoras de placa única) que hay por ahí. Hay varios de estos basados ​​en procesadores x86, generalmente con interfaces PC/104 (eléctricamente PC/104 es idéntico al estándar de bus ISA, pero se basa en conectores apilables en lugar de conectores de borde; es muy fácil interconectar hardware personalizado)

Suelen tener conectores vga que facilitan la depuración.

1

Soy completamente principiante en kernel hacking :) Decidí comprar dos libros "Desarrollo de programas Linux: una guía con ejercicios" y "Escribir controladores de dispositivos Linux: una guía con ejercicios" Están muy claramente escritos y proporcionan buena base para seguir aprendiendo.

Cuestiones relacionadas