使用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 启用内核调试。

usbview

图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两种口的长相了。

usb3_b2a

图2 USB 3的B-A转接电缆(和黑布林在一起,压缩算法把bitrate似乎都分在布林身上了,线不大清楚)

接下来该说电缆了,与USB 2调试所需的中间带有设备的特别电缆不同,USB 3调试需要的是一条真正的线。哪里能买到这种线呢?国外有公司卖。经过一番调查和尝试,其实也可以从国内买,然后略微加工一下就可以了。这种方法是由一位聪明的同事试验成功的,我亲自尝试了一下,确实简单有效。

先从淘宝买一根USB 3的A对A连线,有时也称公对公连线,很便宜。这根线需要加工一下才可以支持调试,加工的方法是选取线的某个位置,剥开外皮,然后把其中的红绿白三根线剪断,然后包上就可以了。USB 3电缆的线是有固定颜色的,如图3所示,

usb3_cable

图3 花花绿绿的USB 3线缆

其中SDP是Shielded Differential Pair的缩写,即屏蔽起来的差分信号线,是USB 3.0的数据线,UTP是Unshielded Twisted Pair的缩写,即未屏蔽的双绞线,是USB1/2使用的数据线,所谓的D+,D-。要做的加工其实就是把2.0的三根弦剪断。剥开后,很容易找到红绿白三根,胆大心细,下剪子吧:-)。

usb3_a2a

图4,看准下剪子 (照片不大清楚,剪错了责任自负哦)

线做好后,用它来接主机和目标机。

然后需要在目标机上启用调试。打开一个有管理员权限的控制台窗口,执行如下命令:

设置好后需要重启。

最后再说一下主机端,安装好新版本的WinDBG后,以管理员身份启动运行,File  > Kernel Debugging,选择USB ,然后指定名称(上面bcdedit里设置的名字)。第一次使用的话,WinDBG会自动安装驱动,这也是要以管理员启动的原因。需要说明的是,在主机端,USB 2.0调试和3.0调试使用的是一个驱动Usb2DBG,不必怀疑。

好了,主机端就绪后,按Ctrl + Break,目标机应声断下,设置符号,开始开Windows 8的代码或者找Bug吧!

转自 http://advdbg.org/blogs/advdbg_system/articles/5954.aspx

VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”

升级vs2010到vs2012,突然发现build出来的应用程序无法运行,提示“不是有效的 win32 应用程序” or “not a valid win32 application”。

参考CSDN论坛中的方法,找到下面这篇文章:

http://blogs.msdn.com/b/vsnetsetup/archive/2012/10/16/setup-exe-is-not-a-valid-win32-application.aspx

You would receive the below error message while running a ClickOnce bootstrapper created using Visual Studio 2012 on Windows XP systems.

 0336.Untitled1.png-550x0

Clickonce bootstrapper engine (setup.exe) that was shipped with Visual Studio 2012 is NOT compatible with any OS below Windows Vista.  So, the above error message is expected and by design. The reason for this behavior is because the bootstrapper is compiled using the VC compiler and the Dev11 VC compiler does not support Windows XP.  

So the workaround is to install all the prerequisites manually and launch the ClickOnce application directly from deployment manifest file (.application). Another workaround would be to create a sample ClickOnce application using Visual Studio 2010 OR Visual Studio 2008 with the same name as mentioned in Visual Studio 2012 and publish it. From the published location take the setup.exe bootstrapper and replace the existing setup.exe bootstrapper created using Visual Studio 2012

Microsoft VC development team has done work to make VC compilers work on Windows XP in Visual Studio 2012 Update 1 CTP 3 http://www.microsoft.com/en-us/download/details.aspx?id=34818 This Visual Studio 2012 Update 1 CTP 3 patch provides an opportunity to users in building VS2012 C++ project for Win XP OS. For the users who want to develop their applications using Dev11 VC compiler (v110) for Windows XP OS, would need to install Visual Studio 2012 Update 1 CTP 3 patch.

 8535.Untitled.png-550x0

文章提示,dev11 VC complier 已经不在支持XP,如果想要支持XP系统,需要更新至 VS2012 Update1,同时,在

Properties -> Configuration Properties -> General -> PlatForm ToolSet

选择

Visual Studio 2012 - windows XP (v110_xp)

这样compiler生成的exe文件方可在XP系统上运行。

VS2012 update1 下载参考

http://www.microsoft.com/visualstudio/eng/downloads#d-visual-studio-2012-update

该问题适用于 用 HCK 2.1  安装  HCK Client 的时候,点击 Setup.exe 报告“不是有效的WIN32 应用”。