传统上,在 Linux 中更新 BIOS 或网卡固件意味着启动到 Microsoft Windows 或准备 MS-DOS 软盘,并希望更新后一切都能正常工作。定期搜索供应商网站以查找更新是一项手动且容易出错的任务,不应该要求用户这样做。固件更新服务使最终用户更容易实施硬件更新。
固件更新服务需要两件事
- 供应商向服务提供有关特定硬件可用更新的信息,以及
- 将固件部署到硬件上的机制。
Linux 供应商固件服务 (LVFS) 是一项安全的 Web 服务,允许硬件供应商上传固件更新。LVFS 提供的元数据和文件被所有主要的 Linux 发行版用于为客户端(如 fwupdmgr 和 GNOME 软件)提供元数据。供应商使用 LVFS 托管或分发内容也是免费的(尽管欢迎来自 OEM 和用户的捐款)。
对于最终用户,fwupd 是一个为 Linux 构建的简单守护程序,允许会话软件在本地计算机上更新设备固件。它专为桌面设计,但也适用于手机和无头服务器。要查看和应用更新,用户可以使用 GUI 软件管理器(如 GNOME 软件)、命令行工具或系统 D-Bus 接口。
LVFS 的起源
许多硬件已经支持用户可升级的闪存固件。这对供应商来说是一件好事,因为他们可以交付硬件并在发现和修复错误时部署更新。通过拆分可用的闪存存储器,将引导加载程序放在一个部分,将应用程序固件放在另一个部分,后者可以在无需拆卸或昂贵的编程器的情况下进行升级。
LVFS 源于我设计 ColorHug 的经验,ColorHug 是一款开源硬件色度计,允许 Linux 用户校准他们的显示器。自该项目启动以来,我们已经为三种不同的 设备 交付了十多个更新。与大多数开源硬件设备一样,为了升级固件,我以 tarball 形式交付了项目特定的工具,通过 HTTP 从我的托管提供商处拉取自定义元数据文件。二进制固件有一个校验和,但没有私有/公共签名。大多数用户只是使用命令行,以 root 身份使用静态链接的程序来刷新固件。
大约在同一时间,Red Hat 希望我帮助使更多硬件“开箱即用”。其中一些涉及添加内核驱动程序,一些是修复 GNOME 以支持新硬件,还有一些是在设备上更新固件。在 Linux 中升级笔记本电脑固件通常是一种糟糕的体验,我想知道我是否可以生产共享基础设施,大型公司和开源硬件纳米供应商都可以使用它——既可以应用固件本身,又可以以共享、安全的方式分发元数据和固件文件。这就是 LVFS 的由来。
fwupd 的工作原理
fwupd 守护程序支持常用的设计固件升级 (DFU) 和统一可扩展固件接口 (UEFI) 标准,以及许多供应商特定的更新协议。如果可以使用 dfu-util、dfu-programmer、flashrom 或 fwupdate 更新项目,则很可能它可以在 fwupd 中正常工作,而无需额外的代码。如果更新协议是供应商特定的(例如 Logitech 使用的协议),我们可以为守护程序编写一个小插件来升级硬件。目前,LVFS 支持大约 10 种不同的升级机制,并且 fwupd 与每个现代 Linux 发行版一起发布。
LVFS 允许任何规模的供应商免费创建帐户并上传带有标准元数据的可再发行固件。选择 CAB 容器格式是为了允许使用 Microsoft Update 工具重新签名现有文件。固件使用 GNU Privacy Guard (GPG) 进行签名,共享元数据文件使用固件的 SHA256 哈希值进行更新。然后,新文件上传到启用 SSL 的内容交付网络,并且可以存在于私有、禁运、测试或稳定状态。
LVFS 现在支持 70 多种不同的设备,并且每个月有超过 165,000 台设备通过 fwupd 使用 LVFS 上的固件进行更新。此外,每月下载近 1 亿次可用固件列表。自从我们启动这个项目以来,至少有 600,000 件硬件(但可能更多)已使用新固件进行了更新。
我们得到了许多大型供应商的有力支持,还有一些其他供应商正在测试该服务并致力于获得上传二进制文件的法律批准。我希望看到更多硬件在 LVFS 上,并且 fwupd 守护程序中支持更多自定义刷新协议。
硬件的生产已经足够困难,无需设计一个可以在每个 Linux 发行版上安全升级的机制。如果您想使用 LVFS 分发固件,请联系我。如果您想开发 fwupd 插件,您可以 发送电子邮件到邮件列表 或开始阅读 文档。如果您知道有硬件支持用户可升级固件,请询问制造商是否包含 LVFS 支持。
9 条评论