¿Hay recursos para aprender a escribir controladores?

26

Tengo una buena cantidad de experiencia diseñando hardware y sistemas integrados en general, pero nunca he escrito un controlador para un sistema operativo.

Me gustaría saber si hay buenas guías, preferiblemente en línea, aunque me interesarían buenos libros, que me darán un buen comienzo sobre lo que necesito saber para diseñar e implementar controladores para un sistema operativo.

Esto probablemente hará que la gente me dispare, y aunque me encantaría ver una buena guía sin importar en qué sistema operativo esté basada, me gustaría ver una guía que esté basada en Windows, principalmente debido al hecho de que la mayoría de las personas Vendería un producto que tendría ventanas.

Avíseme si hay información adicional que pueda agregar para aclarar esto.

Kortuk
fuente
1
Gran pregunta, también estoy interesado en este.
Sr. Erizo
Acepté la respuesta más amplia. Para obtener información para cada sistema operativo, me gustó la respuesta. La respuesta de Joby fue excelente específica para Linux. Me costó mucho decidir.
Kortuk

Respuestas:

10

La mayor parte de mi experiencia reciente en la escritura de controladores de sistema operativo reales ha sido con Linux, y la mejor referencia de IMO es Linux Device Drivers, 3rd Edition de Jonathan Corbet, Alessandro Rubini y Greg Kroah-Hartman (2005), que ya se ha mencionado. Está disponible en Amazon , Safari Books On-Line , y también como descarga gratuita .

Un par de libros más sobre el mismo tema son Essential Linux Device Drivers , de Sreekrishnan Venkateswaran (2008) (también disponible en Safari Books Online ) y Writing Linux Device Drivers: una guía con ejercicios (Volumen 3) del Dr. Jerry Cooperstein (2009).

Para los controladores de dispositivos de Windows, el último libro sobre el tema (publicado hace dos semanas) parece ser el Controlador de dispositivos de Windows 7 , de Ronald D. Reeves, Ph.D. (2010) También está disponible en Safari Books Online .

Un libro antiguo, que cubriría Windows XP, es: Programación del modelo de controlador de Microsoft Windows, segunda edición , de Walter Oney (2002). También está disponible en Safari Books Online .

Otro libro, que parece estar agotado pero disponible en Safari Books Online, es Desarrollando controladores con Windows Driver Foundation , de Penny Orwick y Guy Smith (2007). Supongo que cubriría Windows Vista.

Finalmente, Microsoft tiene punteros a muchos blogs, etc., sobre el desarrollo de controladores.

tcrosley
fuente
Gracias, sugeriría que tu publicación también tenga un enlace a "Controladores de dispositivos Linux" De lo contrario, muy minucioso.
Kortuk
11

Un buen controlador encapsula las capacidades del hardware y las pone a disposición del SO / aplicaciones de forma natural.

La mejor forma de hacerlo depende en gran medida del sistema operativo al que se dirige y para qué tipo de hardware es el controlador.

Mi experiencia es todo con Linux y OSen personalizado en tiempo real.

Para Linux, recomendaría leer los controladores de dispositivo de Linux . Es una buena introducción a los diferentes sabores de los controladores de Linux y las abstracciones que el sistema operativo les proporciona.

Los dispositivos como los puertos serie donde los datos se leen secuencialmente generalmente son manejados por controladores de dispositivos de caracteres con un nodo de dispositivo en el espacio de usuario para que las aplicaciones lean. catPuede leer de estos.

Los dispositivos de acceso aleatorio como el almacenamiento flash y los discos duros son manejados por dispositivos de bloque. ddpuede acceder a estos. Para un buen ejemplo, eche un vistazo al sistema Linux MTD .

Los controladores que juegan con el hardware a bajo nivel casi seguramente necesitarán implementarse en el espacio del kernel. Puede optar por crear un módulo de kernel que se pueda cargar en tiempo de ejecución o colocar su código estáticamente en el kernel de Linux.

Los controladores que se basan en controladores genéricos existentes, como USB, pueden escribirse en el espacio de usuario. Usando, por ejemplo, libusb .

Toby Jaffey
fuente
44
Linux Device Drivers es un buen libro. Desafortunadamente, estas cosas son altamente específicas del sistema operativo. Probablemente, Linux sea el más fácil de escribir, porque ya hay muchos controladores en el árbol de origen como referencia. Si ha escrito código incrustado para controlar los periféricos de un microprocesador, probablemente tenga una buena comprensión de los fundamentos del controlador del dispositivo.
markrages
Sí, estoy eliminando mis comentarios. mi error.
Kortuk
1
Como se mencionó en las marcas, las entrañas de un controlador, que controla el hardware real, serán las mismas tanto si tiene un sistema operativo como si no. Las principales diferencias al escribir controladores son 1) las interfaces deben ajustarse en un modelo estándar (por ejemplo, abrir, cerrar, leer, escribir, ioctl) para el sistema operativo y 2) el método en el que el controlador se instala y activa.
tcrosley
1
@tcrosley, si tiene mucha información sobre esos detalles, me encantaría ver una respuesta al respecto.
Kortuk
3

No tengo ninguna experiencia en este tema, pero voy a dar mis dos centavos.

Puede comenzar aquí http://www.osr.com/index.html o aquí https://www.osronline.com/index.cfm

Aquí en Brasil tenemos un buen blog sobre este tema. Está escrito en portugués e inglés. La mayoría de los artículos están en portugués desafortunadamente.

Hay una publicación en portugués sobre libros en este blog: http://translate.google.com.br/translate?hl=pt-BR&ie=UTF-8&sl=pt&tl=en&u=http://driverentry.com.br/ blog /% 3Fp% 3D825 & twu = 1

Espero haber ayudado un poco

Daniel Grillo
fuente
Esto ayudará mucho si hago la pregunta, "¿Dónde aprendo portugués en línea a tiempo para aprender a escribir controladores?" Gracias por ayudarme.
Kortuk
2
No te preocupes por aprender portugués. Los enlaces sobre el desarrollo de unidades que pasé están en inglés. Incluso DriveEntry también está escrito en inglés. Lamentablemente, la publicación sobre libros está en portugués, pero los libros están en inglés. Y lo que más importa son los libros, no la publicación.
Daniel Grillo el