怎么用KITL技术来调试WINCE内核啊,不是很懂这个,望高人指点一二啊!
能像VC++6.0里面调试应用程序那样吗?可以单步,断点,运行什么的吗?但关键是NK不能在本地(PC)上运行,必须在远端(设备)上运行,这个要进行单步,断点,运行调试是怎么一回事啊?在PB源码里设置一个断点,然后编译带断点的NK,编译完把带断点的NK下到设备端,NK跑起来就会停在设好的断点处,等我们进行调试?是不是这样的?看了很多网络上的文章,也没整太明白.整个调试是怎么一回事啊?
不过觉得没有KITL,单单用RETAILMSG来打印消息来调试NK内核那是无比的痛苦,报一个数据异常,就没辙了!
望有用过的人指点一二!
网上此类文章比较多,LZ有没有Search一下。
例如:http://www.cnblogs.com/walzer/archive/2006/02/05/325554.aspx
看到了那篇文章,觉得对自己没什么太大作用.我的环境是WINCE60+VS2005.
将debug版本的Windows CE映像通过调试网卡下载到板子上运行,可以在VS2005的output窗口中看到WinCE的加载过程。你可以在操作系统的源代码中加入断点,就像你说的那样,执行到断点处,NK将停止。
这个要BSP支持KITL才行吧,现在很多BSP都不支持的,以前我编译的时候选上KITL,连系统都启动不了
如果没有网口,只有USB的串口连接怎么办?能行吗?
我在模拟环境下(VS2005+WINCE60)做了一下测试,VS2005通过网络与模拟NK进行连接通信,基本是可以停在断点处,但断点不能放在像OEMINIT( ),NKSTARTUP( ),ARMINIT( )等这样的函数里面,只能放在什么PS2MOUSE驱动程序,SERIAL串口驱动程序里面,很奇怪,放在比较靠前的初始化函数里面断点会被忽略掉的,为什么?
引用: 引用楼主 xqhrs232 的帖子:
怎么用KITL技术来调试WINCE内核啊,不是很懂这个,望高人指点一二啊!
能像VC++6.0里面调试应用程序那样吗?可以单步,断点,运行什么的吗?但关键是NK不能在本地(PC)上运行,必须在远端(设备)上运行,这个要进行单步,断点,运行调试是怎么一回事啊?在PB源码里设置一个断点,然后编译带断点的NK,编译完把带断点的NK下到设备端,NK跑起来就会停在设好的断点处,等我们进行调试?是不是这样的?看了很多网络上的文章,也没整太明白.整个调试是…
楼主你所问的问题,MSDN和google其实都能帮你回答。最好能够自己去钻一下这些文档,再来发问,会比较有认知。
1 如果build带KITL的image,NK.EXE其实就是KERNKITL.exe(\SRC\KERNEL\KERNKITL)的重命名。这个内核会有对KITL的一些支持;
2 正如楼主所说,NK会run在设备端,而我们的debugger是在PC端,所以2者必须需要通讯。实际上,kd.exe(kernel debugger)会负责在设备端来作为一个PC端的代理,进行debug命令和数据的传输。
3 刚才说了,debug需要设备和PC有一个通讯的基础。所以,KTIL的实现就是一个基本的通讯链路的实现(网络,USB,Serial...)。至于其他的东西,MS都帮你写好了,OEM只要帮MS把这个通讯实现即可。
引用: 引用 6 楼 xqhrs232 的回复:
我在模拟环境下(VS2005+WINCE60)做了一下测试,VS2005通过网络与模拟NK进行连接通信,基本是可以停在断点处,但断点不能放在像OEMINIT( ),NKSTARTUP( ),ARMINIT( )等这样的函数里面,只能放在什么PS2MOUSE驱动程序,SERIAL串口驱动程序里面,很奇怪,放在比较靠前的初始化函数里面断点会被忽略掉的,为什么?
在这些函数中,kitl都还没有初始化,又如何利用kitl调试?
其实1楼的文章lz如果好好看了,应该能明白一些