当.ko文件可用时,为什么modprobe或insmod不工作?

时间:2013-04-25 16:10:35

标签: linux-kernel debian kernel-module

我为蝙蝠侠高级MANET下载了一个内核模块源,然后在源代码目录中调用了make并让它做了它的事情。

完成make后,文件batman-adv.ko位于/home/batman-adv-2013.2.0中的文件夹中。当我在目录中调用modprobe batman-adv时,我收到错误:

FATAL: Module batman_adv not found.

当我致电insmod batman-adv.ko时:

 insmod: error inserting '/home/batman-adv-2013.2.0/batman-adv.ko': -1 Unknown symbol in module

我使用的操作系统是Debian GNU / Linux 6.0.7(挤压)

我是否错过了我应该做的不同的事情,或者模块文件是否需要放在其他地方?

2 个答案:

答案 0 :(得分:2)

“未知符号”通常表示该模块依赖于另一个模块。您可以使用dmesg来验证哪个符号,这将告诉您遇到了哪些未知符号。通常,符号的前缀(例如fat_xxxxx)意味着需要哪个内核模块。 modprobe仅适用于modules.dep文件中列出的模块。

答案 1 :(得分:0)

添加到Technologeeks的答案:

modprobe只会搜索标准路径/lib/modules/$(uname -r)中的模块。 由于您的.ko文件不在该目录中,modprobe找不到它。

使用模块的正确方法是:

make install
depmod -a
modprobe batman-adv
  • 第一行应该将模块安装到适当的位置,其他所有工具都可以使用。

  • 第二行试图找出使用模块所需的所有依赖项,并将该信息放入一些持久的位置(lib/modules/$(uname -r)/modules.dep

  • 第3行使用依赖关系信息并加载所有依赖关系和模块。