UEFI开发探索48 – 搭建UEFI Shell环境

请保留-> 【原文:  https://blog.csdn.net/luobing4365http://yiiyee.cn/blog/author/luobing/】

做UEFI的实验,32位的程序可以使用TianoCore的模拟环境进行测试。64位的程序,可以使用启动盘在实际的机器上测试,也可以使用虚拟机来测试。

制作启动盘很简单,不过,我之前保存的启动文件丢失了,正好重新做一遍,把过程记录下来。

1 制作UEFI BIOS下的启动盘

启动文件可以通过编译ShellPkg来得到。打开VS命令行,进入EDK的目录,执行edksetup.bat后,输入以下命令:

build -a IA32 -a X64 -p ShellPkg\ShellPkg.dsc -b RELEASE

在EDK的Build\Shell\RELEASE_VS2015x86目录下,会生成32位和64位的完整shell执行文件。

然后执行以下步骤:

1) 将U盘格式化为FAT32(FAT、FAT16也可以,现在很少使用了)格式;

2) 在U盘的根目录下建立efi\boot文件夹;

3) 将刚才生成的两个32位和64位shell执行文件(名称都是Shell.efi),分别改名为bootx32.efi和bootx64.efi,拷贝到U盘的efi\boot目录下。

做好的U盘插到计算机上,开机的时候选择从U盘启动(每款BIOS不大一样,常见的可以按F11选择启动项,或者进入Bios Setup设置从U盘启动),即可进入UEFI shell了。

2 制作Legacy BIOS下的UEFI启动盘

按照笔者的经验,大概从2011年之后,各大PC厂商都从Legacy BIOS转向了UEFI BIOS了,现在市面上很难找到只支持Legacy BIOS的机器了。不过,考虑到一些特殊情况,比如笔者所在公司,还有不少Legacy BIOS的机器用来测试出货的卡,而测试程序也有在UEFI下开发的,此时就需要在Legacy BIOS下运行UEFI执行环境了。

EDK2中提供了DUET(Developer’s UEFI Emulation),这是基于Legacy BIOS系统的UEFI模拟器,旨在提供可在Legacy BIOS上运行的UEFI运行环境。它支持基于MBR(Master Boot Record,位于第一个扇区的启动区)的启动方式,启动后进入UEFI执行环境。

详细的信息可以参考EDK下DuetPkg中的ReadMe.txt文件,主要是在U盘中改造MBR和制作引导文件,具体步骤如下:

1) 编译DuetPkg打开VS命令行,进入EDK工作目录,以笔者的工作环境为例,输入以下命令:

C:\MyWorkspace>edksetup.bat
C:\MyWorkspace>build -p DuetPkg\DuetPkgIa32.dsc -a IA32 -t VS2015x86
或者
C:\MyWorkspace> build -p DuetPkg\DuetPkgX64.dsc -a X64 -t VS2015x86

在执行上述命令后,DuetPkg下的PostBuild.bat会自动执行。

2) 创建启动盘。注意,此步骤会将U盘数据抹去,操作前注意将U盘中的数据保存好。将U盘插入到计算机上,进入EDK工作目录下的DuetPkg目录,运行edksetup.bat,执行如下命令,写入MBR:

C:\MyWorkspace\DuetPkg> CreateBootDisk.bat usb e: FAT32 IA32
或者
C:\MyWorkspace\DuetPkg> CreateBootDisk.bat usb e: FAT32 X64

弹出U盘,拔出后重新插入,通过以下命令向U盘复制UEFI文件:

C:\MyWorkspace\DuetPkg> CreateBootDisk.bat usb e: FAT32 IA32 step2
或者
C:\MyWorkspace\DuetPkg> CreateBootDisk.bat usb e: FAT32 X64 step2

查看U盘中的内容,执行此命令后,U盘的根目录中多了文件efildr20,它用来引导系统进入UEFI环境。另外,增加了目录efi\boot和此目录下的bootia32.efi或者bootx64.efi。

在Readme.txt中还提供了软盘的制作方法,这已经是非常古老的设备了,有条件的读者可以按照文档尝试一下。

3 用虚拟机搭建UEFI Shell环境

在之前的博客中,我们使用EDK的OVMF,配合虚拟机Qemu,搭建了调试的环境。Qemu非常灵活,可以通过替换EDK提供的bios文件来启动。

Qemu功能很强大,相对的使用也比较复杂,很多时候,我们只是需要一个UEFI shell环境,用来测试程序的运行情况。这里介绍一种使用VirtualBox搭建测试环境的方法。搭建步骤如下:

1) 创建vhd文件,作为硬盘镜像。可以使用windows自带的磁盘管理,或者使用VirtualBox自带的工具创建vhd文件,这里使用后一种方法,如图:

图1 创建vhd镜像

2) 将vhd镜像装载,并格式化为FAT32格式。操作系统将vhd镜像作为硬盘装载,可以使用Windows自带的磁盘管理工具进行处理,也可用DiskGenius对分区进行处理:

图2 装载vhd镜像
图3 格式化vhd镜像磁盘

3) 弹出vhd镜像。格式化后,vhd文件将显示为某个磁盘分区。将需要测试的UEFI执行文件拷入后,弹出加载的磁盘。

图4 弹出vhd镜像

4) 创建VirtualBox的虚拟机。创建的时候,不要添加硬盘。创建成功后,在Settings-System的Motherboard选项页中,使能EFI选项。并按如下方式添加刚才准备好的vhd文件,作为其硬盘工作。

图5 添加硬盘文件至虚拟机

至此,虚拟机的UEFI shell环境搭建完毕。启动虚拟机,进入uefi shell,刚才添加的硬盘以fs0:的链接名加载了。试着运行下其中的代码:

图6 效果

总结来说,搭建测试用的UEFI shell环境,有两种方法:一是通过启动盘,在实际机器上实验。针对UEFI BIOS和Leagy BIOS,制作启动盘的方式有所不同;二是直接在虚拟机上运行UEFI shell。常用的是Qemu和VirtualBox,前一种功能强大,自由度很高,后一种比较简单方便。在实验的过程中,可根据自己的情况自由选择搭建方式。

4,498 total views, 1 views today

发表评论

电子邮件地址不会被公开。