0aa8fe6
这次没有正文改动。
这是 linux/内核模块管理.md 的改动记录。后台每次保存都会留一份快照,
这里显示的是快照之间的差异,不会混入其他文章的改动。
还没有后台修改记录。
下面是 Git 里的提交,可能包含其他文章的改动(因为一次提交会带上工作区所有变化)。
0aa8fe6
这次没有正文改动。
42afade
@@ -0,0 +1,73 @@ +--- +tags: [内核模块, modprobe, Linux] +order: 100 +--- + +# 内核模块管理 + +## 场景 + +要加载一个驱动(比如 bonding、nf_conntrack、第三方网卡驱动),或者排查模块冲突。 + +## 前置条件 + +- root 权限 +- 知道模块名 +- 内核版本与模块要匹配(尤其第三方驱动) + +## 配置 + +```bash +# 查看已加载 +lsmod +lsmod | grep nf_conntrack + +# 看模块信息 +modinfo bonding +modinfo -F version nf_conntrack + +# 临时加载/卸载 +modprobe bonding +modprobe -r bonding + +# 开机自动加载 +echo bonding > /etc/modules-load.d/bonding.conf + +# 带参数加载 +echo "options bonding max_bonds=1" > /etc/modprobe.d/bonding.conf +``` + +编译第三方驱动(DKMS 方式,内核升级后自动重编): + +```bash +dnf install -y dkms kernel-devel +dkms add -m drivername -v 1.0 +dkms build -m drivername -v 1.0 +dkms install -m drivername -v 1.0 +``` + +## 验证 + +```bash +lsmod | grep 模块名 +modinfo 模块名 | head +dmesg | tail -20 +``` + +加载失败时 `dmesg` 里有具体原因(版本不匹配、签名问题)。 + +## 回滚 + +```bash +modprobe -r 模块名 +rm /etc/modules-load.d/模块名.conf +``` + +## 坑 + +- **内核升级后第三方模块失效**(`insmod: invalid module format`),只能重编或用 DKMS。 +- Secure Boot 开启时未签名模块会被拒绝加载。 +- `modprobe -r` 时模块被占用会失败,先 `lsof` 或 `lsmod` 看引用计数。 +- 模块名和文件名不一致(`nf_conntrack` 对应 `nf_conntrack.ko`)。 +- `depmod -a` 不跑,新装的模块 `modprobe` 找不到。 +- 加载顺序有依赖,用 `modprobe` 而不是 `insmod`。