网络内核调试的春天

今天试了两个虚拟机,virtualbox和vmware player,看能不能支持网络调试。结果非常满意,两个虚拟机软件默认配置的虚拟网卡,都能用于建立网络内核调试连接,我三下两除二地,就把内核调试给建立了。vmware中的网卡设备是82574L Gigabit NIC,设备ID是8086/10D3。VirtualBox中的网卡设备是Pro/1000 MT(即颇为经典的E1000系列),设备ID是8086/100E。检查Windows网络内核调试所支持的NIC列表,发现这两块网卡,都在被支持的列表中。链接:Supported NIC for network kernel debug。

不同的虚拟机软件配置其虚拟网卡的方式不尽相同,我比较喜欢VirtualBox,它直接提供了一个可选列表框让用户选择,默认是Pro/1000 MT。VMWare Player则没有类似的接口,但我查看了网上的一些资料,用户也可以通过直接修改配置文件的方式,配置虚拟网卡的类型。

virtualBox虚拟网卡列表

如今,经过我手而成功实现网络内核调试的虚拟机软件,就有三种了:QEMU、VMWare和VirtualBox。因为微软在支持网络调试的时候,包括了几种被广泛使用的经典网卡,如这里的两种。而这些经典的老网卡,历史悠久,功能简单,性能稳定。大多数虚拟机软件乐于用软件的方式模拟它们。所以,借助这些被虚拟的传统网卡,我们很容易通过虚拟机来建立网络调试。

此前在虚拟机上,我用的较多的还是虚拟串口调试(kdcom)。为了加快速度,后来换用了第三方的VirtualKD工具。VirtualKD比系统自带的虚拟串口(kdcom)方式,要快得多,因为虽然同样是通过命名管道的方式传输数据包,但VirtualKD没有波特率的限制。而kdcom由于走的是串口设备,支持的最高波特率只有115200,速度自然非常慢。现在有了网络内核调试方案,在速度不降低的前提下,却更易于操作。可以替代VirtualKD了。

网络调试方式,是Windows 8以后才逐渐出现和完善的新的调试方式,颇受微软的推崇和重视。因为是Windows系统原生支持的,所以被原来越多的开发者熟悉和使用。在UEFI平台,固件中也包含了完整的网络栈,所以通过网络调试方式,甚至能够直接调试固件和启动加载器程序,网络调试的功能非常强大。但由于NIC厂商众多,各厂商的产品线也很广,不同的网卡硬件实现也有较大的差异,导致在支持网络调试的时候,需要针对不同系列的网卡,实现多个版本的调试支持库。这是初期网络调试不能被广泛接受和诟病的主要原因。但随着时间推移,微软对网络调试越发地青睐,支持的网卡系列也逐渐增多和完善。

更好的消息是,在最新的WDK中,微软将KdNet(支持网络内核调试的模块文件)上推为将来支持内核调试的主要模块,其它的传输方式(包括serial/usb/1394),都将作为它的一个扩展存在。并且微软也公开了扩展开发的框架,所有人都可以编写自家主控芯片的调试支持扩展。这样,即便微软没有官方支持自家的NIC/WIFI芯片,各厂家则可自行开发之。

从我个人的观点,Windows平台上的网络调试方案,已经进入了稳定成熟期。网络调试的春天,来了。

3,655 total views, 1 views today

发表评论

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