2010-02-08 8 views
50

Me gustaría aprender a escribir controladores de dispositivo porque creo que sería divertido. Uso una Macbook Mac OS X, pero también tengo una máquina Ubuntu (ejecutándose en Mac Min). Estoy bastante familiarizado con C y actualmente estoy leyendo this book. He encontrado algunos enlaces en línea como Mac Dev Center. Estoy haciendo esto porque sería divertido. Creo que sería una gran satisfacción ver que el hardware funciona por el software que escribí.¿Cómo debo comenzar a escribir controladores de dispositivos?

Supongo que lo que me gustaría es algunos consejos o consejos y orientación, y ¿alguien sabe de una lista de dispositivos que no tienen controladores o puedo escribir un controlador para algo que ya es compatible (preferiría el anterior por lo De hecho estoy proporcionando valor). ¿Cuál es un buen dispositivo para comenzar? ¿Estoy mordiendo más de lo que puedo masticar? No le temo a la programación o montaje de bajo nivel ni a la cantidad de esfuerzo que se requiera. ¡Me gustaría un desafío realmente!

+1

Como mencionó tanto * OS X * como * Linux *, ¿para qué sistema operativo serían estos controladores de dispositivo? – jschmier

+0

Cualquiera de los dos, supongo que preferiría OS X ya que esa es la computadora portátil que uso. –

+0

"dispositivos que no tienen controladores ..." ¡Cualquier dispositivo de este tipo no sería utilizable! Un fabricante de dispositivos ** tiene ** para crear un controlador, o de lo contrario no pueden vender sus productos. Habiendo dicho eso, hay algunos dispositivos muy, muy simples por ahí. – jpaugh

Respuesta

26

Para Linux, puede buscar recoger el libro O'Reilly Linux Device Drivers o leer PDFs en línea. En mi opinión, es uno de los mejores textos sobre el tema.

The Linux Kernel Module Programming Guide es otro buen recurso.

Es posible que también desee buscar un libro específicamente en el kernel de Linux. Recogí una copia de Robert Love's Linux Kernel Development (2nd Edition) para este propósito (3rd Edition en el camino).

+0

¡Gracias! ¿Cuánto trabajo es para escribir un controlador de dispositivo? ¿Es más o menos trabajo que escribir una gran aplicación compleja? Le pregunté a todos los que respondieron esta pregunta, porque realmente quiero una respuesta. ¡Gracias de nuevo! –

+1

La dificultad y cantidad de trabajo involucrado depende de la complejidad del dispositivo. Un controlador de dispositivo * tty * puede ser mucho menos complejo que un controlador de dispositivo * usb * o * pci *. – jschmier

+4

Comience por escribir primero un módulo Kernel como controlador. Programa básico de hello world. e insertando en tu Ubuntu/mac. Vea los registros del Kernel y entienda lo que está sucediendo. Luego intente registrar un controlador ficticio en un bus como (PCI o USB), y luego avance hacia agregar más funciones como lectura de escritura y llamadas IOCTL. Finalmente se puede pasar a la implementación de llamadas más complejas de los ganchos de administración de energía, suspensión, apagado. Además, si se trabaja con controladores integrados, de plataforma y DMA también puede ser una lectura interesante. – Anirudh

2

Para Mac es posible que desee echar un vistazo a Mac OS X Internals libro. Es pesado y pensativo, pero divertido de leer. Se trata principalmente de computadoras Mac basadas en PowerPC, pero tiene un apéndice sobre las basadas en Intel. Para Linux, eche un vistazo a Linux Device Drivers, 3rd Edition; es más liviano (PDF gratuitos en línea :) y realmente está orientado al controlador de dispositivo, podría ser un mejor comienzo.

+0

¡Gracias! ¿Cuánto trabajo es para escribir un controlador de dispositivo? ¿Es más o menos trabajo que escribir una gran aplicación compleja? –

+2

Hmm, en ambos casos necesita saber lo que está haciendo, por lo que necesita comprender el entorno que lo rodea, y eso proviene de la experiencia, que no obtiene hasta que lo intente :) Repase varios ejemplos de LDDv3, la fuente el código está en línea, pero está un poco desactualizado para los núcleos actuales, obtendrá una idea de lo que está involucrado y lo que le gustaría aprender a continuación. –

4

Si desea utilizar el desarrollo de controladores de dispositivos Linux, es necesario leer el libro de O'Reilly Linux Device Drivers, Third Edition disponible gratuitamente.

Para encontrar piezas de hardware no compatibles para las que podría escribir un controlador, pregunte en el Linux mailing lists. Tal vez algún dispositivo USB 3.0? ;)

+0

¡Gracias! ¿Cuánto trabajo es para escribir un controlador de dispositivo? ¿Es más o menos trabajo que escribir una gran aplicación compleja? –

17

Escribir un controlador de dispositivo puede ser bastante simple, o puede ser casi arbitrariamente complicado. Por ejemplo, he estado involucrado en un proyecto en el que a seis de nosotros nos tomó casi tres años resolver UN error en un controlador de dispositivo. Por supuesto, limpiamos docenas de otros errores mientras lo buscábamos ... el código mejoró inmensamente. La solución resultó ser un parche de ocho líneas, que costó, de manera conservadora, alrededor de un millón de dólares.

Pero, como un proyecto paralelo a eso, escribí un controlador de Ethernet de la hoja de datos del chip en una semana, y demoré otra semana en depurarlo. No he necesitado tocarlo desde entonces.

No hay manera de decir, en general, cuánto trabajo va a ser un controlador; un controlador de GPU podría costar cientos de millones, un controlador para un solo LED cuesta un par de horas de trabajo como máximo.

+5

¿Puedes compartir más detalles? Me encantaría entender el parche y por qué fue tan difícil de depurar. ¿De qué clase de dispositivo era el conductor? – Anirudh

Cuestiones relacionadas