Cómo aprender los controladores de dispositivos Linux a través de Internet.

Lo primero sería averiguar qué es lo que quieres lograr. Si desea trabajar en algún hardware específico (por ejemplo, controladores de pantalla o tarjetas gráficas), muchas veces no tiene suerte de aprenderlos por su cuenta. No porque no tenga inteligencia para ello, sino que simplemente no tendrá acceso a las especificaciones de hardware internas para la mayoría de estos dispositivos. (Si aún desea buscar algún hardware específico, descargue las fuentes del kernel de Linux, encuentre el tipo de controlador que le interesa, comience a leer el código e intente averiguar cómo funciona; tal vez realice modificaciones propias y vea cómo funcionan).

Escribir controlador de dispositivo en mi experiencia tiene 2 partes; la primera parte es interactuar con el kernel y sus marcos, la segunda parte es interactuar con el hardware en sí mismo, que con frecuencia requiere especificaciones de hardware y diseños de registro interno (de modo que, a menos que trabaje para una empresa, es probable que no tenga esos).

Dicho esto, la mayoría de las veces, la alternativa a escribir un controlador hw “real” es crear un controlador de pseudo dispositivo (simplemente software) o comprar un hardware simple que viene con diseños de registro e intentar programarlo.

Uno de estos dispositivos se puede encontrar aquí (Escribir un controlador USB simple) junto con una introducción a la escritura de un controlador USB. Tenga en cuenta que el artículo es bastante antiguo (con fecha de 2004), por lo que muchas cosas no serán compatibles con el código; sin embargo, el hardware todavía está (¿estaba?) disponible (a partir del año pasado cuando lo compré).

Para los controladores de software puros, puede crear sus propios proyectos con bastante facilidad. Digamos crear un controlador que proporcione algunos recursos a la aplicación o permita compartir esos recursos; Los recursos aquí podrían ser tan simples como un byte de datos o algún mecanismo de IPC para comunicaciones entre múltiples procesos.