快速摘要
- Ubuntu 读取机器上每个设备的硬件“条形码”(一个 modalias 字符串),并将其与可用软件包中内置的模式进行匹配。如果匹配成功,它会安装一个极小的存根软件包,该软件包会解锁适合你硬件的正确内核和驱动程序,这一切都在安装过程中自动完成,无需你动手。
- OEM 元软件包本身几乎不做任何事情。它的全部工作就是放置一个 APT 源文件并引入一个签名密钥。实际的驱动程序和内核来自该文件启用的仓库。它是一把钥匙,而不是有效载荷。
- Ubuntu 实际上有三个独立的内核轨道:GA(稳定版,随 LTS 发布,支持 5 年)、HWE(从临时版本反向移植的较新内核,大约每 6 个月滚动一次)和 OEM(为特定认证硬件构建)。使用一个并不意味着你使用了另一个,你可以通过
ubuntu-drivers list-oem和hwe-support-status进行检查。 - OEM 内核并非由 Dell、Lenovo 或 HP 等硬件供应商锁定或拥有。它发布在常规的 Ubuntu 归档中,由 Canonical 的 HWE 团队构建,供应商贡献补丁和需求,而不是控制内核本身。任何人都可以安装和运行它,即使在未经认证的硬件上也是如此(尽管这样做几乎没有好处)。
引言
你刚刚在一台经过认证的笔记本电脑上安装了 Ubuntu。在首次启动后的几秒钟内,你的风扇控制就能正常工作,功能键响应正常,并且正确的内核已经在运行。你没有手动安装任何一个驱动程序。那么,刚才发生了什么?
Ubuntu 安装程序识别了你的硬件,并默默地处理了一切。本文详细解释了这一切是如何发生的,从最初的硬件扫描到最终的重新启动。无论你只是好奇的桌面用户,还是需要在自动化部署中控制此行为的系统管理员,这里都有你需要的一切。
1. Ubuntu 为你解决的问题
并非每台机器都能在通用 Ubuntu 安装上完美运行。Dell、Lenovo 和 HP 等硬件制造商经常推出带有需要额外关照的组件的笔记本电脑和服务器:一个自定义内核调整、一个固件文件,或者一个不属于标准 Ubuntu 软件包集的驱动程序。
如果没有正确的软件,你可能会遇到挂起和恢复失败、风扇从不旋转或 GPU 以半速运行的情况。Canonical 的解决方案是 Ubuntu 安装程序中内置的一个检测系统,称为 Subiquity,它在设置期间识别你的硬件,并自动为你的机器安装最佳的内核和驱动程序包。
1.1. 什么是 Subiquity?
Subiquity,即“服务器版 ubiquity”,是 Ubuntu Server 背后的安装程序框架,自 Ubuntu 20.04 以来一直如此。它还为 Ubuntu Core 提供首次启动配置。从 Ubuntu 23.04 开始,Subiquity 也成为 Ubuntu Desktop 安装程序的后端,取代了较旧的 Ubiquity(GTK/Qt)安装程序。
你可以在服务器安装期间通过其简洁的基于文本的用户界面以及在桌面上通过其图形界面来识别它。两者共享相同的 OEM 和 HWE 检测后端逻辑。
2. GA、HWE 和 OEM:三种内核,三种任务
在了解检测的工作原理之前,你需要了解 Ubuntu 提供的三个内核轨道。许多指南跳过了这一解释,这使得后续内容令人困惑。
2.1. GA 内核(通用可用性)
这是 Ubuntu LTS 版本在发布当天附带的内核。它稳定、经过充分测试,并在标准的 5 年 LTS 支持窗口内接收安全更新。Ubuntu Server 默认使用 GA 内核。对于大多数使用较旧或常见硬件的生产服务器来说,GA 内核正是你所需要的。
你可以通过启用 Ubuntu Pro 将支持延长至 15 年。更多详情见下方链接:
2.2. HWE 内核(硬件启用)
Ubuntu 每六个月发布一个新的临时版本(例如 26.10、27.04)。每个版本都附带一个更新的内核。
HWE 堆栈将这些较新的内核反向移植到 LTS 版本上。因此,如果你使用的是 Ubuntu 26.04 LTS,但需要来自 Ubuntu 26.10 的内核来支持全新的 Wi-Fi 芯片,HWE 堆栈可以提供它。
Ubuntu Desktop 默认跟踪 HWE 堆栈。每个非最终版本的 HWE 内核通常接收大约 6 个月的安全更新,然后系统会向前滚动到下一个版本。
例外情况是每个 LTS 周期中的最终 HWE 内核:该内核成为下一个 LTS 版本的 GA 内核,并从那时起接收完整的 5 年 LTS 支持窗口。
2.3. OEM 内核
这是三者中最具体的。Canonical 的硬件启用团队与 Dell 和 Lenovo 等硬件供应商密切合作,构建和维护 OEM 内核。
OEM 内核通常包含尚未被上游 Linux 内核或通用 Ubuntu 内核接受的设备驱动程序和补丁,例如新的 Intel 图形驱动程序或 Realtek 读卡器修复程序。
可以将其视为一个暂存区:今天进入 OEM 内核的补丁往往会在未来的版本中进入通用 Ubuntu 内核。
关键点: 如果你的机器上
ubuntu-drivers list-oem返回了结果,那么你使用的是 OEM 轨道,而不是 HWE 轨道。两者是分开的。运行一个并不意味着你运行了另一个。
3. 硬件指纹:什么是 Modalias
为了将你的硬件与正确的驱动程序包匹配,系统需要一种方法来识别你机器内的每个设备。Linux 通过一种称为 modalias 的东西解决了这个问题。
可以将其视为每个硬件设备广播的条形码。Linux 内核从硬件读取这些条形码,并将它们存储在一个名为 /sys 的特殊文件夹中。你可以自己读取它们:
$ cat /sys/devices/pci0000:00/0000:00:1b.0/modalias
pci:v00008086d00003B56sv000017AAsd0000215Ebc04sc03i00
那个长字符串遵循一个清晰的结构。它编码了供应商 ID、设备 ID、子系统供应商、子系统设备 ID 和设备类别。用通俗的话说,它告诉系统类似这样的信息:“这是联想笔记本电脑内部的 Intel 音频芯片。”
现在,不属于默认 Ubuntu 安装的驱动程序包在其 debian/control 文件中带有一个名为 XB-Modaliases 的字段,由 dh_modaliases 工具生成。一旦软件包构建完成,这就会成为软件包元数据中的 Modaliases 头,其中包含一个 glob 模式列表(可以将其视为通配符),用于匹配一个或多个 modalias 字符串。
因此,检测过程是一个快速的模式匹配:你的硬件指纹与可用软件包中内置的指纹进行匹配。
OEM 软件包如何处理不同的匹配
Modalias 匹配对于通用驱动程序(如 Nvidia GPU 软件包)效果很好。但 OEM 元软件包需要更加精确。你需要匹配整个笔记本电脑型号,而不仅仅是其中的一个芯片。因此存在两种方法:
两种方法最终都会产生一个 modalias 字符串。Dell 和 HP 软件包使用类似 pci:...bc0Csc05... 的模式(针对 SMBus 类别),而 Lenovo 软件包使用类似 dmi:*bvnLENOVO:bvr...:pvr...* 的模式。无论哪种方式,底层的匹配引擎都以相同的方式工作。
4. 背后的工具:ubuntu-drivers
Subiquity 本身并不构建此检测逻辑。相反,它调用一个名为 ubuntu-drivers 的独立工具,该工具来自 ubuntu-drivers-common 软件包。这个工具有一个主要任务:查看你的硬件并为其找到正确的软件包。
核心检测功能位于 UbuntuDrivers.detect Python 模块中。重要的是,它只需要 python-apt 库即可工作。它不需要 root 权限或 D-Bus 调用,这使得它在安装期间快速且安全地运行。
# Example: how ubuntu-drivers queries packages for a given modalias
import apt
from UbuntuDrivers import detect
apt_cache = apt.Cache()
packages = detect.packages_for_modalias(
apt_cache,
"pci:v000010DEd00002684sv000019DAsd00004675bc03sc00i00"
)
# Returns matching driver packages, e.g. nvidia-driver-550
不使用 Modaliases 的硬件怎么办?
某些驱动程序根本无法使用 modalias 匹配。例如,调制解调器驱动程序可能需要检查 /proc/asound/cards 才能知道它是否适用于你的系统。
对于这些特殊情况,ubuntu-drivers 支持检测插件:位于 /usr/share/ubuntu-drivers-common/detect/ 的小型 Python 脚本。每个插件导出一个单一的 detect(apt_cache) 函数,该函数可以运行任何自定义逻辑,然后返回匹配软件包的列表。
注意: 检测插件也不能依赖 root 权限。Canonical 设计了整个检测堆栈,使其能够在受限环境中安全运行,例如在安装期间在 Subiquity snap 内部。
5. OEM 元软件包实际做了什么
“元软件包”这个词可能听起来令人生畏,但这个想法很简单。OEM 元软件包本身几乎是空的。它不提供内核文件、固件 blob 或文档。相反,当你安装它时,它会做三件具体的事情:
步骤 1:放置一个新的 APT 源文件
它将一个 .list 文件安装到 /etc/apt/sources.list.d/ 中,该文件指向 Canonical 的 OEM 归档。这解锁了对不属于标准 Ubuntu 仓库的软件包的访问。
步骤 2:安装 OEM 签名密钥
它还依赖于 ubuntu-oem-keyring 软件包,因此你的系统信任来自该 OEM 归档的软件包。没有密钥,APT 会将这些软件包视为不受信任而拒绝。
步骤 3:引入真正的硬件支持
从新启用的 OEM 归档中,它引入你的硬件所需的实际内核、固件和驱动程序包。例如,一个名称模式为 oem-somerville-<codename>-meta 的软件包(Canonical 和 Dell 为其 OEM 项目使用的内部命名方案,其中 <codename> 是内部设备代号,而非零售型号)会引入特定认证 Dell 平台所需的一切。
OEM 软件包引入哪个内核
OEM 元软件包也可以影响你的系统启动哪个内核。在实践中,OEM 元软件包的依赖项可以指向 OEM 特定的内核包,也可以指向标准的通用/HWE 内核,具体取决于该特定平台的支持是如何构建的。大多数经过认证的硬件最终会使用 OEM 特定的内核,因为平台特定的补丁就在那里。
注意: OEM 元软件包不是驱动程序,它是一把钥匙,可以解锁整个硬件支持归档,然后将安装工作移交给该归档内的软件包。
OEM 内核是否锁定给特定供应商?
不。尽管名称如此,OEM 内核并不是私有的、仅限供应商的资源。Canonical 将其发布在 Ubuntu 归档中,任何人都可以在其设备上安装和使用它。
它之所以得名,只是因为 Canonical 与硬件合作伙伴密切合作构建它。其中的补丁针对特定硬件,但没有什么能阻止你在任何兼容的机器上运行它。
6. Ubuntu 26.04 中的变化
在 Ubuntu 26.04 之前,OEM 和 HWE 元软件包的自动检测默认是桌面版的功能。
如果你在认证硬件上安装 Ubuntu Server,安装程序的默认行为不会引入匹配的 OEM 或 HWE 元软件包。你必须在事后自己添加它,这在匆忙的部署中很容易错过。
**Subiquity 26.04 发布说明**描述了一个变化:从 Ubuntu 26.04 Server ISO 开始,如果安装程序为你的硬件找到了匹配的 OEM 或 HWE 元软件包,它也会在 Server 安装期间自动安装,使 Server 更接近长期以来的 Desktop 行为。
如果你编写自动安装配置,有一个细微差别值得了解。截至撰写本文时,Subiquity 自动安装参考文档仍然将 oem.install 键的 auto 默认值描述为“在 Ubuntu Desktop 上启用 OEM 元软件包安装,但在 Ubuntu Server 上不启用。”
换句话说,26.04 发布说明中描述的变化似乎存在于 Server 安装映像默认执行的操作层面,而不是作为对 oem.install: auto 模式默认值本身的记录更改。
如果你正在构建自动化的 Server 部署,并且希望确保在可用时安装 OEM 元软件包,最安全的方法仍然是在你的自动安装配置中显式设置 oem: install: true。此外,在依赖默认行为之前,请检查你特定版本的当前文档。
这对于服务器硬件尤其重要。Canonical 认证了许多来自主要供应商的机架服务器、工作站和密集计算节点。如果没有 OEM 元软件包,你可能会错过固件更新、电源管理调整或对 IPMI 或 Redfish 等硬件管理接口的支持。
底层机制:
oem: install 自动安装选项接受三个值:true、false 和 auto。记录的默认值是 auto。
无论你安装的版本上的确切默认行为如何,键名和三个接受的值(true / false / auto)都是稳定且有文档记录的,因此显式设置 oem: install: true 或 oem: install: false 是获得可预测结果的可靠方法。
7. 完整流程,逐步说明
现在让我们把所有内容整合起来。以下是在支持的机器上安装 Ubuntu 时,从安装程序启动到重新启动的确切过程。
步骤 1 - Subiquity 调用 ubuntu-drivers
在安装的早期阶段,Subiquity 内部的 OEM 控制器调用 ubuntu-drivers list-oem。此命令扫描你系统上的每个设备,并从 /sys 收集其 modalias 字符串。
步骤 2 - ubuntu-drivers 搜索 APT 缓存
接下来,它将你硬件的 modalias 字符串与安装程序可以看到的每个软件包中的 Modaliases 头进行比较。对于 OEM 软件包,它还会检查 Lenovo 硬件的 DMI 字符串以及 Dell 和 HP 的 PCI 子系统 ID。
步骤 3 - 匹配返回软件包名称
如果存在匹配的 OEM 软件包,例如针对认证 Dell 笔记本电脑的 oem-somerville-<codename>-meta 软件包,那么 ubuntu-drivers 会返回它。Subiquity 将该软件包与基础系统一起排队等待安装。
步骤 4 - 安装元软件包
在软件包安装阶段,Subiquity 安装 OEM 元软件包。这会放置 APT 源文件,引入 keyring 依赖项,并触发从 OEM 归档的拉取。
步骤 5 - 你重新启动到正确的内核 最后,系统重新启动。因为在设置期间安装了适当的内核包,所以你直接启动到适合你硬件的内核。无需手动步骤,无需后续命令。
注意内核冲突: 如果你还在自动安装配置中使用
kernel:键手动指定了内核,则可能会遇到冲突。OEM 元软件包可能需要自己的内核包,这可能会与你明确的内核选择冲突。如果在安装后启用 FIPS 或实时内核,也可能出现类似的冲突,因为 OEM 内核的 GRUB 配置条目可以在启动顺序中优先。要避免这种情况,请删除kernel:键,或在自动安装配置中设置oem: install: false。
8. 如何检查你的 Ubuntu Linux 机器是否获得了 OEM 软件包
安装后,你可以验证你的机器是否正在运行 OEM 内核或跟踪 HWE 堆栈。这是一个实用的两步检查:
# Step 1: List any OEM metapackages on your system
$ ubuntu-drivers list-oem
# If this returns output, you are on the OEM track.
# If it returns nothing, your machine is on the GA or HWE track instead.
# Step 2: Confirm which kernel flavour you are running
$ uname -r
# OEM kernel example: 7.0.0-22-oem <- note the -oem suffix
# GA / HWE example: 7.0.0-22-generic <- both show -generic
# Step 3: Distinguish GA from HWE (both report -generic in uname -r)
$ hwe-support-status --verbose
# Output tells you whether the running kernel is a GA or HWE kernel
# and whether it is still within its support window.
# Alternative: check which HWE metapackage is installed
$ dpkg -l 'linux-generic-hwe-*' | grep ^ii
# A result here confirms you are on the HWE stack.
# No result means you are on the GA kernel.
OEM 内核在其版本字符串中显示 -oem,这使其易于识别。
HWE 和 GA 内核在 uname -r 中都显示 -generic,这意味着你无法仅通过版本字符串区分它们。
因此,区分它们的可靠方法是运行 hwe-support-status --verbose,它会报告正在运行的内核属于哪个轨道以及它是否仍受支持。
如果 ubuntu-drivers list-oem 返回非空结果,则该机器处于 OEM 节奏,而不是 HWE 轨道。
提示: Canonical 建议不要在认证硬件上手动切换内核风格。从 OEM 内核更改为 GA 内核可能会导致性能、硬件支持和认证功能方面的回归。
9. 如何控制此行为
大多数情况下,你希望安装程序自动处理所有事情。但有时,例如在合规性要求严格的企业环境中,你需要固定特定的内核,则需要关闭此功能。你可以通过自动安装配置中的单个键来做到这一点。
禁用 OEM 安装
# autoinstall.yaml
autoinstall:
version: 1
oem:
install: false # skip OEM metapackage installation entirely
显式强制 OEM 安装
如果你想确保在硬件匹配时安装 OEM 元软件包,无论平台当前的默认行为如何,请显式设置 install: true。
# autoinstall.yaml
autoinstall:
version: 1
oem:
install: true # explicitly request OEM metapackage installation if one is found
保持自动(默认)
如果你根本不包含 oem: 键,安装程序将使用 auto。根据文档,auto 旨在在 Ubuntu Desktop 上找到 OEM 元软件包时安装它。
在 Ubuntu 26.04 版本前后,不同的 Canonical 来源对 auto 下的 Server 行为有不同的描述,因此如果 Server 的可预测行为对你很重要,请显式设置 install: true 或 install: false,而不是依赖 auto。
# This is what "auto" looks like explicitly:
autoinstall:
version: 1
oem:
install: auto # default, documented as Desktop-focused
安装后移除 OEM 设置
安装后改变了主意?你可以随时移除 OEM 元软件包并禁用其 APT 仓库。software-properties GUI 和 ubuntu-drivers CLI 都支持此操作。
移除元软件包不会破坏你正在运行的系统,它只是停止从 OEM 归档拉取更新。
# List installed OEM packages
$ ubuntu-drivers list-oem
# Remove a specific OEM metapackage
$ sudo apt remove oem-somerville-tentacool-meta
# Disable the OEM repository via the GUI
$ software-properties-gtk
10. 需要记住的关键点
- Ubuntu 提供三个内核轨道:GA(稳定版,5 年)、HWE(较新,每个内核大约每 6 个月滚动一次,最终版本继承完整的 LTS 支持)和 OEM(认证硬件,由 Canonical 的 HWE 团队维护)。它们是分开的;使用一个并不意味着你使用了另一个。
- 你机器上的每个设备都会向
/sys导出一个 modalias 字符串。这个字符串是使检测成为可能的指纹。 ubuntu-drivers执行实际的匹配。它将你的硬件指纹与可用软件包中的Modaliases头进行比较。- OEM 元软件包是一个最小的存根。它的真正工作是启用一个 APT 仓库,并让其中的软件包完成繁重的工作。
- Ubuntu 26.04 以某种形式将 OEM 和 HWE 自动检测带到了 Server 安装中,尽管自动安装参考中记录的
oem.install: auto默认值仍然描述了桌面版的行为。如果你需要 Server 上的保证行为,请显式设置oem: install: true或false。 - 随时运行
ubuntu-drivers list-oem以检查你的机器是否在 OEM 轨道上。 - 使用自动安装配置中的
oem: install: true | false | auto控制所有内容。
11. 常见问题解答(FAQ)
问:HWE 内核和 OEM 内核有什么区别?
答:HWE 内核将最新的上游 Linux 内核从最新的 Ubuntu 临时版本反向移植到你的 LTS 基础系统上。它针对广泛的现代硬件,每个非最终版本的 HWE 内核通常支持大约 6 个月,然后系统会滚动到下一个。每个 LTS 周期中的最终 HWE 内核是特殊的:它成为下一个 LTS 版本的 GA 内核,并接收完整的 5 年 LTS 支持窗口。
OEM 内核则针对一组特定的认证硬件平台。Canonical 与 Dell 和 Lenovo 等供应商合作构建它,并且它通常包含尚未到达主线内核的补丁。如果你的机器上 ubuntu-drivers list-oem 返回了结果,那么你使用的是 OEM 轨道,而不是 HWE 轨道。它们是分开的。
问:Ubuntu 会在每台机器上自动安装驱动程序吗?
答:不会。只有当安装程序在 APT 缓存中找到匹配的 OEM 或驱动程序元软件包时,自动检测才会触发。 未出现在 Canonical 硬件认证列表中的机器不会匹配任何此类软件包,安装程序将简单地继续而不安装一个。 对于这些机器,标准 Ubuntu 驱动程序通过正常的软件包系统处理所有事情。
问:我可以在不重新安装 Ubuntu 的情况下手动安装 OEM 内核吗?
答:通常可以。OEM 内核包发布在 Ubuntu 归档中,不受供应商限制或特殊安装的限制。
确切的包名和风格后缀因版本和平台而异(linux-oem-<release> 系列包是通用模式),因此请在你的系统上检查 apt search linux-oem 以找到适合你 Ubuntu 版本的正确包名。
也就是说,OEM 内核在 Canonical 认证的硬件上最有用。在未经认证的硬件上运行它不会带来额外的好处,并且可能会引入意外行为。
问:OEM 内核会永久取代 HWE 内核吗?
答:不会。OEM 内核是一个暂存区。Canonical 会在未来的版本中将其补丁合并回通用 Ubuntu 内核。因此,你的 OEM 内核今天携带的功能最终将进入主线通用或 HWE 内核。届时,你的机器不再需要 OEM 风格即可获得完整的硬件支持。
问:如果我还使用 FIPS 或实时内核,这会破坏系统吗?
答:有可能。OEM 内核的 GRUB 配置条目可以在启动顺序中优先。如果你之后启用 FIPS 或实时内核,系统可能会继续启动到 OEM 内核。
如果你运行合规性敏感的环境,请在安装前在自动安装配置中设置 oem: install: false,而不是试图在事后解决冲突。
问:我可以在购买前检查我的硬件是否经过认证吗?
答:可以。Canonical 在 ubuntu.com/certified 维护一个公共硬件认证数据库。 你可以按供应商、型号和 Ubuntu 版本进行搜索,以查看机器是否附带 OEM 元软件包以及它认证用于哪个 Ubuntu 版本。
12. 总结
Subiquity 驱动的 OEM 和 HWE 检测系统是 Linux“开箱即用”的一个很好的例子。
在底层,这个过程很简单:快速的 APT 缓存扫描、modalias 模式匹配以及一个解锁整个硬件支持归档的存根软件包。这些都不是魔法,只是设计良好的工具协同工作。
下次 Ubuntu 在安装后立即在你的认证硬件上完美启动时,你将确切知道幕后发生了什么:一次条形码扫描、一次软件包查找,以及一个启动一切的小小存根软件包。
资源:



