No puede transferir datos directamente desde el contexto de interrupción al contexto de espacio de usuario. En el proceso de interrupción no hay información del proceso, por lo que no sabe a dónde enviar los datos. Debe usar el contexto de proceso intermedio desde el espacio del núcleo.
Ahora, para responder la pregunta. En los datos de su dispositivo, tendrá un búfer en el que almacenará datos del contexto de interrupción. Debe proteger sus datos utilizando spinlocks pero sin la parte irqsave / irqrestore. Porque estás en un contexto de interrupción.
Luego, su dispositivo ofrecerá una forma para que el espacio de usuario obtenga estos datos. Usted decide a través de un dispositivo char o un socket de enlace de red o una llamada ioctl o cualquier otro método. Cuando el espacio del usuario requiera estos datos, se memcpy
desde el búfer del dispositivo al búfer del espacio del usuario. Pero protegerá el búfer del dispositivo utilizando el par spin_lock_irqsave
/ spin_lock_irqrestore
porque no desea que un código de interrupción se interrumpa.
- ¿Cómo se implementan los puntos de observación de hardware en gdb?
- ¿Arduino es un ejemplo de un sistema integrado o no? ¿Cuáles son los campos donde se usa?
- ¿Es necesario aprender sobre la arquitectura del kernel y la programación del controlador del dispositivo para convertirse en un desarrollador integrado? ¿Cuál es la importancia de eso?
- ¿Puedo usar Windows Embedded 8.1 Industry Pro para mi PC como sistema operativo general?
- ¿Los robots tienen sistemas integrados en ellos?
Cuando el espacio de usuario utiliza uno de los métodos presentados anteriormente ( read
dispositivo char, socket de enlace de red, ioctl
, …) el núcleo se encarga de proporcionar un mecanismo de bloqueo, pero para la interfaz entre el espacio de usuario y el proceso.