UEFI 实战(1) 开发环境

时间:2021-07-21 20:08:48
本篇为UEFI实战系列第一部分。
UEFI实战前10个部分计划如下:
UEFI 实战(1) 开发环境  讲述如何配置开发环境。
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 之 FormUEFI实战(8) Hii interface 之 String 和FontUEFI实战(9) GUIUEFI实战(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;指令时,会弹出对话框,然后就可以调试了。