温馨提示×

ubuntu fromscratch怎样添加驱动

小樊
42
2025-11-14 22:39:24
栏目: 智能运维

Ubuntu From Scratch 添加驱动的通用流程

在最小化或“从零开始”的 Ubuntu 环境中,添加驱动通常遵循:识别硬件 → 准备编译环境 → 获取驱动 → 编译/安装 → 加载与验证 → 设置开机自动加载。以下给出可直接复用的命令与要点。


一、通用准备与识别硬件

  • 更新索引并安装基础工具:
    • sudo apt update
    • sudo apt install -y build-essential linux-headers-$(uname -r) dkms pciutils usbutils
  • 识别设备:
    • lspci | grep -i -E “vga|3d|nvidia|net|wireless|ethernet”
    • lshw -C display 或 lshw -C network
    • lsusb
    • 查看当前已绑定驱动:lspci -k | grep -A 3 -i “vga|net”
  • 判断驱动类型:
    • 内核已内置:modinfo <模块名> 或 lsmod | grep <模块名>
    • 需要外部驱动:厂商源码/官方安装包。

二、通用安装与加载步骤

  • 方式A 内核模块源码编译(.ko)
    1. 获取源码(git clone 或厂商 tar 包),进入目录
    2. 编译(示例 Makefile 使用内核构建系统):
      • make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
    3. 安装模块:
      • sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
      • sudo depmod -a
    4. 加载与验证:
      • sudo modprobe <模块名>
      • lsmod | grep <模块名>
      • dmesg | tail -n 50
  • 方式B DKMS 管理(推荐用于会随内核升级而重建的模块)
    1. 拷贝源码到 /usr/src/<模块名>-<版本>/
    2. 注册 DKMS:
      • sudo dkms add -m <模块名> -v <版本>
      • sudo dkms build -m <模块名> -v <版本>
      • sudo dkms install -m <模块名> -v <版本>
    3. 加载与开机自动加载:
      • sudo modprobe <模块名>
      • echo “<模块名>” | sudo tee /etc/modules-load.d/<模块名>.conf
  • 方式C 官方安装包
    • NVIDIA:下载 .run 安装器,先关闭显示管理器(如 sudo systemctl stop gdm3),执行 sudo sh NVIDIA-Linux-*.run,按提示完成;或添加官方/社区仓库用 apt 安装(如 nvidia-driver-<版本>)。
    • Broadcom bcmwl 无线:sudo apt install bcmwl-kernel-source(适用于许多 Broadcom 无线网卡)。

三、常见场景速查

  • 显卡 NVIDIA

    • 识别:lspci | grep -i nvidia
    • 开源驱动冲突处理(安装专有驱动前常用):
      • echo -e “blacklist nouveau\noptions nouveau modeset=0” | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
      • sudo update-initramfs -u && sudo reboot
      • 验证禁用:lsmod | grep nouveau(无输出即成功)
    • 安装方式:
      • 推荐:sudo ubuntu-drivers autoinstall 或 sudo apt install nvidia-driver-<版本>
      • 备选:从 NVIDIA 官网下载 .run 安装器,关闭显示管理器后执行安装
    • 验证:nvidia-smi 或 glxinfo | grep -i “opengl renderer”。
  • 有线/无线网卡

    • 识别:lspci | grep -i net;ethtool -i <接口名>
    • 安装方式:
      • 优先仓库:sudo apt install firmware-<厂商/系列> 或 bcmwl-kernel-source(Broadcom)
      • 源码编译:安装 build-essential、linux-headers-$(uname -r),按 README 编译并 sudo make install,然后 sudo modprobe <驱动名>
    • 验证与配置:
      • 查看:ip link;lsmod | grep <驱动名>;dmesg | tail
      • 临时配置:sudo ip addr add 192.168.1.100/24 dev && sudo ip link set up
      • 持久化:使用 netplan(/etc/netplan/*.yaml)或 /etc/network/interfaces。

四、故障排查与注意事项

  • 查看内核日志与模块绑定:dmesg | tail -n 50;lspci -k | grep -A 3 -i “vga|net”
  • 版本匹配:确保驱动与当前内核版本匹配(linux-headers-$(uname -r) 已安装);DKMS 可在内核升级后自动重建模块
  • 显示管理器冲突:安装 NVIDIA 专有驱动时先停止 gdm3/lightdm,安装完成后再启动
  • Secure Boot:若启用,DKMS 模块可能需签名或在 MOK 中注册后才能加载
  • 回退与清理:apt purge <驱动包>;dkms remove -m <模块名> -v <版本> --all;必要时恢复配置文件或重装显示管理器。

0