在 Linux 中,固件 是指与特定硬件组件紧密相关的低级软件,通过提供指令和控制机制使它们能够正常运行。此固件在内核之下运行,但对于硬件与操作系统交互至关重要。
让我们分解一下问题的每个部分:
1. Linux 中的固件#
在 Linux 系统中,固件通常是指在以下硬件设备上运行的微代码或二进制代码:
- CPU(例如,Intel 或 AMD 微代码)
- GPU(显卡固件)
- 网卡(Wi-Fi 或以太网适配器固件)
- 存储控制器(例如,SSD 固件)
- 外围设备(例如,USB 设备、声卡)
==一些固件内置于硬件本身,而其他固件则由操作系统在启动期间加载。==Linux 使用存储在 /lib/firmware 目录中的文件来处理固件加载。
2. /sys 目录中的固件#
Linux 中的 /sys 目录是 sysfs 虚拟文件系统的一部分,它提供了内核和用户空间之间的接口,公开了有关硬件设备和内核子系统的详细信息。尽管 sysfs 主要处理内核和设备信息,但它也可以公开固件相关数据。
- /sys/firmware:此目录包含与系统固件相关的信息和接口,例如:
- /sys/firmware/efi:如果您的系统以 UEFI 模式启动,则此目录包含有关 UEFI 固件的详细信息,例如配置表、运行时变量和内存映射。
- /sys/firmware/acpi:与 ACPI(高级配置和电源接口)固件相关的信息,可帮助进行电源管理和硬件配置。
- /sys/firmware/dmi:DMI(桌面管理接口)表提供系统信息,例如主板型号、系统制造商和 BIOS/UEFI 版本。
3. 固件、内核、硬件和系统之间的关系#
这些组件中的每一个都在计算机的整体运行中发挥着关键作用:
固件#
- 它是什么:固件是嵌入硬件或由系统在运行时加载的低级软件。它提供了硬件应如何运行和与操作系统通信的基本指令。
- 角色:固件直接控制硬件,使其能够运行。如果没有固件,网卡、CPU 和 GPU 等硬件组件可能无法正常工作或根本无法工作。
- 位置:固件要么预装在硬件中(非易失性存储器),要么从操作系统加载(来自 Linux 中的“/lib/firmware”)。
内核#
- 它是什么:Linux 内核是操作系统的核心。它管理系统资源,包括内存、进程和硬件。
- 角色:内核负责通过驱动程序与硬件通信,驱动程序充当内核和硬件设备之间的中介。在需要时,内核还可以加载固件来初始化和控制特定硬件。
- 与固件的关系:内核与固件交互以初始化设备。它在需要时将固件加载到设备中,并处理固件与更高级别系统进程之间的通信。
硬件#
- 它是什么:计算机的物理组件,例如 CPU、GPU、网卡、硬盘和外围设备。
- 角色:硬件执行系统所需的物理任务(例如计算、存储、输入/输出)。但是,硬件需要固件和内核驱动程序才能正常运行并与系统的其余部分交互。
系统#
- 它是什么:整个计算机,包括硬件、固件、内核和用户级软件(应用程序、实用程序等)。
- 角色:系统作为一个整体,提供用户可以与应用程序和服务交互的环境,而应用程序和服务又依赖内核来访问硬件资源。如果没有固件,系统可能无法正确初始化硬件组件。
交互示例:#
当 Linux 系统启动时:
- 固件 (BIOS/UEFI) 初始化硬件,执行 POST(开机自检),然后将控制权传递给引导加载程序(如 GRUB)。
- 引导加载程序将 内核 加载到内存中。
- 加载内核后,它开始初始化设备(如网卡或 GPU)。如果硬件需要额外的固件,内核将从
/lib/firmware加载它。 - 内核使用 驱动程序 来管理硬件和操作系统之间的通信。
- 硬件现在已正确初始化并由其固件和内核驱动程序控制,可以执行其任务(例如,网络传输、渲染图形等)。
关系摘要:#
- 固件是直接控制硬件组件的低级软件。==可以与硬件直接通信,不依赖于操作系统。==
- 内核是操作系统的核心,它使用驱动程序管理系统资源和硬件,并在必要时加载固件。
- 硬件依靠固件和内核驱动程序与操作系统通信。
- 系统包含所有这些组件,共同为用户提供功能环境。==系统要控制硬件,必须要通过驱动程序。==


