如何配置modprobe以找到我的模块?

56

我正在尝试让内核模块在启动时加载。

如果我运行insmod /path/to/module.ko,它可以正常工作。但是这每次重启都要重复执行。

如果我运行modprobe /path/to/module.ko,它找不到该模块。 我知道modprobe使用一个配置文件,但即使将/path/to/module.ko添加到/etc/modules中,我也无法让其加载该模块。

正确的配置是什么?

4个回答

86

您可以将模块的符号链接到标准路径,这样depmod就能看到它,并且您可以像加载任何其他模块一样加载它。

sudo ln -s /path/to/module.ko /lib/modules/`uname -r`
sudo depmod -a
sudo modprobe module

如果您将模块名称添加到/etc/modules中,系统会在每次启动时自动加载它。

不过,我认为正确的配置方式是将模块复制到标准路径中。


5
如果你真的想这么做,你可以将“search /some/other/path”写入/etc/depmod.conf或/etc/depmod.d/something,但我仍然建议按照Jaime的建议复制或符号链接到/lib/modules/uname -r,因为大家都期望模块在那里。 - ephemient
你也可以重新编写include/config/kernel.release并重新编译内核。然后你的模块将在/lib/modules/<whatever-you-wrote-to-kernel.release>/中。 - Jan Matějka
1
我只是有点犯愁,直到我发现自己在错误的内核版本下的/lib/modules/。所以确实,至少要使用uname -r来验证当前的内核版本... - hyde
我目前正在基于linuxkit/alpine构建一个Docker系统,我想要加载一个内核模块。首先,我正在尝试进行这个测试,但是我甚至没有/lib/modules/文件夹,更不用说针对内核版本的文件夹或者modules.dep了。因此,在创建路径之后,depmod -a仍然导致Segmentation fault。有什么提示吗? - gr4nt3d
由于不同的发行版在depmod.conf中存在一些差异(例如Ubuntu在搜索路径中包含“ubuntu”),因此我认为编写自己的配置文件并不是一种优雅的方式。 - Kevin Chan

13

按照以下步骤操作:

  1. 将hello.ko复制到/lib/modules/'uname-r'/misc/
  2. 在/lib/modules/'uname-r'/modules.dep中添加misc/hello.ko条目
  3. sudo depmod
  4. sudo modprobe hello

modprobe将检查modules.dep文件以查找任何依赖项。


6

我认为关键是将模块复制到标准路径。

完成后,modprobe只接受模块名称,因此省略路径和“.ko”扩展名。


0
根据@Ray Li的回答,只需按照以下步骤即可:
sudo -i
cp hello.ko /lib/modules/`uname-r`/
depmod
modprobe hello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接