# 内核模块管理 ## 场景 要加载一个驱动(比如 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`。