Símbolo desconocido en el módulo, pero ¿qué símbolo?

Símbolo desconocido en el módulo, pero ¿qué símbolo?

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 .kode 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á.

información relacionada