BIOS 到底在哪里?——服务器、PC、嵌入式 NVR 启动链条对比
引子
做服务器和嵌入式 NVR 多年,一直有个模糊的疑问:BIOS 到底在哪?换服务器系统盘要不要动 BIOS?嵌入式 NVR 的启动又是怎么回事?
直到把服务器、PC、嵌入式三者的启动链条拆开对比,才发现它们逻辑一致,只是物理位置和可修改性不同。
可以先查看《存储系列之 Linux ext2 概述》,有讲述linux文件系统的分区。
一、先分清两个层面
启动这件事,分两个层面:
| 层面 | 组件 | 职责 |
|---|---|---|
| 主板层 | BIOS/UEFI、Boot ROM | 硬件自检,从启动设备读取第一段代码 |
| 磁盘层 | MBR、Boot Block、Super Block | 接力加载内核,挂载文件系统 |
主板层负责“找磁盘”,磁盘层负责“加载系统”。
二、服务器/PC 的启动链条
第一环:BIOS/UEFI
- 位置:主板上一颗独立的 SPI Flash 芯片
- 可修改? 可刷写升级(刷 BIOS)
- 职责:上电自检,根据启动顺序,读取启动设备的第一个扇区(MBR)到内存并执行
第二环:MBR
- 位置:磁盘第一个扇区(LBA0,512B)
- 内容:引导代码(446B)+ 分区表(64B)
- 职责:确定活动分区,读取该分区的第一个块(Boot Block)并执行
第三环:Boot Block
- 位置:分区起始位置
- 职责:存放引导程序(如 GRUB),加载内核
第四环:Super Block
- 位置:分区内,Boot Block 之后
- 职责:记录文件系统整体信息(inode/block 总量等),内核挂载文件系统时读取
完整链条
CPU 上电 → BIOS/UEFI(主板 SPI Flash)→ MBR(磁盘 LBA0)
→ Boot Block(分区起始)→ 内核 → Super Block(文件系统)
三、嵌入式 NVR 的启动链条
第一环:Boot ROM
- 位置:SoC 芯片内部,出厂固化
- 可修改? 不可改
- 职责:上电后从固定地址取指,根据启动模式引脚,从 SPI Flash 加载 SPL
第二环:SPL + U-Boot
- 位置:SPI Flash 分区
- 可修改? 升级时可写
- 职责:初始化 DDR、时钟,加载内核
第三环:内核
- 位置:SPI Flash 分区
- 职责:挂载根文件系统
第四环:只读根文件系统
- 位置:SPI Flash 的
rom/rodata分区 - 文件系统:SquashFS(只读)+ OverlayFS(可写)
- 职责:提供运行环境
完整链条
CPU 上电 → Boot ROM(SoC 内部)→ SPL/U-Boot(SPI Flash)
→ 内核(SPI Flash)→ 根文件系统(SPI Flash)
四、三者的对应关系
| 启动环节 | 服务器/PC | 嵌入式 NVR |
|---|---|---|
| 第一环 | BIOS/UEFI(主板 SPI Flash) | Boot ROM(SoC 内部) |
| 第二环 | MBR(磁盘 LBA0) | SPL/U-Boot(SPI Flash 分区) |
| 第三环 | Boot Block(分区起始) | 内核(SPI Flash 分区) |
| 第四环 | Super Block(文件系统) | 根文件系统(SPI Flash 分区) |
逻辑一致,物理位置不同。
五、几个常见误解
误解一:系统盘坏了要刷 BIOS
系统盘(SSD/HDD)和 BIOS Flash 是两块完全独立的介质。系统盘坏了,换一块重装 OS,BIOS 不用碰。BIOS 只有在主板固件损坏或需要升级时才刷。
误解二:嵌入式没有 BIOS
嵌入式 SoC 内部有 Boot ROM,角色和 BIOS 对应,只是固化在芯片内部,不可修改。
误解三:服务器必须用独立系统盘
技术上完全可以不用,系统和数据装在同一块盘上。但主流方案坚持分离,因为故障隔离、扩容灵活、备份策略独立。
六、应用开发的视角
无论服务器还是嵌入式,应用开发者都不碰第一环:
- 服务器:装 OS、装 VMS,不碰 BIOS 和 MBR
- 嵌入式:在 BSP 提供的系统上跑应用,不碰 Boot ROM、U-Boot、内核
应用代码运行在同一抽象层:Linux 用户态。
区别在于资源约束:
| 维度 | 服务器 | 嵌入式 |
|---|---|---|
| 内存/存储 | 可扩展 | SoC 选型时绑定 |
| 系统盘可换? | 可换 | Flash 焊死 |
| 根文件系统 | 可写 | 只读 + OverlayFS |
总结
BIOS 在主板的 SPI Flash 上,不在系统盘里。 它负责找磁盘的 MBR,MBR 负责找分区的 Boot Block,Boot Block 负责加载内核,内核挂载文件系统时读 Super Block。
服务器、PC、嵌入式 NVR,启动链条逻辑一致,只是每一环的物理位置和可修改性不同。应用开发者只需关心最后一环——操作系统之上的用户态。
浙公网安备 33010602011771号