传统上,在 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 种不同的升级机制,并且每个现代 Linux 发行版都附带 fwupd。
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 条评论