Símbolo desconhecido no módulo, mas qual símbolo?

Símbolo desconhecido no módulo, mas qual símbolo?

Eu compilo um driver seguindo as documentações. Mas quando tento carregá-los via

insmod onebox_wlan_nongpl.ko

, recebo uma mensagem de erro:

insmod: Erro: não foi possível inserir o módulo onebox_wlan_nongpl.ko: Símbolo desconhecido no módulo

Eu sei que isso se deve à ordem errada de carregamento .kodos arquivos, mas isso não me diz de qual módulo ele depende. Gostaria de saber qual símbolo é desconhecido para arquivar o módulo que devo carregar primeiro.

Responder1

Você pode simplesmente verificar os símbolos ausentes no dmesg usando dmesg | tail. Se você quiser verificar se os símbolos estão realmente em sua tabela de símbolos, verifique usando cat /proc/kallsyms | grep <function_name> um problema semelhante: https://ubuntuforums.org/showthread.php?t=1360950

Responder2

Para ver quais símbolos estão realmente faltando, consulte o log do kernel usando dmesg. Ele mostrará os símbolos exatos. Se você mesmo escreveu o módulo do kernel e ele, por exemplo, depende de uma estrutura como a estrutura de mapeamento de dispositivos, a dependência deve ser carregada primeiro. Aqui está um exemplo que encontrei:

Eu escrevi ummapeador de dispositivos, que depende da estrutura de mapeamento de dispositivos. Na inserção, isso acontece:

$ sudo insmod some-module.ko
insmod: ERROR: could not insert module some-module.ko: Unknown symbol in module

Inspecione o log do 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)
...

Inspecione os módulos carregados:

$ lsmod | grep dm
<NOTHING>

Insira o driver de destino de mapeamento de dispositivo:

$ sudo modprobe dm_mod
$ lsmod | grep dm
dm_mod            184320 0

Agora insira o módulo original e o erro será resolvido.

informação relacionada