本篇为UEFI实战系列第一部分。
UEFI实战前10个部分计划如下:
UEFI 实战(1) 开发环境
UEFI 实战(1)
UEFI实战前10个部分计划如下:
UEFI 实战(1) 开发环境
讲述如何配置开发环境。
UEFI 实战(2) HelloWorld
UEFI 实战(2) HelloWorld
讲述dsc, inf文件的格式, application常用的变量,数据结构和函数。
UEFI 实战(3) C++
讲述如何用C++开发UEFI程序。
UEFI 实战(4) protocol
讲述UEFI中protocol的概念
UEFI实战(5) driver
讲述UEFI中driver模型
UEFI实战(6) 文件读写
UEFI实战(7) Hii interface 之 Form
UEFI实战(8) Hii interface 之 String 和Font
UEFI实战(9) GUI
UEFI实战(10) Network
UEFI 实战(1)
配置开发环境
1. 下载
Windows SDK
2. 下载
EDK2
3. 打开visual studio 2008 command prompt
cd EDK2
edksetup.bat
4. 编辑Conf\taget.txt, 修改 编译工具TOOL_CHAIN_TAG 为
TOOL_CHAIN_TAG = VS2008x86
5. build
build命令有两个参数, -a 和-p, -a 用来选择平台(IA32 X64,...) -p用来选择要编译的package,默认的package是Nt32Pkg, 所以build命令与 build -a IA32 -p Nt32Pkg\Nt32Pkg.dsc 等同,用来编译UEFI模拟器。
6. build run
与build -a IA32 -p Nt32Pkg\Nt32Pkg.dsc run 命令等同,用来运行UEFI模拟器。
制作UEFI USB启动盘
分两种情况,如果目标平台是UEFI平台,按如下步骤来做:
1。 格式化U盘为FAT(FAT,FAT16, FAT32)格式
2。 在U盘上建立目录 efi\boot
3。 将efi的应用程序 copy到 efi\boot 目录,并改名为bootx64.efi 或者bootia32.efi。
因为UEFI的启动文件是FAT盘内efi\boot目录里的bootx64.efi 或bootia32.efi, 与legacy bios需要MBR来引导OS不同。
如果目标平台是legacy bios, 需要在U盘中制作MBR和引导文件, 按如下步骤来做:
1。 编译duet package
build -a IA32 -p DuetPkg\DuetPkgIa32.dsc 或者
build -a X64 -p DuetPkg\DuetPkgX64.dsc
2。 生成引导文件
cd DuetPkg
postbuild.bat Ia32 或者 postbuild.bat X64
3。 插入U盘,假设J:是U盘, 向U盘写入MBR
createbootdisk usb J: FAT32 IA32 或者 createbootdisk usb J: FAT32 X64
4。拔出并重新插入U盘, 向U盘copy UEFI文件
createbootdisk usb J: FAT32 IA32 step2 或者 createbootdisk usb J: FAT32 X64 step2
此命令向U盘根目录copy了efildr20, 该文件用于引导系统进入UEFI环境,并向efi\boot目录copy了引导文件bootia32.efi或bootx64.efi
接下来就可以用U盘来运行UEFI了。
如何Debug
UEFI有两种debug方式,一是在模拟环境Nt32Pkg下debug,另一种是通过串口调试真实环境中的UEFI程序。我从来没见过传说中的利用串口调试,所以下面只能说说Nt32Pkg下的debug。
在需要调试的代码前面加入_asm int 3; 编译,然后再模拟环境中(Nt32Pkg)中运行该程序,当模拟器执行到int 3;指令时,会弹出对话框,然后就可以调试了。