LVFS 让 Linux 固件更新更轻松

Linux 供应商固件服务充当发布更新的硬件供应商与需要安装更新的最终用户之间的桥梁。
505 位读者喜欢这篇文章。
Open lightbulbs.

Opensource.com

传统上,在 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-utildfu-programmerflashromfwupdate 更新项目,则很有可能它可以使用 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 支持。

标签
User profile image.
Richard 拥有超过 10 年的开源软件开发经验。

9 条评论

我同意。不幸的是,它在 F27 中坏了。看起来像是错误插入的路径... /boot/efi/EFI/EFI//boot/efi/EFI/...

正在调度… [ - ]UEFI 固件更新失败:{错误 #0} /builddir/build/BUILD/fwupdate-9/linux/libfwup.c:1193 get_fd_and_media_path(): 打开 /boot/efi/EFI/EFI//boot/efi/EFI/fedora/fw/fw/fwupdate-K0LvwD.cap 失败:没有此文件或目录

太棒了!我会等待。第二件事是,dmidecode 告诉我已经是 2.3.1 了,但 fwupdmgr 认为仍然是 2.2.1

BIOS 信息
供应商:Dell Inc.
版本:2.3.1


XPS 13 9360 系统固件
版本:0.2.2.1
最低版本:0.2.2.1

我也在等待 TB16 固件更新。这个扩展坞不是戴尔最好的产品。

感谢您的辛勤工作!!!
我无法想象这有多复杂和耗时。

回复 作者: hughsie

戴尔选择在 fwupd 中将版本号指定为 aa.bb.cc.dd 而不是稍微更正常的 aa.bb.ccdd -- fwupd 支持这一点,但 dmidecode 似乎不支持。

回复 作者: Creep

我有一台 HP Pavilion 15 ab252ur (V2H26EA),惠普声称只有在 Win10 是唯一安装的系统时才支持 FW 更新。我在其上安装了 Ubuntu 16.04 作为第一个系统,然后安装了 Win10 作为第二个系统(都在 UEFI 模式下,安全启动已禁用),之后我无法从 Win10 中更新 FW。我是否有可能使用此软件和存储库从 Ubuntu 中更新 FW?

惠普尚未将此型号包含在 LVFS 中,但一旦他们这样做,就没有理由不应该工作。

回复 作者: Wladimir Mutel (未验证)

将这项工作推给制造商是一个好主意,他们都应该更加努力地工作,以确保他们的用户可以使用他们购买的设备。我猜想最大的问题将是制造商将固件作为计划报废的驱动力(有点像 iPhone 在新 iPhone 发布之前变慢一样)。

我们的许多供应商都表示需要在 FreeBSD 上使用本机工具来更新固件。因此,我想知道这是否可能是一条前进的道路,尽管目前看来这主要集中在 Linux 桌面。

虽然它确实专注于 Linux,但我不认为 fwupd 中实际上有任何 Linux 特定的代码。我没有尝试在 FreeBSD 上安装 fwupd,但我认为如果所需的依赖项版本到位,应该可以实现。一些可选插件是 Linux 特定的(例如 UEFI UpdateCapsule 插件),但您可以将其编译出来。

回复 作者: Scott Lamons

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.