内核模块管理
场景
要加载一个驱动(比如 bonding、nf_conntrack、第三方网卡驱动),或者排查模块冲突。
前置条件
- root 权限
- 知道模块名
- 内核版本与模块要匹配(尤其第三方驱动)
配置
# 查看已加载
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 方式,内核升级后自动重编):
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
验证
lsmod | grep 模块名
modinfo 模块名 | head
dmesg | tail -20
加载失败时 dmesg 里有具体原因(版本不匹配、签名问题)。
回滚
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。