使用USB3.0调试Windows 8
Windows 8,成也,败也?众说纷纭。但无论如何,我很喜欢它所作出的如下改变:
- 开发语言回归C++
- 旧的Win32与新的WinRT两套API的“双头”模式
- 重视内核调试,引入两种新的连接方式,并将内核调试支持纳入徽标测试
当然,也有不喜欢的地方,首当其冲的就是新的启动选项界面——居然是一个应用程序,需要内核先起来才能运行,如果内核起不来,那么这个启动选项根本没办法出来,想靠它抢救起不来的系统,基本没指望,真是十足“脑残”的设计。
真的不愿意看Windows走下坡路,还是回过来说它的优点吧,今天就聊一下新的USB3调试。
主机端要求:
H.1 支持USB 3的端口;
H.2新版本的WinDBG,6.2.9200或者更高;
H.3 Windows 8系统。
前两项是必须的,没得商量,第3项按理说Windows
7也可能成功,但是官方的说法要求Windows 8。笔者曾经在Windows 7上试验过,有USB 3硬件,USB 3的驱动和USB2DBG驱动也都安装成功了,但是还是没能建立起调试连接,原因应该是和总线驱动有关,内建的USB 3驱动是从Windows 8才开始的。
目标机的要求:
T.1 Windows 8系统;
T.2 有可用的USB 3端口,下面详细描述。
T.3 USB 3的控制器是支持调试的,与此前的USB 2调试类似,调试痛信是一种特殊的简单通信,要求USB 3控制器特别支持才行,但与此前USB 2的控制器只有0号口支持调试不同,USB 3的控制器的所有3.0口都是支持调试的,因此这个要求一般都满足,可以使用USBView工具检查是否支持Debug,如图1所示;
T.4 启用内核调试。
图1 UsbView
USB 3的端口有很多种,PC上常见的有A和B两种,A与以前的USB 1.0/2.0端口看起来很像,物理属性是兼容的,每部的信号线有不同,识别是否是USB 3端口的简单方法就是看是否是有SS标记,SS代表Super Speed,如果标记是SS,那么就是USB 3端口。
USB 3的B端口是长相很特别,一道沟槽/凸起将端口分为不对称的两个部分。图2照片中的线是把B口转成A口的,通过这个图,大家就可以知道A、B两种口的长相了。
图2 USB 3的B-A转接电缆(和黑布林在一起,压缩算法把bitrate似乎都分在布林身上了,线不大清楚)
接下来该说电缆了,与USB 2调试所需的中间带有设备的特别电缆不同,USB 3调试需要的是一条真正的线。哪里能买到这种线呢?国外有公司卖。经过一番调查和尝试,其实也可以从国内买,然后略微加工一下就可以了。这种方法是由一位聪明的同事试验成功的,我亲自尝试了一下,确实简单有效。
先从淘宝买一根USB 3的A对A连线,有时也称公对公连线,很便宜。这根线需要加工一下才可以支持调试,加工的方法是选取线的某个位置,剥开外皮,然后把其中的红绿白三根线剪断,然后包上就可以了。USB 3电缆的线是有固定颜色的,如图3所示,
图3 花花绿绿的USB 3线缆
其中SDP是Shielded Differential Pair的缩写,即屏蔽起来的差分信号线,是USB 3.0的数据线,UTP是Unshielded Twisted Pair的缩写,即未屏蔽的双绞线,是USB1/2使用的数据线,所谓的D+,D-。要做的加工其实就是把2.0的三根弦剪断。剥开后,很容易找到红绿白三根,胆大心细,下剪子吧:-)。
图4,看准下剪子 (照片不大清楚,剪错了责任自负哦)
线做好后,用它来接主机和目标机。
然后需要在目标机上启用调试。打开一个有管理员权限的控制台窗口,执行如下命令:
bcdedit /dbgsettings usb targetname:<名字>
bcdedit
/debug on
设置好后需要重启。
最后再说一下主机端,安装好新版本的WinDBG后,以管理员身份启动运行,File
> Kernel Debugging,选择USB ,然后指定名称(上面bcdedit里设置的名字)。第一次使用的话,WinDBG会自动安装驱动,这也是要以管理员启动的原因。需要说明的是,在主机端,USB 2.0调试和3.0调试使用的是一个驱动Usb2DBG,不必怀疑。
好了,主机端就绪后,按Ctrl
+ Break,目标机应声断下,设置符号,开始开Windows 8的代码或者找Bug吧!