¿Pueden dos módulos de kernel diferentes obtener acceso a la misma área de memoria desde una llamada a ioremap_nocache ()?
Tengo un controlador inalámbrico y un módulo separado, me gustaría que el módulo separado perfile los valores de ruido en la tarjeta, mientras el controlador todavía está funcionando. De ahí mi pregunta anterior.
Una de las vías que exploré fue iniciar un hilo del núcleo desde el controlador, luego implementé un semáforo para evitar cualquier condición de carrera que surja de lecturas / escrituras concurrentes en el mismo espacio de direcciones. Esperaba que un hilo secundario pudiera acceder a la misma área de memoria.
Lamentablemente, esto no ha funcionado como esperaba. Apreciaria cualquier sugerencia.
Respuestas:
Supongo que tiene la intención de implementar otro módulo del núcleo, ya que cree que es más fácil compartir datos entre los módulos del núcleo. Pero tal vez no sea una buena opción. Si es posible 'perfilar el ruido' en el espacio del usuario, creo que una mejor solución es implementar el 'generador de perfiles' en el espacio del usuario.
En esta solución, el generador de perfiles de espacio de usuario lee datos, realiza algunos cálculos y luego envía el resultado.
Si esta solución está bien, la implementación es la siguiente.
En el módulo del kernel, es solo para registrar un dispositivo char en '/ proc' e implementar primitivas 'read' y 'write'. En el espacio del usuario, es solo para implementar el generador de perfiles, leer y escribir en el dispositivo char. Los detalles y la información para esta implementación están aquí .
fuente