一劳永逸解决Ubuntu 18.04 Realtek网卡驱动维护难题:DKMS全攻略
每次内核更新后都要重新安装网卡驱动?这种反复折腾的日子该结束了。本文将带你深入理解DKMS机制,并提供一套完整的解决方案,让你的Realtek网卡驱动在内核更新后依然坚挺如初。
1. 为什么手动安装的驱动会在内核更新后失效?
当你在Ubuntu 18.04上手动编译安装Realtek网卡驱动时,通常使用的是make install方式。这种方式会将编译好的内核模块(.ko文件)直接安装到当前运行内核的模块目录中,比如/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/。
然而,Linux内核的一个特点是:每个内核版本都有自己独立的模块目录。当系统通过apt upgrade更新内核时,会安装一个全新的内核版本,并保留旧内核作为备用。这时会发生以下情况:
- 新内核启动时会加载自己目录下的模块
- 你之前手动安装的驱动只存在于旧内核的模块目录中
- 新内核找不到对应的驱动模块,导致网卡无法工作
这就是为什么每次内核更新后都需要重新安装驱动的原因。要解决这个问题,我们需要一个能自动为每个新内核编译和安装驱动的机制——这就是DKMS的用武之地。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. DKMS工作原理深度解析
DKMS(Dynamic Kernel Module Support)是Linux内核的一个框架,专门用于管理第三方内核模块的生命周期。它的核心优势在于:
- 自动重建:当检测到新内核安装时,自动重新编译模块
- 版本跟踪:维护模块的多个版本,确保兼容性
- 集中管理:提供统一接口管理所有DKMS模块
DKMS的工作流程大致如下:
- 将模块源代码和配置文件放入
/usr/src/<module>-<version>/ - 通过
dkms add注册模块 - 通过
dkms build和dkms install为当前内核构建安装模块 - 当新内核安装时,DKMS服务会自动触发重建过程
bash复制# DKMS模块目录结构示例
/usr/src/r8125-9.009.01/
├── dkms.conf
├── src
│ ├── Makefile
│ └
