通过 fwupd 更新外围设备固件

版本:2.4.3
上次更新日期:2025-07-23

概览

本指南旨在介绍如何配置 ChromeOS 界面支持的 fwupd 固件更新。

fwupd 流程图

背景

fwupd 是一种开源守护程序,可在基于 Linux 的系统上执行外围设备和其他系统固件更新。fwupd 是 ChromeOS 更新外围设备固件的机制。

fwupd 更新载荷由存储在 Linux 供应商固件服务 (LVFS) 中的 .cab 文件组成。在 Linux 中,fwupd 更新上传到 LVFS 后,即可广泛提供。不过,为了让 ChromeOS 中提供更新,ChromeOS 团队会单独验证新更新并将其列入许可名单,以确保最佳用户体验。

fwupd 进程

以下内容仅适用于已获得 WWCB 认证且已将样品发送给 Allion 的外围设备。

如果 ChromeOS 中的当前 fwupd 版本尚不支持该外围设备,请按照用例 1 用例 2 中提供的说明操作。如果 ChromeOS 中的当前 fwupd 版本已支持该外围设备,请跳至使用情形 2

使用情形 1:ChromeOS 当前版本的 fwupd 不支持该外围设备

ChromeOS 中的当前版本 fwupd 尚不支持该外围设备。

图片

  1. ODM 和 OEM 直接与芯片组供应商合作,将插件更改提交到 fwupd 代码库中。

    1. 请参阅 fwupd 集成手册(第二步 - 使用 fwupd)
    2. 插件更改:示例 1示例 2
    3. .quirk 文件中匹配 VIDs:PIDs示例 3
      • 作为怪异文件更改的替代方案,如果现有插件支持 USB 外围设备,您可以遵循 DS20 规范
    4. 让 fwupd 的维护人员合并生成的插件和怪异行为更改。
    5. 等待 fwupd 的正式点版本(即 1.8.4),请记下相应版本。
  2. fwupd 版本会定期镜像到 ChromeOS 中,并遵循 Chromium 发布时间表

  3. 如果您在即将发布的 Chromium 版本的功能冻结截止日期之后提交插件更改、bug 修复或怪异文件更改,但这些更改对于下一个 ChromeOS 版本而言具有较高优先级,则:

    1. 前往合作伙伴问题跟踪器
    2. 使用您的 Google 合作伙伴网域账号登录。
    3. 点击左侧菜单中的 Create Issue 按钮,在您的组件 (ChromeOS > External > WWCB > PERIPHERAL OEM > fwupd) 中创建 bug。这会提醒 ChromeOS 团队在 ChromeOS 中升级 fwupd 版本。

      在 bug 中提供以下信息:

      1. bug 标题:

        [PRODUCT NAME - fwupd]: New Plugin NAME OF THE PLUGIN requires fwupd X.Y.Z version uprev
        
      2. Bug 描述:

        1. 包含插件更改的 fwupd 版本号:
          • 它添加了哪些功能?
          • 修复了哪些 bug?
          • 支持哪些硬件?
        2. 设备的品牌/型号
        3. VID、PID
        4. GUID(全局唯一标识符)
      3. 示例屏幕截图:

        fwupd uprev bug 的屏幕截图

  4. 该 bug 将被分诊,Google 工程师会将 fwupd 的选择性版本纳入 ChromeOS。

  5. 在更改列表获得批准后,升级后的 fwupd 版本将升级到 Canary 渠道。

    • 在 bug 上发表评论,了解哪个 ChromeOS build 版本包含 uprev'd 版本的 fwupd。您还可以使用 CL Finder 在 ChromeOS 合作伙伴控制台 (CPCon) 中搜索 build 版本(需要 Google 公司合作伙伴网域账号,请联系 TAM 以获取 CPCon 访问权限)。

用例 2:ChromeOS 当前版本的 fwupd 支持该外围设备

ChromeOS 中的当前 fwupd 版本已支持该外围设备,并且有新固件可用。

图片

  1. 创建 .cab 文件。

    所有固件都以 cabinet 归档文件形式上传。除了固件二进制文件之外,LVFS 还要求归档文件包含至少一个 .metainfo.xml 文件,用于描述目标设备和固件。您可以在 Linux 上使用 gcab(用于创建 cabinet 文件的库)创建 cabinet 归档文件。

  2. 将经过测试的最终固件更新(.cab 文件)上传到 LVFS。

    1. 确保稳定版遥控器上提供相应更新。

      如果该 build 在私有禁推测试远程服务器上可用,则不会添加到 ChromeOS 镜像中。

    2. 通过签名报告在 LVFS 中标记为已验证的更新。

      确保已添加设备测试。

    3. 如果这是首次上传固件,请确保 LVFS 的稳定远程至少有 2 个固件,即基础固件(用于测试降级)和新固件(用于测试升级)。

  3. 应通过签名报告在 ChromeOS 上测试固件升级。

    1. 将证书上传到 LVFS,以将 DUT 与您的账号相关联。

      1. 使用您的账号登录 LVFS
      2. 点击右上角的“个人”图标,或点击 https://fwupd.org/lvfs/profile{:.external}。
      3. 点击个人资料设置
      4. 在 Chromebook 上找到客户端证书

        • 注意:Chromebook 必须处于开发者模式
        • ctrl+alt+t 启动 ChromeOS 开发者 shell
        • Type:

          shell
        • 前往 /var/lib/fwupd/pki

          cd /var/lib/fwupd/pki
        • client.pem 复制到 Chromebook 上的某个文件夹,例如:Downloads

          cp client.pm /home/chronos/user/MyFiles/Downloads/
    2. 点击 LVFS 网站上客户端证书部分中的上传证书按钮,然后上传证书。

      1. 在您用于测试的每台 Chromebook 上重复执行这些步骤(您可以为不同的计算机上传多个证书)。
    3. 通过 DUT 测试升级并上传已签名的报告。

      1. 如需测试和上传报告,请运行以下命令,并在系统提示时进行身份验证。

        fwupdmgr refresh
        fwupdmgr update
        fwupdmgr report-history --sign
      2. 注意:如果您之前上传的报告没有 --sign 标志,可以使用 fwupdmgr report-history --sign --force 将同一报告重新上传到 LVFS。

        fwupdmgr report-history --sign --force
        • 您可以传递 --verbose 来查看服务器响应。

          fwupdmgr report-history --force --verbose
      3. 在确认对话框中点击

        • 这样一来,系统就会将签名后的报告上传到您的账号中。
        • 如需确认,请前往 https://fwupd.org/lvfs/dashboard,然后点击左上角首页部分下的已签名的报告
    4. 验证 LVFS 上的固件版本是否具有已签名的报告

      • 在 LVFS 上搜索外围设备。
      • 如果上传的已签名报告是在使用 Chromebook 成功升级外围设备的固件版本后生成的,则测试者部分将显示 ChromeOS 版本、fwupd 版本和实体。请参阅示例
      • 确保发布门控显示绿色对勾标记“可供 ChromeOS 用户使用”。
    5. 从 M126 开始,只有当固件在 LVFS 上具有已签名的报告(已通过 ChromeOS 测试)时,ChromeOS 用户才能获得固件更新。

      • 24 小时后,用户可以将外围设备连接到 Chromebook,并通过 ChromeOS 界面升级固件。依次前往设置 > 关于 ChromeOS > 固件更新
      • 注意:假设 ChromeOS 上已针对特定里程碑版本提供所有必需的插件更改,则固件更新将可用。

如需详细了解已签名的报告,请访问 LVFS

常见问题解答

问:哪些 Chromebook 支持 fwupd?

所有搭载 M101 或更高版本的 ChromeOS 设备。

问:如何查找与 ChromeOS 集成的 fwupd 版本?

  1. 通过浏览器打开 chrome://system(M109 或更高版本)。
    1. 导航到 fwupd_version
  2. 或者通过开发者模式、根控制台,
    1. 类型 fwupdmgr --version
    2. 留意车辆 runtime org.freedesktop.fwupd

问:fwupd uprev 流程需要多长时间?

fwupd uprev 遵循 Chromium 发布时间表,请确保在分支功能冻结截止日期之前提交 fwupd uprev 请求。

问:在哪里可以详细了解 ChromeOS 发布时间表?

Chromium 发布时间表中。

问:如何将 Chromebook 切换到开发者模式?

  1. 关闭 Chromebook。
  2. 按住 esc+刷新,然后按电源按钮。
    • 注意:在某些 Chromebook 上,请按 Esc+(向右箭头键),然后按“电源”按钮。
  3. 设备开启,您应该会看到恢复界面 / 模式。
  4. 然后按 Ctrl+d,接着按 Enter 接受。
    • 注意:如果您在按 ctrl+d 之前按了任何键,设备将不会转换到开发者模式。
  5. 设备将重启并发出蜂鸣声,您会看到“您的系统正在切换到开发者模式”。
  6. 大约 30 秒后,您会看到“正在为开发者模式准备系统”。
  7. 最终(这可能需要 10 分钟到 1 个多小时,具体取决于磁盘大小),设备将重新启动并进入常规欢迎界面。
  8. 如需打开命令提示符,请按 Ctrl+Alt+(向右键)。
    • 注意:在某些 Chromebook 上,此快捷键为 Ctrl+Alt+刷新键。
    • 如需返回浏览器视图,请按 Ctrl+Alt+(向左键)。
  9. 如需了解详情,请参阅 [开发者模式]

问:如何将 Chromebook 切换到普通模式(即停用开发者模式)?

重新启动设备,然后在固件界面中按空格键。

如需了解详情,请参阅 [开发者模式]。

问:ChromeOS 是否支持通过 fwupd 降级?

不可以。如果 fwupd 或固件的正式版出现故障,您将必须通过 https://fwupd.org/lvfs/dashboard 删除已签名的报告。每当您提交插件更改和/或有新固件可用时,都必须进行测试。确保 LVFS 的稳定远程版本上始终提供基本固件版本。

问:如何知道哪些版本的 ChromeOS 将支持哪些 fwupd 更新?

您可以在 bug 上发表评论,询问相应更改已纳入哪个 build 版本,Google 工程师应该能够为您提供相关信息。您还可以使用 CL Finder 在 ChromeOS 合作伙伴控制台 (CPCon) 中搜索 build 版本(需要 Google 公司合作伙伴网域账号 - 请联系 TAM 以获取 CPCon 访问权限)。您可以交叉引用 ChromeOS 合作伙伴前端 (CPFE) 上的 build 版本,以查看它对应于哪个里程碑。

问:如何创建 LVFS 账号?

请参阅 Getting an Account LVFS 文档。

问:如何将 CAB 文件上传到 LVFS?

请参阅 Uploading Firmware LVFS 文档。

问:如何确保固件适用于特定外围设备?

您可以通过最合适的配置文件来实现此目的。如需了解详情,请参阅 fwupd 最佳已知配置

问:如何在上传到 LVFS 之前测试我的 fwupd 更新?

提交插件更改并将 fwupd 的选择性版本纳入 ChromeOS 测试映像后,您可以通过 ChromeOS 合作伙伴前端 (CPFE) 访问该测试映像(需要 Google 公司合作伙伴网域账号 - 请联系 TAM 以获取 CPFE 访问权限)。

请参阅 LVFS 文档 ChromeOS 上的固件测试。 或者,您也可以使用 Moblab 运行 fwupd 测试

问:如何通知用户其外围设备有固件更新可用?

用户会收到通知,告知他们有更新可用,具体取决于 LVFS 中为相应更新分配的紧急程度。行为如下:

紧急情况 通知行为
用户不会收到通知,必须手动检查更新。
严重 每次启动时都会显示通知,直到更新完成。

问:fwupd 更新会自动进行吗?

不会。所有 fwupd 更新都由用户启动,不会在启动期间或自动进行。

问:DS20 规范的优势是什么?

目前仅针对 USB 外围设备进行了验证,如果您使用与在其他硬件上相同的协议,它将仅适用于 DS20 描述符。

供应商可以将怪异文件数据放入 USB 描述符中,而不是放入 fwupd 项目中。这样,当插入 USB 设备时,fwupd 会读取描述符数据、匹配插件、枚举设备,而无需让供应商向 fwupd 提交补丁并等待 fwupd 上调版本。

问:DS20 是否是仅用于替代怪异文件更改的选项?

可以;大多数情况下,未来的硬件只需要将 VID 和 PID 添加到现有插件,而无需进行实际的代码更改。如果需要更改代码,供应商必须向 fwupd 提交插件更改。

附录

  1. 开发者指南
  2. 开发者支持
  3. 面向 CrOS 贡献者的 Git 和 Gerrit 简介
  4. 更改源代码
  5. Gerrit 审核/审批流程
  6. fwupd 集成手册

修订历史记录

日期 版本 备注
2025-07-23 2.4.3 更新使用情形 1 工作流
2024-10-18 2.4.2 更新了 fwupd 工作流图片和上传客户端证书的步骤
2024-07-23 2.4.1 格式更新。
2024-06-26 2.4 更新了 fwupd uprev 工作流(用例 1)。(与 2.4.1 一起发布)
2024-06-17 2.3 更新了签名报告工作流。(与 2.4.1 一起发布)
2024-02-01 2.2 在新平台上重新发布;对措辞进行了小幅更新。
2023-10-12 2.1 添加了案例 1 和案例 2 中的图片,合作伙伴网站中托管的 fwupd 集成手册
2022-08-14 2.0 合作伙伴网站的初始发布