
在 Ubuntu 认证设备上安装好系统之后,你通常会发现:第一次开机,风扇控制就是正常的,键盘功能键也能直接使用,合适的内核也都提前装好了。在这整个过程中,你并没有手动装过驱动,那这些支持是怎么到位的?
这一切看上去似乎是「安装程序」自动做完了一切,但它更多只是负责调度。真正做硬件识别和软件包匹配的,是 Ubuntu 的驱动检测工具、软件包元数据,以及 Canonical 为认证硬件提前准备好的 OEM 支持包。
接下来,我们就顺着这条链路往下拆——从最开始的硬件扫描,到重启后进入正确内核,中间每一步都是谁在做、怎么匹配、为什么能做到自动完成。
对于认证设备,Canonical 通常会提前和硬件厂商一起完成测试、修复兼容性问题,并准备对应的 OEM 支持包。安装程序要做的,就是识别当前设备,然后启用已经准备好的支持方案。
Ubuntu 认证设备为什么能开箱即用
并不是所有机器都能在通用 Ubuntu 安装环境下,直接跑到最好状态。
戴尔、联想、惠普这些大厂的笔记本和服务器,经常会带有一些「需要特殊对待」的组件:可能是特定的内核补丁、专门的固件文件,亦或是 Ubuntu 标准驱动包里没有包含的内容。少了这些支持,就可能会遇到「睡眠-唤醒」异常、风扇转速失控、GPU 性能打折等大大小小的问题。
Ubuntu 的做法是把一套自动检测机制接进安装流程里,由 Subiquity 负责把流程串起来,但真正做硬件识别和软件包匹配的是ubuntu-drivers。
什么是 Subiquity?
- Subiquity 是 Ubuntu Server 背后的安装程序框架,从 Ubuntu 20.04 LTS 开始投入使用。
- 从 Ubuntu 23.04 开始,它也成了 Ubuntu Desktop 安装程序的后端,取代了老旧的 Ubiquity(GTK/Qt)界面。
在装服务器时,你看到的是简洁的纯文本界面;到了桌面端,外面多包了一层图形界面马甲。这两种形态在 OEM 和 HWE 硬件检测上,共用了同一套后端逻辑。

GA、HWE 与 OEM:3 种内核,3 种分工
在看硬件检测之前,我们必需先理清楚 Ubuntu 的 3 条内核分支。
GA 内核
这是随 Ubuntu LTS 首发时一起发布的默认内核。它稳定、经过充分测试,在 5 年的 LTS 标准支持周期里,会持续收到安全更新。Ubuntu Server 默认使用的就是 GA 内核。对大多数硬件、服务器来说,它已经够用。
HWE 内核
Ubuntu 每 6 个月会发一个过渡版本,比如 25.10、26.10,它们都会带更新的内核。HWE 栈的作用,就是把这些较新的内核回带到当前 LTS 版本上。
比如,你装的是 Ubuntu 26.04 LTS,但某块新出的 Wi-Fi 芯片只有更新内核才支持,这时候就可以通过 HWE 栈拿到后续 Ubuntu 版本里的内核支持。
Ubuntu Desktop 默认会跟着 HWE 栈走。单个 HWE 内核版本通常会维护到下一次 HWE 切换,之后系统会自动滚动到更新的 HWE 内核,所以整条 HWE 轨道在 LTS 生命周期里会持续获得支持。
OEM 内核
最特殊的是 OEM 内核,它由 Canonical 的 HWE Team 和戴尔、联想这些硬件厂商一起维护。
- 这类内核通常会提前集成一些还没进入当前 Ubuntu GA/HWE 内核的硬件支持补丁,可能来自上游 Linux 的回移植,也可能是 Canonical 和硬件厂商一起维护的修复。
- 比如新出的英特尔显卡驱动、Realtek 读卡器修复补丁,都可能先出现在 OEM 内核里。你可以把它看成一个过渡区:一些今天先在 OEM 内核落地的补丁,后面往往会逐步进入到 Ubuntu 的通用内核。
| 内核分支 | 适用对象 | 支持周期 | 默认启用环境 |
|---|---|---|---|
| GA | 所有用户 | 5 年 | Ubuntu Server |
| HWE | 桌面用户,服务器可选开启 | 每个内核约 6 个月滚动更新;最终版 HWE 享受完整 LTS 支持 | Ubuntu Desktop |
| OEM | 主要面向 Ubuntu 认证硬件 | 由 HWE Team 和硬件厂商共同维护,通常短于 GA | 认证笔记本、服务器 |
硬件指纹:什么是 Modalias?
要给硬件配上正确的驱动,系统得先知道这块硬件是谁。Linux 内核最早就是用 modalias 来做模块自动加载,Ubuntu 的驱动检测机制也基本沿用了这套技能。
你可以把 modalias 理解成硬件对外广播的一串识别码。Linux 内核会从硬件读取这些信息,放到/sys这个特殊目录里:
$ cat /sys/devices/pci0000:00/0000:00:1b.0/modalias
pci:v00008086d00003B56sv000017AAsd0000215Ebc04sc03i00
这一长串字符本身是有结构的,里面编码了供应商 ID、设备 ID、子系统供应商、子系统设备 ID 和设备类。简单来说,这就是在告诉系统:「我是一块装在 XXX 机器里的 XXX 芯片」。
那些不在 Ubuntu 默认安装集里的驱动包,通常也会在debian/control里上带一个由dh_modaliases生成的XB-Modaliases字段。软件包构建完成后,它会变成元数据里的Modaliases标头,里面是一组支持通配符匹配的字符串,对应一个或多个 modalias。
驱动检测的本质,其实就是一场模式匹配:用你硬件的专属指纹,和软件仓库里预埋的指纹做比对。
OEM 软件包怎么做到精确匹配
Modalias 对 NVIDIA GPU 这种通用驱动效果很好,但 OEM 元软件包要匹配的是整台机器,而不只是某一块芯片,所以还得再往上收一层。
现在常见的做法主要有 2 种:
| 常见方案 | 工作原理 |
|---|---|
| PCI/SMBus 信息 | 利用 PCI 设备及相关总线信息识别目标平台 |
| DMI 信息 | 利用 BIOS 和主板里记录的设备型号信息识别目标平台 |
不同厂商的 OEM 软件包,会按具体平台选择 PCI、SMBus 或 DMI 信息来生成专用的 modalias 规则,尽量把匹配范围收窄到目标机型。
幕后功臣:ubuntu-drivers
Subiquity 并没有把检测逻辑写死在自己内部,它调用的是ubuntu-drivers,核心任务也只有一个:扫描硬件,然后从软件仓库里找出能精确匹配的软件包。
核心检测函数在 Python 模块UbuntuDrivers.detect里,它只依赖python-apt库就能运行,不需要 root 权限,也不用走 D-Bus,很适合在安装过程中调用,开销和安全风险都比较低。
# 示例:ubuntu-drivers 如何查询给定 modalias 的软件包
import apt
from UbuntuDrivers import detect
apt_cache = apt.Cache()
packages = detect.packages_for_modalias(
apt_cache,
"pci:v000010DEd00002684sv000019DAsd00004675bc03sc00i00"
)
不支持 Modalias 的硬件怎么办?
有些驱动没办法靠 modalias 进行匹配,可能就得去看/proc/asound/cards这类额外信息,才能判断系统是否适配。
在这种情况下,ubuntu-drivers提供了检测插件机制,把精简的 Python 脚本放在/usr/share/ubuntu-drivers-common/detect/目录下,每个插件都会导出一个detect(apt_cache)函数来执行额外检测逻辑,然后再返回匹配到的软件包列表。
检测插件同样不需要 root 权限,整套检测栈从一开始就是按受限环境来设计的。
OEM 元软件包到底做了什么
元软件包(metapackage)本身通常是空的,不直接携带内核文件、二进制固件或者文档。在 OEM 元软件包安装时,主要在做这 3 件事:
- 写入新的 APT 源文件:在
/etc/apt/sources.list.d/下增加额外的软件源配置,指向 Canonical 的 OEM 软件库,让系统能拿到 Ubuntu 标准仓库之外的特定软件包。 - 安装 OEM 签名密钥:它会依赖
ubuntu-oem-keyring,让系统信任这个 OEM 软件库。 - 拉取真正的硬件支持包:仓库启用后,会继续把硬件需要的内核、固件和驱动装进来。
由 OEM 软件包决定系统装哪个内核
OEM 元软件包还会影响系统最终启动到哪条内核栈上。它的依赖既可能指向专门的 OEM 内核包,也可能指向 GA、HWE 内核,具体取决于这个平台的支持是怎么组织的。
大部分认证硬件最终会跑 OEM 内核。
OEM 元软件包本身不是驱动,更像是一把钥匙。它负责把对应仓库和依赖关系接进系统,真正的内核、固件和驱动来自后面的软件包。
OEM 内核是不是厂商专用的?
不是。虽然名字背上了「OEM 内核」,但它并不是厂商私有的闭源资源。Canonical 会把它公开发布到 Ubuntu 软件仓库里,任何人都可以安装和使用。
这个名字主要说明它的来源和维护方式——由 Canonical 和硬件合作伙伴一起维护,里面的补丁偏向特定硬件,但并不限制使用。
完整流程拆解

我们把前面的信息串起来,在一台认证设备上安装 Ubuntu 时,大致流程是这样的:
- 安装早期,Subiquity 里的 OEM 控制器会调用
ubuntu-drivers扫描系统设备,并从/sys收集各自的 modalias 字符串。 ubuntu-drivers拿着这些 modalias 去和当前 APT 缓存里各个软件包的Modaliases标头做匹配。遇到 OEM 软件包时,还会按它声明的规则检查对应的 PCI、SMBus 或 DMI 信息。- 如果匹配成功,比如命中了某台认证戴尔笔记本对应的
oem-somerville-<codename>-meta,ubuntu-drivers就把这个包名返回给 Subiquity,后者再把它加入安装队列。 - 到了软件包安装阶段,由 Subiquity 安装这个 OEM 元软件包。这个包会加上对应的 APT 源、装好密钥依赖,并继续把 OEM 软件库里的相关包拉进来。
- 最后系统重启。因为目标内核已经在安装阶段准备好了,机器会直接进入适合当前硬件的那条内核栈,不需要再手动补装驱动。
Ubuntu 安装程序不会在安装时联网检查「这台机器该装什么驱动」。绝大多数匹配规则,早就写进了软件包元数据和 OEM 元软件包里,安装过程只是做本地匹配和自动安装。
检查是否安装了 OEM 包

系统装好后,你可以自己确认当前跑的是 OEM、HWE 还是 GA 内核:
# 步骤 1: 列出系统上的所有 OEM 元软件包
# 如果命令返回输出,说明属于 OEM 流程。
# 如果命令未返回任何输出,则说明属于 GA 或 HWE 流程。
$ ubuntu-drivers list-oem
# 步骤 2:确认你正在使用的内核版本
# OEM 内核示例:7.0.0-22-oem <- 注意 -oem 后缀
# GA/HWE 示例:7.0.0-22-generic <- 两者都带有 -generic 后缀
$ uname -r
# 步骤 3:区分 GA 和 HWE
# 输出结果会返回是 GA 还是 HWE 内核,以及支持周期。
$ hwe-support-status --verbose








最新评论
屎山代码
升级完后 26h2变25h2了
我需要的是原来的不透明的任务条, 怎么调整都是透明状态。 什么破垃圾功能!!!
我印象中 Windows 本身并没有过原生的「开盖即开机」功能。如果有,那也是笔记本厂商通过硬件(传感器)和 BIOS/UEFI 固件来实现的,不是 Windows 操作系统的标配特性。