ral*_*ldi 5 linux kernel-modules dependencies
我正在尝试为 USB DAQ 盒安装驱动程序,这很烦人,我必须自己编译。我相信我已经成功了——我有两个 .ko 文件:
-rw-r--r-- 1 root root 45271 2010-03-18 21:24 advdrv_core.ko
-rw-r--r-- 1 root root 24312 2010-03-18 21:24 usb4761.ko
Run Code Online (Sandbox Code Playgroud)
我能够在第一个上运行 insmod 没有任何意外,但是当我尝试第二个时,我收到了大量消息:
kernel: [686782.106547] usb4761: no symbol version for adv_process_info_check_event
kernel: [686782.106555] usb4761: Unknown symbol adv_process_info_check_event
kernel: [686782.106691] usb4761: no symbol version for advdrv_unregister_driver
kernel: [686782.106695] usb4761: Unknown symbol advdrv_unregister_driver
Run Code Online (Sandbox Code Playgroud)
但是,advdrv_core.ko 提供了这些符号。我的内核似乎确实在内存中存储了它们:
# cat /proc/kallsyms | grep advdrv_unregister_driver
f8d88504 r __ksymtab_advdrv_unregister_driver [advdrv_core]
f8d888d2 r __kstrtab_advdrv_unregister_driver [advdrv_core]
f8d885a4 r __kcrctab_advdrv_unregister_driver [advdrv_core]
086eb8fb a __crc_advdrv_unregister_driver [advdrv_core]
f8d86e90 t advdrv_unregister_driver [advdrv_core]
Run Code Online (Sandbox Code Playgroud)
为什么我的 insmod 声称它们是未知符号?
编辑:下面的答案之一建议我将文件复制到 /lib/modules 并运行 depmod。所以我使用了 depmod 的 -v(详细)选项。输出中有一堆行,如:
/lib/modules/2.6.27-7-generic/kernel/drivers/pcmcia/usb4761.ko needs "advdrv_unregister_driver": /lib/modules/2.6.27-7-generic/kernel/drivers/pcmcia/advdrv_core.ko
Run Code Online (Sandbox Code Playgroud)
然后我运行 rmmod advdrv_core 以确保我是全新安装的,运行 modprobe advdrv_core,最后运行 modprobe usb4761。
同样,一堆失败的符号,包括 advdrv_unregister_driver。