我为蝙蝠侠高级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(挤压)
我是否错过了我应该做的不同的事情,或者模块文件是否需要放在其他地方?
答案 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行使用依赖关系信息并加载所有依赖关系和模块。