查看依赖关系
问题背景:从专有系统移植某个特定功能的内核模块到 Linux 发行版,确认该模块的依赖关系。包含“我依赖谁”、“谁依赖我”两种情况。
详见How to check kernel module dependencies on Linux
- lsmod
如下,vboxdrv.ko 依赖 vboxnetadp.ko、vboxnetflt.ko、vboxpci.ko。
1 | sunyongfeng@ubuntu:~$ lsmod |
- cat modules.dep,几乎与 lsmod 一样,但是包含未加载的内核模块依赖关系,ubuntu 默认有很多很多!
1 | sunyongfeng@ubuntu:~$ cat /lib/modules/`uname -r`/modules.dep |
modprobe --show-dependency xxx.ko
,以 lsmod 不同的是,该命令显示谁依赖 xxx.ko。
1 | sunyongfeng@ubuntu:~$ modprobe --show-depends -n iptable_filter |
- depmod,生成 modules.dep 和 map 文件
依赖相关的问题
提示 “modprobe: ERROR: ../libkmod/libkmod.c:5”
可能出现的原因:
- 内核版本不一致
- modules.dep.bin 受损
参考:
- “Could not open moddep file ‘/lib/modules/3.XX-generic/modules.dep.bin’” when mounting using a loop
- 使用循环进行挂载时的modprobe”无法打开moddep文件’/lib/modules/3.XX generic/modules.dep.bin’”
解决:(思路,重新生成 modules.dep.bin,或干脆重新替换内核)
depmod
- uname -r,
apt-get install --reinstall linux-image-'uname -r 的结果'
一个样例,发现 docker 服务起不来,通过 systemd 的 log 查看(sudo journalctl -u systemd-modules-load.service -b
)是 modprobe 其他模块失败,导致 docker 服务退出。
1 | Nov 09 11:07:18 hostnamexxx systemd[1]: Starting Docker Application Container Engine... |
运行一下 sudo depmod
,pass。