温馨提示×

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‑FiRAID/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 中选择旧内核启动);
    • 专有驱动升级前记录当前版本,准备回退脚本;
    • 变更窗口内避免同时变更多类驱动;更新后执行关键业务自检。

0