Linux kernel 为什么赢了';当我有.ko文件可用时,modprobe或insmod工作吗?

Linux kernel 为什么赢了';当我有.ko文件可用时,modprobe或insmod工作吗?,linux-kernel,debian,kernel-module,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-201

我为蝙蝠侠高级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(Squence)


我是否遗漏了本应以不同方式执行的操作,或者模块文件需要放置在其他地方?

未知符号通常表示模块依赖于其他模块。您可以使用
dmesg
验证哪个符号,它将告诉您遇到了什么未知符号。通常,符号(例如fat_uxxxxx)的前缀表示需要哪个内核模块
modprobe
仅适用于modules.dep文件中列出的模块。

要添加到技术页面,请回答:

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

使用模块的正确方法是:

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

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

  • 第三行使用依赖项信息并加载所有依赖项和模块


尝试使用
depmod-a
是,也可以尝试使用'nm/home/batman-adv-2013.2.0/batman-adv.ko'查看符号。但如果您是从树中构建的,是否使用
使模块安装
?当你这么做的时候,我想它会照顾到depmod。马克·麦克默里也说,当我不想经历这些的时候,我就用
insmod
——这并不能解决你没有解决的问题!