Linux 固件

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Linux firmware and the translation is 100% complete.
Other languages:

Linux 固件是与 Linux 内核一起分发的包,包含某些硬件设备部分或全部功能所需的固件专有软件。这些二进制文件通常是专有的,因为某些硬件制造商不发布构建固件所需的源代码。

现代 AMDNVIDIA 显卡几乎可以确定需要加载二进制固件才能正常工作。

从 Broxton(基于 Skylake 的微架构)开始,Intel CPU 需要二进制固件来支持额外的低功耗空闲状态(DMC)、在各种图形并行引擎上调度图形工作负载(GuC)以及将一些媒体功能从 CPU 卸载到 GPU(HuC)[1]

此外,现代 Intel Wi-Fi 芯片组 几乎总是需要固件[2]

安装

出于安全原因,热加载固件到正在运行的内核中一直被摒弃。现代初始化系统如 systemd 强烈不建议从用户空间加载固件。

内核

警告
将不符合 GPL 条款的固件文件包含在二进制内核映像中,如果分发这些映像,可能会导致违反 GPL。建议在分发包含 sys-kernel/linux-firmware 固件文件的映像之前咨询律师。

在为 Linux 内核(从 4.18 版本开始)构建某些设备的固件支持时,有几个内核选项需要特别考虑:

固件加载 (CONFIG_FW_LOADER):此选项是为外部构建的模块使用用户空间加载的情况提供。
将命名的固件文件内置到内核二进制中 (CONFIG_EXTRA_FIRMWARE):此选项是一个字符串,接受将要内置到内核中的固件文件名(用空格分隔)。这些文件将在运行时供内核访问。
内核 启用对 Linux 固件的支持
Device Drivers  --->
  Generic Driver Options  --->
    Firmware loader --->
       -*- Firmware loading facility
       ()    Build named firmware blobs into the kernel binary
       # Optional: Enable compressed firmware support
       [*]   Enable compressed firmware support
       [*]     Enable XZ-compressed firmware support
       [*]     Enable ZSTD-compressed firmware support

USE 标记

USE flags for sys-kernel/linux-firmware Linux firmware files

+initramfs Create and install initramfs for early microcode loading in /boot (only AMD for now)
+redistributable Install also non-free (but redistributable) firmware files
bindist Flag to enable or disable options for prebuilt (GRP) packages (eg. due to licensing issues)
compress-xz Compress firmware using xz (app-arch/xz-utils) before installation
compress-zstd Compress firmware using zstd (app-arch/zstd) before installation
deduplicate Create symlinks for all firmware that is duplicate using rdfind
dist-kernel Enable subslot rebuilds on Distribution Kernel upgrades
savedconfig Allows individual selection of firmware files
unknown-license Install firmware files whose license is unknown

Emerge

root #emerge --ask sys-kernel/linux-firmware

可选:Savedconfig

在安装 sys-kernel/linux-firmware 后,配置文件会生成到 /etc/portage/savedconfig/sys-kernel/linux-firmware-ddmmyyyy。编辑此文件将不需要的行注释掉或删除。编辑并保存文件后,使用 savedconfig USE 标志重新安装 sys-kernel/linux-firmware

root #echo sys-kernel/linux-firmware savedconfig >> /etc/portage/package.use/kernel
root #emerge --ask sys-kernel/linux-firmware

可选:压缩

加载到内核中的固件可以进行压缩,以实现更高的空间效率和更快的读取速度(以处理时间为代价)。更多信息,请参见 CONFIG_FW_LOADER_COMPRESS

sys-kernel/linux-firmware 支持通过适当的 USE 标志使用 xzzstd(从 Linux 内核 5.19 开始[3])进行压缩。内核配置应包括 CONFIG_FW_LOADER_COMPRESS_XZ 和/或 CONFIG_FW_LOADER_COMPRESS_ZSTD 选项,以支持这些压缩格式。

故障排除

查找已加载的固件

可以使用 dmesg 命令结合 grep 来确定已加载的固件:

user $dmesg | grep -i firmware

移除

Unmerge

root #emerge --ask --depclean --verbose sys-kernel/linux-firmware

另请参阅

  • Fwupd — a daemon that provides a safe, reliable way of applying firmware updates on Linux.
  • Kernel — 操作系统的核心。
  • IwlwifiIntel 现有无线芯片的无线驱动。
  • Microcode — describes various ways to update a CPU's microcode in Gentoo.
  • AMDGPU — AMD Radeon和其他显卡的开源驱动程序。
  • Intel — 适用于Intel板载显卡、Intel集成显卡和 Intel Arc独立显卡的开源图形驱动程序,从Intel 810开始支持。

外部资源

参考