UEFI网络调试根据你使用的虚拟环境和是否使用虚拟系统的不同可以有不同的方法。
如果使用VirtualBox或者QEMU的话要看具体虚拟的网卡设备,要加载相应的驱动。
如果是在另外的虚拟机系统里面搭建的环境,访问网卡需要使用桥接的方法。

由于我的目的只是为了研究一下UEFI 网络。所以选取了系统下NT32模拟器下面调试网络的方式。
这其中参考了luobing的文章。
https://blog.csdn.net/luobing4365/article/details/105036585?spm=1001.2014.3001.5501

  1. 下载并安装Winpcap。

Winpcap是一款用于网络抓包的专业软件,是一个免费、公共的网络访问系统。它能为win32应用程序提供访问网络底层的能力,在模拟器中,相当于网卡的驱动。下载地址为:

https://www.winpcap.org/default.htm。

  1. 下载SnpNt32Io源码并编译

代码可以从github上下载:https://github.com/tianocore/edk2-NetNt32Io。在C盘下建立文件夹NetNt32Io,并将源代码拷贝进去。

下载Winpcap的开发包WpdPack,下载地址:https://www.winpcap.org/devel.htm。下载后将WpdPack的压缩文件解压,复制到C:\NetNt32Io目录下。

打开Visual Studio的命令行(与编译UEFI代码的命令行相同),进入到源码目录,输入如下命令:

C:\NetNt32Io> nmake TARGET=RELEASE

NetNt32Io文件夹中会自动生成目录Release_IA32,将此目录下的SnpNt32Io.dll拷贝到UEFI模的根目录下。

C:\NetNt32Io>copy /y c:\NetNt32IoRelease_IA32\SnpNt32Io.dll
c:\MyWorkspace\Build\NT32IA32\DEBUG_VS2015x86\IA32\

  1. 启动Nt32模拟器。启动的方法很多,我比较习惯的是直接在目录下点击SecMain.exe执行文件,启动模拟器。

  2. 进入UEFI Shell,加载网络协议。

Shell> fs0:
FS0:> load SnpNt32Dxe.efi MnpDxe.efi ArpDxe.efi Ip4Dxe.efi VlanConfigDxe.efi Udp4Dxe.efi Dhcp4Dxe.efi Mtftp4Dxe.efi Tcp4Dxe.efi

  1. 配置网卡

我所工作的环境是通过dhcp动态分配IP地址的,使用ifconfig命令设置:

FS0:>ifconfig -s eth0 dhcp

也可通过以下命令设置为静态IP地址:

FS0:>ifconfig -s eth0 static 192.168.1.188 255.255.255.0 192.168.1.1

也即设置静态的IP地址,子网掩码和网关的IP地址。当然,读者也可根据自己的网络情况自由配置,包括dns地址在内都可以指定,具体的用法可通过命令“ifconfig -? -b”查找。 IP地址是否分配成功,可通过命令“ifconfig -l eth0”查看。
在这里插入图片描述

  1. 测试网络连接

通过ping命令可以测试网络连接情况,截图如下:
在这里插入图片描述
以上都是参考luobing的文章。
其中出现了几个问题。

1.测试过程中,发现如果不装winpcap,ifconfig命令,ping都无法执行。应该相当于没有设备的原因。
2.NetNt32Io无法编译。这个问题我暂时没有解决,只是请求luobing大神提供了一份之前编译好的。可能是编译匹配的问题。后续研究。
3.公司网络笔记本IP和wifi始终无法ping成功。用家庭的台式机+家庭网络可以正常ping。可能网络问题。暂时不清楚rootcause.
4.家庭网络也要注意关掉防火墙,否则也是无法ping成功的。

#另外注意的一个问题是,默认的UEFI环境会生成两个网卡,看MAC地址发现
本机MAC + 1 = NT32 MAC
配置IP的时候要对应。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐