Linux驱动如何更新升级
小樊
46
2025-11-22 08:12:24
Linux 驱动更新升级实用指南
一 更新思路与准备
- 优先使用发行版仓库与内核自带驱动(in-tree),通过系统包管理器升级,稳定性最好。
- 专有驱动(如 NVIDIA、部分 Wi‑Fi/RAID 闭源驱动)可用厂商脚本或 DKMS 管理,便于随内核升级自动重编译。
- 升级前准备:
- 备份关键数据与配置;确保有当前内核的 vmlinuz/initrd 可回退。
- 安装编译依赖与当前内核头文件:
- Debian/Ubuntu:sudo apt install build-essential linux-headers-$(uname -r)
- RHEL/CentOS:sudo yum groupinstall “Development Tools” && sudo yum install kernel-devel
- 识别硬件:lspci、lsusb;确认设备与驱动对应关系(如 lspci -k)。
- 统一规划内核升级与驱动兼容性,必要时保留旧内核启动项。
二 发行版仓库更新(优先推荐)
- Debian/Ubuntu 系:
- 常规更新:sudo apt update && sudo apt upgrade;跨版本/元包变更用:sudo apt full-upgrade。
- 启用无人值守升级(安全与内核更新):sudo apt install unattended-upgrades && sudo dpkg-reconfigure unattended-upgrades;可按需配置邮件与自动重启时间。
- 查看/测试自动更新:systemctl status apt-daily.timer / apt-daily-upgrade.timer;sudo unattended-upgrade --dry-run。
- RHEL/CentOS 系:
- 使用 dnf/yum 更新系统与内核(内核更新后需重启以加载新驱动)。
- SUSE/openSUSE:
- 使用 zypper up 更新系统;内核与驱动随系统仓库升级。
三 专有驱动与 DKMS 场景
- 使用 DKMS 管理 out-of-tree 模块:
- 安装 DKMS 包,按厂商提供的 dkms.conf 将模块纳入 DKMS 管理;内核升级时 DKMS 会自动用新头文件重编译模块。
- NVIDIA 专有驱动示例(Debian/Ubuntu):
- 彻底清理旧版本(谨慎,确保有备份与可回退方案):
- sudo dpkg --purge $(dpkg -l | grep -E “nvidia|libnvidia” | awk ‘{print $2}’)
- sudo apt purge nvidia-* libnvidia-* && sudo apt autoremove -y
- 清理残留仓库与索引文件(如 /var/nvidia-driver-local-repo-、/etc/apt/sources.list.d/nvidia-)
- 按 NVIDIA 官方指引安装最新驱动(如 .run 安装器或官方仓库包),重启后验证 nvidia-smi。
- 其他专有驱动(如部分 Wi‑Fi、RAID/HBA):优先使用厂商 .run 安装脚本或发行版提供的专用包,严格按 README 执行。
四 从源码编译并更新内核模块
- 获取模块源码(内核树内/外),安装当前内核头文件(见上节)。
- 编译与安装(示例):
- make && sudo make install(或按模块 Makefile 指定安装路径)
- 加载与验证:sudo insmod your_module.ko;lsmod | grep your_module
- 开机自动加载:echo “your_module” | sudo tee -a /etc/modules
- 注意:内核升级后,外部模块需重新编译;使用 DKMS 可自动化此过程。
五 升级内核与回退策略
- 升级内核(发行版方式):
- Debian/Ubuntu:apt update && apt install linux-image-generic 等元包;
- RHEL/CentOS/Fedora:dnf/yum update kernel;
- 升级后重启,检查 uname -r 与新内核是否生效。
- 手动编译全新内核(进阶):
- 下载内核源码,配置(如 make oldconfig/menuconfig),编译内核与模块(make bzImage && make modules_install),制作 initrd,拷贝镜像至 /boot,更新 GRUB 启动项并重启。
- 回退与风险控制:
- 保留旧内核启动项(GRUB 中选择旧内核启动);
- 专有驱动升级前记录当前版本,准备回退脚本;
- 变更窗口内避免同时变更多类驱动;更新后执行关键业务自检。