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 一起工作,而无需额外的代码。如果更新协议是厂商特定的(如罗技使用的协议),我们可以为守护程序编写一个小插件来升级硬件。目前,LVFS 支持大约 10 种不同的升级机制,fwupd 随每个现代 Linux 发行版一起发布。

LVFS 允许任何规模的厂商免费创建帐户并上传带有标准元数据的可再发行固件。选择 CAB 容器格式是为了允许使用 Microsoft Update 工具重新签名现有文件。固件使用 GNU Privacy Guard (GPG) 进行签名,共享元数据文件使用固件的 SHA256 哈希值进行更新。然后,新文件上传到启用 SSL 的内容分发网络,并且可以处于私有、禁运、测试或稳定状态。

LVFS 现在支持 70 多种不同的设备,每个月有超过 165,000 台设备使用 LVFS 上的固件通过 fwupd 进行更新。此外,每个月下载的可用固件列表接近 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本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.