Compilo un controlador siguiendo la documentación. Pero cuando intento cargarlos a través de
insmod onebox_wlan_nongpl.ko
, recibo un mensaje de error:
insmod: Error: no se pudo insertar el módulo onebox_wlan_nongpl.ko: Símbolo desconocido en el módulo
Sé que esto se debe a un orden incorrecto de carga .ko
de archivos, pero no me dice de qué módulo depende. Me gustaría saber qué símbolo se desconoce para archivar el módulo que debo cargar primero.
Respuesta1
Simplemente puedes verificar los símbolos que faltan en dmesg usando dmesg | tail
. Si desea verificar si los símbolos están realmente en su tabla de símbolos, verifique usando cat /proc/kallsyms | grep <function_name>
Problema similar:
https://ubuntuforums.org/showthread.php?t=1360950
Respuesta2
Para ver qué símbolos faltan realmente, consulte el registro del kernel usando dmesg
. Le mostrará los símbolos exactos. Si usted mismo escribió el módulo del kernel y, por ejemplo, se basa en un marco como el marco de mapeo de dispositivos, primero debe cargar la dependencia. Aquí un ejemplo con el que me encontré:
escribí unmapeador de dispositivos, que depende del marco de mapeo del dispositivo. Al insertar, sucede esto:
$ sudo insmod some-module.ko
insmod: ERROR: could not insert module some-module.ko: Unknown symbol in module
Inspeccione el registro del kernel:
$ sudo dmesg
[ XX.XXXXXX] some-module.ko: Unknown symbol dm_per_bio_data (err -2)
[ XX.XXXXXX] some-module.ko: Unknown symbol dm_put_device (err -2)
...
Inspeccione los módulos cargados:
$ lsmod | grep dm
<NOTHING>
Inserte el controlador de destino de mapeo del dispositivo:
$ sudo modprobe dm_mod
$ lsmod | grep dm
dm_mod 184320 0
Ahora inserte el módulo original y el error se resolverá.