资讯分类
全部资讯
最新活动
商城公告
行业信息
新品推荐
元器件知识
资讯标签
艾迈斯欧司朗(96) 英伟达NVIDIA(70) 艾为awinic(45) 飞腾派V3(37) 萤火工场(30) 罗彻斯特电子(28) Jetson Orin Nano SUPER 开发套件(21) 资料下载专区(18) 进迭时空(15) 艾为 awinic(15) 兆易创新(14) 赛昉科技(StarFive)(12) 灵动微电子(11) 日清纺微电子(9) 小华半导体(9) 上海雷卯Leiditech(8) 微源半导体 LPSemi(8) 赛昉科技(8) NVIDIA(8) Seeed矽递科技(8) 龙芯中科(7) GD32VW553-IOT(7) 物奇WuQi(7) 日清纺微电子Nisshinbo(5) 庆科(5) 开源口碑分享(5) Geehy极海半导体(4) 航顺芯片(4) CEM5826-M11(4) 飞腾派(4) 创捷电子(4) TROQ创捷电子(4) 一件包邮专区(3) FTHR-G0001(3) 罗彻斯特(3) 飞腾派eMMC(3) iCEasy商城(3) MM32SPIN060G(3) EVB-L0130(2) 教育优惠申请链接(2) 启明云端(2) 飞腾官网飞腾派(2) 弈安云(2) 飞腾派下载专区(2) 村田(2) 英伟达初创加速计划(2) 极海半导体(2) 小华EVB-HC32F4A0开发板(2) 极海(2) 中国星坤(2) 国产开源硬件(2) 野火(2) 杭晶(HCI)(2) Mini-SPIN0230(2) NVIDIA品牌专区(2) 口碑评测(2) 华润微电子(2) Arduino UNO Rev 4 Minima开发板(1) 下载专区(1) B站风扇视频(1) Jetson AGX Xavier(32GB)(1) BeagleBoard.org®(1) 社区评奖活动(1) CEM5861G-M11(1) 赛昉科技9折活动券(1) NVIDIA Jetson Orin Nano 开发套件(1) Arduino品牌专区(1) 国产自主可控(1) 英伟达 NVIDIA(1) NVIDIA DGX™ Spark:桌面级AI超级计算机(1) 品牌清仓(1) QCS8550 SOM EVB(1) Jetson AGX Orin 64GB开发套件(1) 24GHz毫米波雷达模块(1) NVIDIA Jetson Nano 模组(1) QCS6490 SOM EVB(1) 天微电子商家页(1) 国产毫米波雷达模块(1) 技术问答专区(1) 英特尔(1) CEK8902-S905D3(1) EV Board (MM32L0136C7P)(1) 迈巨微电子品牌专区(1) 飞腾派专链(1) 瑞隆源产品(1) 龙芯教育派(1) 竞买活动(1) 雷卯(1) 飞腾派试用申请链接(1) BeagleBone Black快速入门指南(1) 样片申请(1) NVIDIA NIM(1) 世野(Khadas)(1) 618大促(1) 一件免邮专区(1) SFH 7018B(1) 极海半导体(Geehy)(1) Arduino品牌页(1) 飞腾派调研问卷链接(1) 微雪电子(1) 618大促专区(1) 艾为(AWINIC)(1) 英伟达 NVIDIA品牌专区(1) 小脚丫(1) 8月7日竞拍竞买(1) 飞腾派V3版本上新(1) 飞虹半导体(1) MUSE Paper(1) VF202040-A0(1) 教育优惠(1) 萤火工场GD32VW553-IOT(1) 野火RK3566开发板(1) 乐动机器人(1) 海凌科电子(Hi-Link)(1) 格力新元(1) CEM5825F(1) COMBO模组 EMC3020-PZI5(1) 松科智能(1) 润石(1) Mini-F5333(1) 微源半导体(1) 周年抽奖活动(1) 庆科信息(MXCHIP)品牌专区(1) 附件(1) Jetson AGX Thor 开发套件/模组(1) JETSON_AGX_ORIN_64GB_DEVELOPER_KIT(1) QCS6490 SOM EVB开发板(1) 附件下载地址(1) 迈巨微(1) 华大北斗(1) GD32无线生态专区(1) QCS8550 SOM EVB开发板(1) 申请样片:高光效红光OSCONIQ® P 3030, GR QSSPA1.23(1) 台容积电(1) 雷克沙(1) GD32VW553-IOT V2版本(1) CEM5881-M11(1) NVIDIA Jetson Orin Nano 开发套件(1) 萤火工场品牌专区(1) 商城下载专区(1) GD32VW553-IOT V2(1) Jetson AGX Orin 64GB开发套件(1) 荣湃半导体(2Pai Semi)品牌专区(1) 进迭时空品牌页(1) 飞腾人才赋能(1)

Unified Extensible Firmware Interface (UEFI) 探索

发布时间:2025-04-14

传统BIOS(Basic Input/Output System)由IBM 1981年在其第一代 IBM PC [1]中引入,负责启动时的硬件检测和初始化,并为操作系统提供硬件抽象层。这一设计被广泛模仿,成为PC行业的标准。但其局限性(如开发效率低、启动速度慢和MBR分区表缺陷)在新时代硬件面前愈发明显。

为解决BIOS的不足,并提升安全性,UEFI[2](Unified Extensible Firmware Interface)标准被引入。作为取代BIOS的现代化解决方案,UEFI不仅解决了BIOS的瓶颈,还引入了:

·模块化设计

·安全启动机制

·更好的大容量存储支持

·更多的启动设备支持

本文将简单介绍UEFI的背景、核心组件及基于spacemit K1 [3]平台的解决方案。


历史与演进


起源

UEFI的前身是Intel于1998年提出的EFI (Extensible Firmware Interface),旨在为Itanium服务器提供更高效的启动环境。2005年,UEFI论坛成立,由Intel、微软、AMD等厂商共同推动标准化。


版本

·UEFI 2.0(2006):UEFI论坛制定的首版规范,64位架构支持,奠定模块化驱动和网络协议基础。

·UEFI 2.4(2013):强化安全启动(Secure Boot)和ACPI集成。

·UEFI 2.8(2022):新增RISC-V架构支持。

·UEFI 2.11(2024):内存管理增强,错误处理改进,新增龙芯LoongArch架构的支持,新增国密算法(SM2, SM3)支持。


演进

UEFI标准未来会继续关注如下几个方向:

·新的硬件标准支持,如PCIe 6.0,DDR6等;

·安全性持续增加,加密算法和安全机制更新;

·启动速度提升,优化启动流程,减少启动时间;

·多架构兼容(x86/ARM/RISCV)


核心组件


UEFI通过规范定义了一整套完整的标准化接口和服务,对上屏蔽硬件细节;在硬件平台发生变更后,通过UEFI固件提供服务,确保操作系统不受影响。

UEFI组件总览 [4]


启动服务

启动服务(Boot Service)的主要功能是为操作系统加载前的系统初始化提供支持,启动服务在操作系统加载完成后会被终止,操作系统接管系统资源。这一过程通过调用 ExitBootServices 函数实现:

ExitBootServices:通知 UEFI 固件操作系统已准备好接管系统资源,启动服务将被禁用。

启动服务提供的service罗列如下。


内存管理

分配和释放内存,支持不同类型的物理内存(如常规内存和保留内存)。


事件处理

UEFI中只有timer中断,利用timer来创建和管理事件,支持异步操作和定时器功能。


协议管理

安装、卸载和查找协议(Protocol),用于驱动程序和应用程序之间的通信。


镜像加载

加载和启动操作系统内核或其他可执行镜像。


设备管理

提供对硬件设备的访问和控制。


运行时服务

运行时服务(Runtime Services) 在操作系统运行期间提供一系列关键功能,包括时间管理、变量服务和系统重置等。与启动服务不同,运行时服务在操作系统加载完成后仍然可用,为操作系统和应用程序提供与固件的交互接口。


时间管理

获取和设置系统时间。


变量服务

读写 UEFI 变量(如启动顺序、硬件配置等)。UEFI 变量通常用于存储系统配置信息,例如:

启动顺序(BootOrder):定义系统的启动设备顺序。

硬件配置:存储硬件相关的设置(如网络配置、安全设置等)。


系统重置

支持系统重启或关机(RISC-V架构下,系统重启和关机通过openSBI实现)。


虚拟内存管理

在操作系统运行期间管理虚拟内存映射。


SMBIOS

SMBIOS(System Management BIOS) 是由 DMTF(分布式管理任务组)制定的一项标准,旨在为操作系统和管理工具提供系统硬件信息的标准化接口。通过一种结构化的方式,将系统的硬件配置、固件版本、主板信息等数据传递给操作系统或管理工具。

SMBIOS 数据表由UEFI生成,存储在系统内存中,操作系统可以通过system table访问这些数据。

·硬件信息描述:提供系统硬件配置的详细信息,例如处理器、内存、主板、存储设备等。

·固件信息传递:传递固件版本、制造商信息等数据。

·系统管理支持:为系统管理工具(如 IPMI、Redfish)提供硬件信息支持。


SMBIOS 表的访问

操作系统或管理工具可以通过以下方式访问 SMBIOS 表:

·System table:kernel下通过EFI_SYSTEM_TABLE获取EFI_CONFIGURATION_TABLE,进而定位SMBIOS表的地址

·操作系统:用户可以通过工具(如 dmidecode)查询 SMBIOS 数据,获取系统的硬件信息。

·系统管理工具:IPMI、Redfish标准中使用 SMBIOS 数据监控硬件状态、诊断故障和管理系统资源。


ACPI

ACPI(Advanced Configuration and Power Interface,高级配置与电源接口)是由 Intel、Microsoft、Toshiba 等公司联合制定的一项标准,旨在取代传统的 BIOS 电源管理接口(如APM,Advanced Power Management)。

ACPI用于定义操作系统与硬件之间的电源管理和硬件配置接口。ACPI 提供了一种标准化的方式,使操作系统能够管理硬件资源、控制电源状态,并支持即插即用功能。其不仅定义了电源管理功能,还提供了硬件资源的描述和配置接口。


ACPI 表

ACPI 表是 ACPI 的核心数据结构,用于描述硬件资源和电源管理信息。ACPI 表通常在 UEFI 的 DXE(Driver Execution Environment)阶段生成,并由 UEFI 传递给操作系统。

ACPI框架 [5]


ACPI table以二进制格式存储,操作系统通过解析这些表获取硬件信息。常见的 ACPI 表包括:

·DSDT(Differentiated System Description Table):包含系统的硬件描述和电源管理信息。

·FADT(Fixed ACPI Description Table):描述固定的硬件资源和电源管理寄存器。

·SSDT(Secondary System Description Table):提供额外的硬件描述信息。

·MADT(Multiple APIC Description Table):描述多处理器系统的中断控制器配置。

·SRAT(System Resource Affinity Table):描述系统资源的亲和性(例如 NUMA 架构中的内存和 CPU 关系)。

·RHCT(RISC-V Hart Capabilities Table):描述RISC-V CPU核心(HARTs)的能力和配置信息,如 CPU ID、支持的 ISA 扩展等。


ACPI 电源管理

ACPI 定义了多种电源状态,用于管理系统的功耗和性能。

全局电源状态转换 [5]


全局电源状态(Global System States)

·G0(Working State):系统处于正常工作状态。

·G1(Sleeping State):系统处于睡眠状态,分为多个子状态(S1-S4)。

·S1:CPU 停止执行指令,但内存保持供电。

·S2:CPU 断电,内存保持供电。

·S3(Suspend to RAM):CPU 和大部分硬件断电,内存保持供电。

·S4(Suspend to Disk):系统状态保存到磁盘,内存断电。

·G2(Soft Off):系统处于软关机状态,部分硬件(如网络接口)可能保持供电。

·G3(Mechanical Off):系统完全断电。


设备电源状态(Device Power States)

·D0:设备处于正常工作状态。

·D1/D2:设备处于低功耗状态。

·D3:设备处于关闭状态。


Protocol

Protocol(协议) 是 UEFI中的一个核心概念,用于定义驱动程序、应用程序和固件之间的交互接口,通过 Protocol,UEFI 能够实现模块化设计和动态绑定,提供强大的硬件管理和扩展能力。

protocol的组成 [4]


Protocol 类似于面向对象编程中的接口或抽象类,提供了一种标准化的方式,使不同组件能够相互通信和协作。

每个 Protocol 包含一组函数指针和数据字段,用于实现特定的功能。

·标准化接口:Protocol 定义了统一的接口规范,使不同组件能够相互兼容。

·动态绑定:Protocol 通过句柄(Handle)绑定到特定设备或服务,支持动态加载和卸载。

·模块化设计:Protocol 支持模块化设计,便于扩展和维护。


OS LOADER


OS Loader(操作系统加载器) 是 UEFI 启动流程的一部分,依赖于 UEFI 的启动服务(Boot Services)和运行时服务(Runtime Services),从启动设备(如硬盘、光盘或网络)加载操作系统内核,并为其准备执行环境,将控制权从 UEFI 固件转移到操作系统。

OS Loader 的实现通常由操作系统开发者完成,以下是一些常见的 OS Loader 实现:


Windows Boot Manager

Windows的OS Loader是bootmgfw.efi,其主要功能包括:

·加载Windows内核

·准备 Windows 启动环境


GRUB(Grand Unified Bootloader)

GRUB 是 Linux 系统中常用的 OS Loader,其主要功能包括:

·加载 Linux 内核(vmlinuz)和ramdisk(initrd)

·支持多操作系统启动

·提供命令行界面,用于调试和配置



UEFI on Spacemit K1

Spacemit K1是一颗8核64位RISC-V AI CPU,基于开源Tianocore EDK2解决方案,完成了K1上的UEFI适配。


启动流程

K1上UFEI解决方案启动流程如下图。


基于RISC-V当前的firmware标准和开源实现:


1简化EDK2中启动阶段实现,并将部分功能实现挪至FSBL中实现
2部分runtime service由openSBI实现


bootloader


bootloader存储于spi nor flash上,包含如下图3个主要模块。


FSBL

FSBL基于uboot工程编译而来,实现UEFI PEI阶段的:

·DDR初始化

·加载opensbi与EDK2

·更新memory信息,并通过dtb传递给EDK2


openSBI

基于开源openSBI解决方案,提供machine态的基础服务:

·Cache管理

·TLB管理

·suspend/resume管理


EDK2

基于开源tianocore EDK2开源解决方案,提供:

·EFI boot service,提供系统启动相关服务

·存储驱动(emmc,sd,nvme)和USB驱动,支持从卡、emmc、NVME、U盘中启动

·GOP(Graphic Output Protocol),支持通过HDMI显示启动菜单

·Variable service,实现启动选项的配置,如启动顺序、启动时间等


grub

OS loader选择基于开源grub2的解决方案。

·grub作为一个EFI application,存储于ESP分区,经EDK2加载和运行;

·通过/boot/grub/grub.cfg配置文件,完成多系统识别与引导,并配置启动菜单;

·加载内核镜像和init ramdisk,完成系统加载和控制权切换;

·kernel镜像与rootfs存储于emmc或nvme等存储器上。

通过上述提供的解决方案,实现在K1方案板上,支持从多种启动介质上,完成linux系统的加载和启动;并能通过EDK2启动菜单,完成启动优先级的配置和修改。


参考


① IBM PC, https://zh.wikipedia.org/wiki/IBM_PC

② Unified Extensible Firmware Interface, https://en.wikipedia.org/wiki/UEFI

③ Sapcemit Key Stone K1, https://www.spacemit.com/key-stone-k1/

④  UEFI specification, https://uefi.org/specs/UEFI/2.11/

⑤ ACPI specification, https://uefi.org/specs/ACPI/6.5/