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)
- 获取源码(git clone 或厂商 tar 包),进入目录
- 编译(示例 Makefile 使用内核构建系统):
- make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
- 安装模块:
- sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
- sudo depmod -a
- 加载与验证:
- sudo modprobe <模块名>
- lsmod | grep <模块名>
- dmesg | tail -n 50
- 方式B DKMS 管理(推荐用于会随内核升级而重建的模块)
- 拷贝源码到 /usr/src/<模块名>-<版本>/
- 注册 DKMS:
- sudo dkms add -m <模块名> -v <版本>
- sudo dkms build -m <模块名> -v <版本>
- sudo dkms install -m <模块名> -v <版本>
- 加载与开机自动加载:
- 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;必要时恢复配置文件或重装显示管理器。