使用VirtualBox 进行UEFI 网络实验

发表于 4年以前  | 总阅读数:2118 次

最近研究了一下 UEFI 下的网络编程。需要解决的首要问题是:如何进行相关实验。对于我们来说最便捷的莫过于使用虚拟机,《UEFI 原理与编程》推荐的是使用 NT32 环境加SnpNt32Io 来完成模拟。但是我这边实验一直不成功,可能是Winpcap 安装不正确导致的。最终经过研究比较,确定了使用 VirtualBox作为实验对象。

第一个目标是要讲实验用到的驱动传入到虚拟机中。我们创建虚拟硬盘然后将需要内容 COPY到其中。

1. 打开 Disk Management,使用 Create VHD 功能

2. 创建一个 500MB,Fixed Size (可能是出于兼容性原因,这里建议用 Fixed Size)

3. 创建之后需要分区和格式化,Windows只能格式化成 NTFS 格式,这里需要使用 DiskGenius来完成。直接创建一个500MB大小的 ESP分区。然后文件系统需要为 FAT32。保存分区后格式化。

4. 上述操作结束之后,可以在 Windows 中对刚出现的盘符进行操作,COPY进需要的文件。比如:这里放入 Intel 网卡驱动和 UDK2018的WebServer 的UEFI Applicaiton

5. 再到 Disk Management 中 Detach VHD

至此,已经完成虚拟机硬盘的创建,并且放入了必须的文件。下面就是在 VirtualBox中验证的过程。

6. 在 VirtualBox 中新建一个虚拟机,一定要 Enable EFI ,此外,要将刚才制作的 VHD 文件挂上去。

上面的设置完成之后就可以进行网络方面的测试了。有几个基本的命令:

  1. ifconfig –l eth0 //查看第一个网卡的配置信息
  2. ifconfig –s eth0 DHCP //设置使用 DHCP 取得IP 地址,因为使用 Bridge 的网卡设定,新创建好的虚拟机和HOST主机一样是“暴露”在网络上的,我的 HOST 主机是通过 DHCP 获得IP的,因此虚拟机同样可以从 DHCP 上获得IP

上述完成之后,运行 WebServer.efi ,运行之后这个EFI Application会监听网络 Port 80,等待 HTTP 请求。在 Host 机器中,使用 Chrome 访问虚拟机的IP 80端口,结果如下:

就是说访问到了虚拟机提供的 WebServer 。

额外的话:

  1. 除了 VirtualBox , QEMU 也是一个很好的选择。同时 QEMU 能够运行编译出来的BIOS Image 相对来说更胜一筹。但是我在设置网络的时候,QEMU 一直没能实现 Bridge ,只有 NAT,可能是因为我的HOST 是 Windows 导致的。只有NAT这对于使用来说显示颇多限制,因此,最终选择 VirtualBox 来实现模拟环境。
  2. DiskGenius注册版可以直接编辑VHD 文件,挂载之后可以直接对其写入文件。普通免费版没有这个功能。
  3. VHD 还可以使用ImDisk 直接挂载到 Windows 上然后写入数据。官方网站 http://www.ltr-data.se/opencode.html/
  4. 实验发现 VirtualBox 的UEFI BIOS无法识别 IDE 的光驱,但是 SATA 的可以。用制作 ISO 的方法直接传递EFI Application 也是一个好方法。