/sys/firmware目录映射固件与内核交互接口,非硬件寄存器镜像;主要含acpi/(ACPI表、设备、平台信息)和efi/(UEFI变量、运行时服务等),由内核启动时解析固件动态生成。

/sys/firmware 目录本身不直接映射硬件设备,它映射的是固件(firmware)与内核交互的接口层,本质是内核对底层固件状态、能力及控制通道的抽象表达。
它不是硬件寄存器或物理地址的直接镜像,而是通过 sysfs 暴露的、由内核 firmware 子系统管理的逻辑视图,用于协调驱动与固件之间的数据交换和状态同步。
/sys/firmware 里实际包含什么?
该目录下主要存在两类子目录,分别对应主流固件接口标准:
-
/sys/firmware/acpi/
提供 ACPI(Advanced Configuration and Power Interface)相关信息:-
tables/:列出当前加载的 ACPI 表(如 DSDT、SSDT、FADT),可通过cat /sys/firmware/acpi/tables/DSDT > dsdt.aml提取原始表; -
devices/:展示由 ACPI 枚举出的设备(如PNP0C14电池、INT33A1集成触摸板),这些设备可能无对应总线(如 PCI),但被 ACPI 描述并交由内核管理; -
platform/:存放平台级 ACPI 设备(如嵌入式控制器 EC)的属性节点,例如ec下有query、status等可读写文件。
-
-
/sys/firmware/efi/(仅 UEFI 启动系统存在)
反映 EFI 运行时服务与固件环境:-
efivars/:每个文件代表一个 EFI 变量(如BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c),权限通常为rw-r--r--,可读写(需CAP_SYS_ADMIN); -
runtime-map、capsule/:暴露 EFI capsule 更新机制与运行时内存映射信息; -
config_table/:列出 EFI 配置表(如ACPI_20,SMBIOS3),内核据此获取硬件拓扑与配置数据。
-
✅ 注意:这些内容均由内核在启动阶段解析固件后动态生成,不随硬件物理变化实时刷新,也不等同于
/dev/mem或/proc/iomem中的地址映射。
linux-sysadmin下载Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
它如何参与硬件初始化?
固件本身(如 BIOS/UEFI/ACPI table)不直接控制硬件,而是提供“描述”和“契约”。/sys/firmware 是内核兑现这些契约的窗口:
- 驱动加载时,通过
acpi_dev_get_first_match_dev()查找匹配的 ACPI 设备节点; - 内核根据
DSDT中_CRS(Current Resource Settings)分配 IO 内存、中断号,并在/sys/devices/中创建对应设备; - 当驱动调用
request_firmware()加载二进制固件(如 WiFi 芯片微码),固件子系统会通过/sys/class/firmware/接口触发用户空间响应——而该机制的 uevent 上报路径,依赖/sys/firmware下的固件状态标识(如loading、data文件); - EFI 变量修改(如
efivar工具写BootOrder)会经由/sys/firmware/efi/efivars/触发内核调用 EFI SetVariable() 服务,最终影响下一次启动设备顺序。
常见误判澄清
- ❌
/sys/firmware不是/dev的替代,不能用来 open/read/write 硬件寄存器; - ❌ 它不包含设备树(DTB)内容——设备树由内核在 early boot 解析后存入内存,其节点反映在
/sys/firmware/devicetree/(仅 ARM/ARM64 平台启用,且需 CONFIG_OF=y),但该路径属于 devicetree 子系统,与 ACPI/EFI 并列,非统一入口; - ✅ 若系统使用 ACPI + UEFI,则
/sys/firmware/acpi/和/sys/firmware/efi/同时存在,各自承担不同职责:ACPI 描述设备功能与电源策略,EFI 提供启动服务与持久变量。
实用检查建议
想确认固件如何影响当前硬件可见性,可执行:
# 查看是否启用 ACPI ls /sys/firmware/acpi/tables/ >/dev/null 2>&1 && echo "ACPI active" || echo "ACPI disabled or absent" # 列出 EFI 变量数量(UEFI 系统) ls /sys/firmware/efi/efivars/ | wc -l # 查看某 ACPI 设备是否被识别 ls /sys/firmware/acpi/devices/ | grep -i "battery\|thermal"
它的作用不是“映射硬件”,而是让内核把固件说清楚的事,变成你能查、能调、能响应的文件接口。


















