UEFI(Unified Extensible Firmware Interface)是一种替代传统BIOS的新标准,提供了更强大的功能和更好的扩展性。本文将详细介绍UEFI编程的基础知识,包括其架构、主要概念、开发工具和编程示例。
1. UEFI概述
1.1 什么是UEFI?
定义: UEFI 是一种标准化的固件接口,用于在操作系统启动之前初始化和配置硬件。
特点:
1.模块化设计:UEFI 采用模块化设计,每个模块负责特定的功能。
2.高级安全特性:支持安全启动(Secure Boot),防止未经授权的引导加载程序运行。
3.丰富的用户界面:提供图形化的用户界面,方便用户进行设置和配置。
4.更好的兼容性和扩展性:支持多种硬件平台和操作系统。
5.大容量存储支持:支持大于2TB的硬盘分区。
1.2 UEFI与传统BIOS的区别
架构:UEFI 采用模块化设计,而传统BIOS是基于中断的服务调用。
安全性:UEFI 支持安全启动,而传统BIOS没有类似的安全机制。
用户界面:UEFI 提供图形化的用户界面,而传统BIOS通常是文本界面。
扩展性:UEFI 支持更多的硬件平台和操作系统,而传统BIOS的扩展性较差。
2. UEFI架构
2.1 主要组件
UEFI系统表(System Table):
包含系统的基本信息和函数指针,如内存映射、时间服务等。
协议(Protocols):
定义了一组接口,用于提供特定的功能和服务。
库类(Library Classes):
提供常用的功能和工具,如字符串处理、内存管理等。
平台初始化(Platform Initialization, PI):
描述了UEFI固件的初始化过程,包括PEI(Pre-EFI Initialization)、DXE(Driver Execution Environment)和SMM(System Management Mode)阶段。
2.2 启动流程
1.硬件初始化:
PEI阶段: 初始化CPU、内存等基本硬件。
DXE阶段: 加载和初始化驱动程序,构建运行时环境。
2.自检(POST):
执行Power-On Self-Test,检测硬件是否正常工作。
3.加载引导程序:
查找并加载操作系统的引导扇区,将控制权交给操作系统。
4.提供底层接口:
为操作系统提供访问和控制硬件的底层接口。
3. 开发工具
3.1 Visual Studio
下载和安装:
访问 Visual Studio 下载页面,下载并安装最新版本的Visual Studio。
确保选择C++开发工具。
3.2 EDK II
克隆仓库:
打开命令行终端,导航到一个合适的目录,然后克隆EDK II仓库。
git clone https://github.com/tianocore/edk2.git
cd edk2
安装依赖项:
Windows:
.\edksetup.bat Rebuild
python -m pip install --upgrade pip
python -m pip install --user -r tools/edk2-pytool-extras/requirements.txt
Linux:
./edksetup.sh Rebuild
sudo apt-get update
sudo apt-get install -y build-essential uuid-dev iasl git nasm python3 python3-distutils
python3 -m pip install --user -r tools/edk2-pytool-extras/requirements.txt
4. 编写第一个UEFI应用程序
4.1 创建项目目录
在EDK II目录下创建一个新的项目目录