Acceso a la memoria del módulo del kernel


9

¿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.


¿Por qué necesitarías un módulo kernel para perfilar los valores de ruido?
gertvdijk

Gracias por la pregunta, el controlador inalámbrico es muy complejo, y alterar la periodicidad de sus calibraciones puede provocar algunos resultados no deseados. Tendría que hacer esto, ya que solo realiza sus calibraciones para intervalos que son demasiado largos para mis necesidades. Como sé exactamente cómo perfilar el dispositivo en un módulo separado, tengo curiosidad por saber si puedo acceder a la misma área de memoria con la que está trabajando el controlador.
Radagasp

2
Por favor, editar su pregunta para incluir todos los detalles en sus intentos previos / enfoques. Así es como funciona este sitio. No es un foro de discusión, sino un sitio de preguntas y respuestas.
gertvdijk

La discusión puede incluir preguntas y respuestas, algunas correctas y otras incorrectas; parece que la interpretación de las reglas entre los administradores está en el campo de la semántica. Por supuesto, he actualizado mi pregunta.
Radagasp

Respuestas:


7

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í .


No creo que obtenga su respuesta ... tal como lo entiendo, aún necesitaría escribir un módulo, y este módulo intentaría obtener acceso a la misma área de memoria de una llamada a ioremap_nocache () que el otro El módulo está utilizando. O ¿estás diciendo que me registro del dispositivo de caracteres en el módulo inalámbrico
Radagasp

1
Bien, tendrás que implementar un software, pero no un módulo. Tendrá que escribir un programa de espacio de usuario normal, más simple que un módulo, que lea desde '/ dev / nameofdevice' y lo escriba. No es necesario usar 'ioremap_nocache ()', solo syscalls como 'abrir', 'leer', 'escribir', 'cerrar'. Y sí, el módulo inalámbrico tendrá que registrar el dispositivo char '/ dev / nameofdevice' en el interior, para exponer los datos al usuario.
vitorafsr
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.