Oamc

内核模块管理

本页目录

场景

要加载一个驱动(比如 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。