fwupd/fwupd

GitHub: fwupd/fwupd

Linux 平台的标准固件更新守护进程,通过 LVFS 实现跨厂商固件的自动、安全更新。

Stars: 3881 | Forks: 559

# fwupd [![构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b6e4b9da6e165434.svg)](https://github.com/fwupd/fwupd/actions/workflows/ci.yml) [![翻译状态](https://hosted.weblate.org/widget/fwupd/svg-badge.svg)](https://hosted.weblate.org/engage/fwupd/) [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a968550c66165435.svg)](https://github.com/fwupd/fwupd/actions/workflows/codeql-analysis.yml) [![Coverity 扫描构建状态](https://scan.coverity.com/projects/10744/badge.svg)](https://scan.coverity.com/projects/10744) [![Fuzzing 状态](https://oss-fuzz-build-logs.storage.googleapis.com/badges/fwupd.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:fwupd) [![Codecov 覆盖率状态](https://codecov.io/gh/fwupd/fwupd/graph/badge.svg?token=vykt2ROfu9)](https://codecov.io/gh/fwupd/fwupd) [![OpenSSF 记分卡](https://api.securityscorecards.dev/projects/github.com/fwupd/fwupd/badge)](https://securityscorecards.dev/viewer/?uri=github.com/fwupd/fwupd) [![OpenSSF 最佳实践](https://www.bestpractices.dev/projects/8751/badge)](https://www.bestpractices.dev/projects/8751) 本项目旨在使 Linux 上的固件更新变得自动、安全且可靠。 更多信息请访问[网站](https://fwupd.org/)。 ## 获取帮助? - [此仓库](https://github.com/fwupd/fwupd)中的 GitHub issues 和讨论 ## 编译 有关如何构建 fwupd 开发环境,请参阅[构建和调试](docs/building.md)。 用户应仅安装由其发行版提供并通过包维护者管理和测试的 fwupd 更新。 发行版还会测试 fwupd 与系统上其他软件的交互情况,例如 GNOME Software。 安装 fwupd 时使用 [Snap](https://github.com/fwupd/fwupd/wiki/fwupd-snap) 或 [Flatpak](https://github.com/fwupd/fwupd/wiki/fwupd-flatpak) 可能 有助于在命令行更新需要最新 fwupd 版本的特定设备,但这不应被视为替代发行版提供的系统版本。 ### 使用 Tartan [Tartan](https://gitlab.freedesktop.org/tartan/tartan/-/wikis/home) 是一个构建用于分析 GLib 代码的 LLVM 静态分析插件。可以通过以下方式安装并运行: ``` mkdir build-tartan CC=clang-18 meson ../ SCANBUILD=../contrib/tartan.sh ninja scan-build ``` ## LVFS 本项目默认配置为从 [Linux Vendor Firmware Service (LVFS)](https://fwupd.org/) 下载固件。 该服务面向所有希望向 Linux 用户提供其固件的 OEM 和固件创建者。 您可以在 [fwupd 网站](https://fwupd.org)的硬件供应商部分找到有关创建固件 capsule 技术细节的更多信息。 ## 基本使用流程(命令行) 如果您拥有 fwupd 支持的固件设备,可以通过以下方式使用 fwupd 的命令行工具检查并应用更新。 `# fwupdmgr get-devices` 这将显示 fwupd 检测到的所有设备。 `# fwupdmgr refresh` 这将从 LVFS 下载最新的元数据。 `# fwupdmgr get-updates` 如果系统上的任何设备有可用更新,它们将被显示出来。 `# fwupdmgr update` 这将下载并应用系统的所有更新。 - 可以实时应用的更新将立即执行。 - 在启动时运行的更新将被暂存,直到下次重启。 您可以在 [fwupd 网站](https://fwupd.org)的最终用户部分找到有关更新工作流程的更多信息。 ## Passim 如果同时安装并启用了 [Passim](https://github.com/hughsie/passim/blob/main/README.md) 项目,fwupd 将重新发布下载的元数据文件,默认在 `0.0.0.0:27500` 上提供服务。 同一网络上的其他客户端可以通过 mDNS/LLMNR 利用此功能,以减少到配置远程源的的网络带宽。 要禁用此功能,可以在 `/etc/fwupd/daemon.conf` 中设置 `P2pPolicy=none`,卸载 passim 包或在终端中使用 `systemctl mask passim.service`。 ## 报告状态 fwupd 将鼓励用户向 LVFS 报告成功和失败的更新。这是一项可选功能,但受到鼓励,因为它向 LVFS 管理员和 OEM 开发人员提供了有关固件更新过程效率的宝贵反馈。 有关此数据的隐私政策可以在 [lvfs readthedocs 站点](https://lvfs.readthedocs.io/en/latest/privacy.html)上查看。 要报告更新状态,请运行: `# fwupdmgr report-history` 只有从 LVFS 分发的更新才会被报告给 LVFS。 ## 企业使用 在企业环境中,可以使用“已批准更新”功能控制更新流程。这允许域管理员从中央服务器(例如 LVFS 或镜像)筛选可能的更新,仅保留已在您的组织中专门测试过的固件。 可以通过将 `ApprovalRequired=true` 添加到远程配置文件(例如 `lvfs.conf`)来启用已批准更新列表。启用后,可以在 `fwupd.conf` 中使用逗号分隔的列表设置已批准更新列表。 例如: ``` ApprovedFirmware=foo,bar ``` 其中 `foo,bar` 指的是元数据文件中对应于两个更新的容器校验和(checksums)。 此外,可以使用 `fwupdmgr set-approved-firmware baz` 或使用 D-Bus 接口来补充已批准固件列表。 ## 其他前端 fwupdmgr 是一个命令行客户端,但 [fwupdmgr 手册页](https://fwupd.github.io/libfwupdplugin/fwupdmgr.html#description)中列出了各种额外的图形前端。 ## SAST 工具 - [Coverity](https://scan.coverity.com/) - 用于 Java、C/C++、C#、JavaScript、Ruby 和 Python 代码的静态分析器。 - [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_medium=github&utm_campaign=open_source) - 用于 C、C++、C# 和 Java 代码的静态分析器。 ## 打包说明 如果您正在下游开发或维护 fwupd 软件包,请考虑以下注意事项。 - 应谨慎使用 Meson 构建选项 `systemd_unit_user`,并且指定的用户(或结果组)应不被 非特权系统用户访问。否则,这可能会带来权限提升的风险。此设置的默认值(`DynamicUser=true`)是 安全的,应在一般情况下使用。
标签:Awesome, BIOS更新, DNS解析, Flatpak, GNOME, LVFS, Snap, UEFI, 固件更新, 基础设施, 安全更新, 客户端加密, 开源项目, 操作系统, 服务端组件, 硬件管理, 系统守护进程, 系统管理, 自动更新, 设备驱动, 预握手