Estoy tratando de recibir una notificación cuando el USB está conectado y desconectado. Así que estoy tratando de implementar señales. Creé un archivo "file1" en debugfs. Luego proporcioné una operación simple de escritura de archivos.
En el espacio de usuario hay una aplicación de espacio de usuario, que escribirá su PID en el "archivo1" de debugfs.
En el espacio del kernel, puedo pasar el PID usando el método de escritura mencionado anteriormente. Pero quiero usar este PID en un módulo de kernel diferente. Así que intenté usar EXPORT_SYMBOL(); , pero si no incluyo el archivo de encabezado común, obtengo un error de compilación. Si incluyo el archivo de encabezado, cuando muestro la imagen, veo que el PID es '0'.
¿Alguien puede decirme si esta es la manera correcta? O dime dónde me estoy equivocando. ¿O puedo recibir una notificación en un módulo del kernel diferente cuando el PID se escribe en el archivo? ¿Si es así, cómo?
EXPORT_SYMBOL() es el enfoque correcto. No entiendo muy bien lo que quiere decir con "si no incluyo el archivo de encabezado común". Parece que está incluyendo EXPORT_SYMBOL() en un archivo de encabezado compartido que no es lo que desea hacer. Quieres hacer algo como lo siguiente:
module1.c (se compila en module1.ko)
int my_exported_variable; EXPORT_SYMBOL(my_exported_variable); // The rest of module1.cY luego en module2.c (se compila en module2.ko, que debe ser insmod-ed después de module1.ko)
extern int my_exported_variable; // Note the extern, it is declaring but not defining it, the definition is in module1 // The rest of module2.c Después de instalar el primer módulo, puede verificar que el símbolo se exporte haciendo un grep my_exported_variable /proc/kallsyms , asumiendo que tiene /proc/kallsyms en su sistema. Si no ve su variable allí, entonces el insmod de module2.ko fallará en un símbolo no resuelto.