Me gustaría escribir un controlador de dispositivo Linux para algún dispositivo de hardware real. ¿Qué periféricos Raspberry Pi se ajustan bien? Básicamente necesito lo siguiente:
Debe ser lo suficientemente pequeño para un principiante (pocos meses como máximo, mejor unas pocas semanas).
La hoja de datos debe estar disponible. Al principio estaba pensando en el adaptador USB-Ethernet, pero parece que tiene una hoja de datos muy limitada.
¿Algunas ideas? ¿Puede ser algo así como hacer que la consola serie funcione sobre GPIO?
Respuestas:
Puede ser difícil aprender a escribir controladores al interactuar con dispositivos complicados y / o buses complicados. Debido a eso, recomendaría usar algunos dispositivos simples y conocidos (ignorando la implementación existente de sus controladores en el núcleo) como dispositivos I²C / SPI que generalmente se usan con microcontroladores. Por ejemplo, podría encontrar cualquier dispositivo que sea "compatible" con la comunidad Arduino (lo que significa que hay una biblioteca / documentación para él) e intente usarlo con RaspberryPi.
Si eso no es suficiente o no desea comprar demasiado hardware, puede crear uno usted mismo. Simplemente obtenga un microcontrolador (como atmega o algo así), cree un programa para que se convierta en un dispositivo y luego intente interactuar con él utilizando controladores de Linux. De esta manera, puede crear fácilmente programas que emularán diferentes clases de dispositivos. Y como usted mismo escribirá su "firmware", lo ayudará a depurar problemas.
Necesitas algunas habilidades de programación de microcontroladores para eso, pero no es difícil aprender a programar con Arduino y creo que de todos modos es un conocimiento útil para el programador de controladores.
fuente
BCM2835 ARM Peripherals
documento. Pero recuerde que para usarlo, primero debe deshabilitar el controlador existente en el núcleo.Personalmente, comenzaría con un dispositivo muy simple, como uno o más LED conectados directamente a los pines GPIO.
Puede comprar un dispositivo listo para enchufar o cablear el suyo.
La razón por la que sugeriría esto es que la depuración de controladores es generalmente mucho más difícil que un programa normal, por lo tanto, un desafío simple para comenzar es útil, también puede usar ese código como método de depuración para dispositivos más complejos (estado a un pin GPIO para conectar a un osciloscopio) donde el tiempo es importante.
Si es de interés, hay un controlador de kernel para LedBorg disponible aquí , la fuente debería ser un ejemplo razonablemente simple para manejar pines GPIO en un intervalo regular.
fuente
El "dispositivo" más simple para el que puede escribir un controlador de hardware (si el desarrollo del controlador de hardware es lo suyo) también puede ser tan simple como un LED (agregué las comillas porque técnicamente un LED no es un dispositivo, pero sigue siendo una pieza de hardware) como ha sugerido @PiBorg.
Otras opciones serían algunos dispositivos / componentes fáciles de interactuar, como fotoresistores, sensores infrarrojos pasivos (abreviatura: PIR), sensores de temperatura, ventiladores de PC (preferiblemente un ventilador de 4 cables que le permite no solo monitorear sino también controlar el RPM), matrices de puntos LED, etc. Básicamente, estos dispositivos simples le permitirán tener el mínimo de hardware (para que pueda ver y tocar lo que realmente ha logrado) y al mismo tiempo puede aprender sobre muchos temas que se utilizan para dispositivos mucho más complejos donde La complejidad proviene principalmente del protocolo que utilizan.
Tenga en cuenta también que no necesita hacer un esfuerzo adicional para cavar en los módulos del kernel. Por supuesto, si quieres hacer eso, nadie te detendrá. :)
Aquí hay un ejemplo de interfaz de un sensor infrarrojo pasivo (voy a probarlo pronto cuando se entregue mi PIR: 3). Puede tomar esto y comenzar a profundizar en el mundo del kernel de Linux para ver cómo, por ejemplo, puede crear un controlador de kernel, que funcione con el PIR.
fuente