网卡驱动没识别?3 条命令手动加载内核模块,并配置开机自动加载。
TL;DR:先确认模块文件名,用 modprobe 加载;要持久化就写 modules-load.d;要排除冲突就黑名单;卸载用 rmmod。
先确认网卡模块名
不是所有网卡都需要手动加载。先用 lspci -k | grep -A3 Ethernet 找到当前网卡对应的驱动名。如果内核已经加载了对应模块,这条会显示 Kernel driver in use: ...。
更直接的方式是 modinfo,它从模块文件里读元数据,不需要先加载:[5]
modinfo e1000
如果返回 filename: ...e1000.ko 这样的信息,说明这个模块存在,可以加载。
手动加载与卸载
推荐用 modprobe,不要用 insmod。 [1]
modprobe 会自动处理依赖、读取 modprobe.d 里的选项配置,并查找 /lib/modules/$(uname -r) 下的模块。
modprobe e1000 && lsmod | grep e1000 && rmmod e1000
insmod 也能加载单个模块,但不会解析依赖,也不会读配置。只在调试极特殊场景才用。[2]
卸载时优先用 rmmod,它会检查使用计数,避免把正在用的模块扯掉:[3][4]
如果提示 Module e1000 is not currently loaded,说明它已经不在内核里了;如果提示 Resource temporarily unavailable,通常有进程还在占用该驱动,先停掉相关服务再试。
配置开机自动加载
/etc/modules 已经过时。systemd 用 modules-load.d 目录下的 .conf 文件做静态列表。[7]
cat > /etc/modules-load.d/network.conf <<'EOF'
e1000
EOF
systemctl restart systemd-modules-load
systemctl status systemd-modules-load
这个文件里的每一行都是一个模块名,空格和注释会被忽略。不需要带 .ko 后缀。
黑名单与选项
如果某个模块加载后和硬件冲突,或者你明确想禁用它,在 /etc/modprobe.d/ 下建 .conf 文件黑名单:[1]
cat > /etc/modprobe.d/blacklist-conflict.conf <<'EOF'
blacklist ath_pci
options e1000 InterruptThrottleRate=3000
EOF
黑名单只阻止自动加载;如果已经手动 modprobe 过了,黑名单不会把它踢掉,得先 rmmod。
排错速查
| 现象 | 常见原因 | 处理 |
|---|---|---|
| modprobe 报 unknown symbol | 模块依赖的另一个模块没装/版本不匹配 | 检查内核版本和模块路径是否一致 |
| rmmod 报 Resource temporarily unavailable | 有进程持有该设备 | lsof、fuser 或停掉相关服务 |
| lsmod 看不到刚 modprobe 的模块 | 可能被黑名单拦了 | 查 /etc/modprobe.d/ 有没有 blacklist |
| depmod 报 warning: duplicate | 多个目录有同名模块 | 清理旧内核目录:rm -rf /lib/modules/旧版本 [6] |
局限性
- WSL2 的虚拟网卡由 Hyper-V 直接管理,不经过 Linux 内核的网络模块,所以手动加载
vmxnet3、hv_netvsc这类 WSL 宿主机驱动在 WSL 里无效。以下验证均在原生 Linux 物理机或 KVM 宿主机上成立。 insmod的行为在 2.6 以后和 modprobe 差异不大,但依然不建议替代 modprobe。- 某些厂商闭源固件(如某些 NVIDIA 网卡)需要额外 firmware 包,仅 modprobe 驱动模块不够。
- 实测记录:WSL2 Ubuntu-24.04,内核 6.6.114.1,
modprobe e1000成功加载,rmmod e1000成功卸载,lsmod、modinfo、systemctl status systemd-modules-load均正常返回。
参考资料
- [1] modprobe(8) — Linux manual page(man7-modprobe)
- [2] insmod(8) — Linux manual page(man7-insmod)
- [3] rmmod(8) — Linux manual page(man7-rmmod)
- [4] lsmod(8) — Linux manual page(man7-lsmod)
- [5] modinfo(8) — Linux manual page(man7-modinfo)
- [6] depmod(8) — Linux manual page(man7-depmod)
- [7] modules-load.d(5) — systemd — Debian bookworm-backports(debian-modules-load)
文中主要命令已在 WSL Ubuntu(24.04)实测,个别条目(未装工具/安装类命令)仅核对官方文档,未实际执行。