Я пытаюсь установить драйвер для USB DAQ box, что досадно, я должен компилировать сам. Думаю, мне это удалось - у меня есть два файла .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
Мне удалось запустить 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
Тем не менее, 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]
Почему мой 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
Затем я запустил rmmod advdrv_core, чтобы убедиться, что я устанавливаю его заново, запустил modprobe advdrv_core и, наконец, запустил modprobe usb4761.
Опять же, куча неудачных символов, включая advdrv_unregister_driver.
У меня были аналогичные проблемы с компиляцией драйверов Advantech. Оперативная фраза здесь действительно "бессимвольная версия".
Раздел 7 http://lxr.linux.no/#linux+v2.6.33/Documentation/kbuild/modules.txt предоставляет подробную информацию о версиях модуля. Раздел 7.3 представляет особый интерес. Самым простым решением для меня было просто вставить строку KBUILD_EXTRA_SYMBOLS (как описано, начиная со строки 526 файла modules.txt выше). В вашем случае вы, вероятно, могли бы просто добавить строку вроде
KBUILD_EXTRA_SYMBOLS: = [каталог_драйвера] /kernel/core/Module.symvers
в начало [каталог_драйвера] / kernel / USB-4761 / Makefile.
скопируйте .ko в каталог модуля вашего ядра, затем запустите depmod