Si entiendo tu pregunta, este artículo suena como lo que estás buscando. El artículo se titula:Controladores de dispositivos en el espacio del usuario.
extracto
Controladores UIO
Linux proporciona un marco UIO (E/S de usuario) estándar para desarrollar controladores de dispositivos basados en el espacio del usuario. El marco UIO define un pequeño componente del espacio del kernel que realiza dos tareas clave:
- a. Indique las regiones de memoria del dispositivo al espacio del usuario.
- b. Regístrese para las interrupciones del dispositivo y proporcione una indicación de interrupción al espacio del usuario.
El componente UIO del espacio del kernel luego expone el dispositivo a través de un conjunto de entradas sysfs como /dev/uioXX. El componente de espacio de usuario busca estas entradas, lee los rangos de direcciones del dispositivo y los asigna a la memoria del espacio de usuario.
El componente de espacio de usuario puede realizar todas las tareas de administración de dispositivos, incluida la E/S del dispositivo. Sin embargo, para las interrupciones, debe realizar una lectura de bloqueo () en la entrada del dispositivo, lo que da como resultado que el componente del kernel ponga la aplicación de espacio de usuario en suspensión y la active una vez que se recibe una interrupción.
Nunca había hecho esto antes, así que no puedo ofrecerte mucha más orientación que esta, pero pensé que podría ser útil para tu búsqueda.
Pensando en la misma línea que @RBerteig, el BeagleBone Black contiene microcontroladores de 32 bits de unidades programables en tiempo real (PRU).
No parece que haya una gran comunidad usando estas cosas a plena capacidad. Ni siquiera estoy seguro de que haya un buen compilador para esto. Las ventajas sobre un ensamblaje de un SBC y un microcontrolador o placa de microcontrolador son que el código PRU puede provenir del ARM principal y la memoria compartida es bastante conveniente.
No puedo decir que haya usado esto, o incluso que ya haya ejecutado más que algunos ejemplos en mi BeagleBone Blacks, pero las necesidades expresadas en esta pregunta podrían ser una de esas cosas que pueden empujar a un desarrollador con estas necesidades hacia el Negro y lejos del Pi.