什么是固件?它和软件、硬件的关系
🔥 UEFI/BSP 开发系列第 005 篇 | 难度:⭐ 入门
作者:BSP 开发工程师
系列目标:300 篇由浅入深,构建完整的 UEFI 固件知识体系
写在前面
在前四篇里,我们反复提到"固件""BIOS""UEFI"这些词。但如果有人突然问你:
"固件到底是啥?它算软件还是硬件?"
你可能一时还真说不清楚。
今天我们就把这个概念彻底掰扯明白。
一、硬件、软件、固件的三国关系
先看一个最简单的分类:
+-----------------------------------------------------------+
| 一台电脑的组成 |
+-----------------------------------------------------------+
| |
| 硬件 (Hardware) 固件 (Firmware) 软件 (Software)
| 你摸得到的东西 烧在硬件里的代码 装在硬盘里的程序
| |
| CPU、内存、硬盘 UEFI/BIOS Windows、Chrome
| 显卡、网卡、主板 硬盘固件 Office、游戏
| 电源、散热器 网卡固件 驱动程序
| 显卡 VBIOS |
| EC 固件 |
| SSD 控制器固件 |
+-----------------------------------------------------------+
一句话区分:
- 硬件:物理实体,不通电就是一块砖
- 软件:装在存储设备上,操作系统跑起来之后才能运行
- 固件:烧在硬件芯片里的代码,硬件通电就开始跑,比操作系统更早执行
二、固件为什么叫"固"件?
英文 Firmware 这个词是 1967 年由 Ascher Opler 在一篇论文中首次使用的。
为什么叫 Firm(坚固的)?
因为它的"硬度"介于硬件和软件之间:
硬度排名:
硬件 Hardware ████████████████ 最硬 (物理改动才能变)
固件 Firmware ████████████ 中间 (可以刷新, 但通常不轻易改)
软件 Software ████ 最软 (随时安装卸载更新)
- 硬件:你想改 CPU 的引脚数?做梦。
- 固件:可以改,但需要专门的刷写工具,刷坏了可能变砖。
- 软件:双击安装,不想要了就卸载。
固件就像纹身——写上去之后不是不能改,但改起来比换件衣服(软件)麻烦多了。
三、你身边到处都是固件
固件不只存在于电脑主板上。几乎每个带芯片的设备都有固件:
| 设备 | 固件干什么 |
|---|---|
| 主板 | UEFI/BIOS——初始化 CPU、内存、总线,启动操作系统 |
| SSD / 硬盘 | 控制器固件——管理闪存颗粒读写、磨损均衡、垃圾回收 |
| 显卡 | VBIOS / GOP ROM——初始化 GPU,点亮显示器 |
| 网卡 | NIC 固件——管理 MAC 地址、网络协议处理 |
| 键盘 | 键盘固件——扫描按键矩阵,发送键值 |
| 鼠标 | 鼠标固件——读取传感器,报告坐标 |
| 路由器 | OpenWrt / 厂商固件——实现路由、NAT、防火墙 |
| 智能手表 | RTOS 固件——管理传感器、显示、蓝牙 |
| 汽车 | ECU 固件——控制发动机、变速箱、ABS |
| 电饭煲 | MCU 固件——控制加热曲线 |
你的电脑里至少有 5-10 个 独立的固件在同时运行:主板固件、EC 固件、SSD 固件、显卡固件、网卡固件、雷电控制器固件、音频 DSP 固件……
操作系统以为自己是老大,其实它是最后一个上班的。固件们早就把活干完了,才通知操作系统来"主持大局"。
四、固件存在哪里?
软件存在硬盘上,固件存在哪里?
固件存在非易失性存储芯片里——断电不丢数据的那种。常见的存储介质:
| 存储介质 | 特点 | 典型用途 |
|---|---|---|
| SPI Flash (NOR) | 容量小(8-64MB),可直接执行 | 主板 UEFI 固件 |
| eMMC / UFS | 容量大,需要控制器 | 手机固件、嵌入式设备 |
| EEPROM | 容量极小(几KB),擦写次数有限 | EC 配置、MAC 地址存储 |
| OTP ROM | 一次性写入,不可修改 | 安全密钥、硬件 ID |
主板上的 UEFI 固件一般存在一颗 SPI NOR Flash 芯片里。长这样:
主板上的 SPI Flash:
+--------+
| 8-pin | <-- 通常在主板的某个角落
| SOIC-8 | 标注 Winbond / MXIC / GigaDevice 等
| 芯片 | 容量: 16MB / 32MB / 64MB
+--------+
|
连接到 PCH (Platform Controller Hub)
|
CPU 通过 PCH 访问 SPI Flash 中的固件代码
SPI NOR Flash 的特点:支持 XIP(Execute In Place,就地执行)——CPU 可以直接从 Flash 上读取并执行代码,不需要先把代码加载到内存里。这就是为什么在内存初始化之前,CPU 就能执行 UEFI 固件代码的原因。
还记得 003 篇讲的 Reset Vector (0xFFFFFFF0) 吗?那个地址对应的就是 SPI Flash 通过地址映射"投射"到 CPU 地址空间顶端的区域。
五、固件和驱动有什么区别?
这是一个非常经典的困惑:固件和驱动(Driver)有什么不同?
时间线:
通电 -----> UEFI固件运行 -----> OS启动 -----> OS驱动加载
^ ^
| |
固件在这里 驱动在这里
(操作系统还没醒) (操作系统已经跑起来了)
| 对比 | 固件 (Firmware) | 驱动 (Driver) |
|---|---|---|
| 运行时机 | 通电就跑 | 操作系统启动后加载 |
| 运行环境 | 裸机 / UEFI 环境 | 操作系统内核 |
| 存储位置 | Flash 芯片 | 硬盘(操作系统分区) |
| 更新方式 | 刷写固件(有变砖风险) | Windows Update / 手动安装 |
| 目标硬件 | 初始化硬件本身 | 让操作系统使用硬件 |
举个例子——显卡的一生:
- 显卡固件(VBIOS/GOP):电脑开机时,UEFI 固件加载显卡的 GOP 驱动,初始化 GPU,让屏幕亮起来——此时操作系统还没启动
- 显卡驱动(NVIDIA Driver):Windows 启动后,加载 NVIDIA 驱动,提供 3D 加速、多显示器管理、游戏优化等功能
固件是"叫你起床的闹钟",驱动是"帮你安排一天行程的秘书"。闹钟只需要响一下,秘书要跟你一整天。
六、BSP 工程师和固件的关系
作为 BSP(Board Support Package)开发工程师,你的核心工作就是让固件跑起来。
具体来说:
BSP 工程师的日常:
芯片原厂 (Intel/AMD/Qualcomm)
|
| 提供: 参考设计 + FSP/固件包 + 文档
v
BSP 工程师 (你)
|
| 工作内容:
| 1. 拿到新板子 (硬件团队焊好的)
| 2. 根据板子的硬件配置修改固件参数
| 3. 编译固件,刷到 SPI Flash 上
| 4. 开机,看串口日志
| 5. 不亮?改参数、查信号、对时序
| 6. 亮了?继续调外设:USB、NVMe、显示、网络
| 7. 全部OK?交给系统团队装操作系统
v
OEM 厂商 (联想/戴尔/华为...)
|
v
消费者 (用户)
BSP 工程师是第一个让板子活过来的人。硬件团队把板子焊好了,交给你——此时这块板子就是一块砖。你刷入固件、调试参数,让它能点亮屏幕、能进系统——板子才算"活了"。
硬件工程师是"接生婆",BSP 工程师是"儿科医生"——孩子生出来了(板子焊好了),但你得让它能呼吸、能吃奶(能启动、能运行)。
七、小白补课:刷固件是什么意思?
"刷固件"(Flash Firmware)就是把新的固件代码写入到 Flash 芯片中,替换掉旧的。
常见的刷固件方式:
| 方式 | 操作 | 风险 |
|---|---|---|
| 在线刷新 | 在操作系统中运行刷写工具 | 低(有回滚机制) |
| UEFI Shell 刷新 | 在 UEFI Shell 环境下用工具刷 | 中 |
| 编程器刷写 | 用硬件编程器直接连 Flash 芯片 | 最安全(救砖用) |
| Capsule Update | UEFI 标准的固件更新机制 | 低(支持安全验证 + 回滚) |
编程器刷写是终极救砖手段:
编程器刷写示意:
编程器 (CH341A)
| SPI 信号线
| (CLK, MOSI, MISO, CS#)
v
+--------+
| Flash | <-- 芯片可以焊在主板上(在线编程)
| 芯片 | 或者取下来夹在编程器夹具上
+--------+
电脑上运行 flashrom 工具:
$ flashrom -p ch341a_spi -w new_firmware.bin
BSP 工程师的工位上通常都有编程器和测试夹具——因为在调试早期,固件经常刷坏导致板子不开机,只能用编程器强制写入。
八、总结
| 概念 | 一句话解释 |
|---|---|
| 硬件 | 摸得到的物理实体 |
| 软件 | 装在硬盘上,操作系统跑起来之后运行 |
| 固件 | 烧在 Flash 芯片里,通电就跑,比 OS 更早执行 |
| 驱动 | 操作系统里的程序,让 OS 能使用特定硬件 |
| BSP | 让固件在特定板子上跑起来的工程 |
固件是让硬件"活过来"的灵魂代码。没有固件,再贵的硬件也只是一块好看的砖。
下一篇预告
006. UEFI规范到底规定了什么?五分钟读懂核心概念
UEFI Specification 这本 2000 多页的"天书",到底写了什么?我们用五分钟提炼它的核心。
📌 本系列共 300 篇,从入门到芯片原厂 BSP 能耗优化
👨💻 作者:在职 BSP 开发工程师,持续更新中
🏷️ 标签:固件、Firmware、SPI Flash、BSP、驱动、刷固件
📁 GitHub:UEFI-BSP-300