关于友善的KITL调试问题
发布时间:2020-12-15 07:14:45 所属栏目:百科 来源:网络整理
导读:FriendlyARM所给的bsp是不支持(或者说不正确地支持)KITL的,因此无法在没有硬件调试器的情况下对驱动进行 源代码级调试。 为了工作方便,我们决定让这个bsp支持KITL。 首先大概说一下,在没有硬件调试器的情况下,获取调试信息的两种方法:一是DEBUG PORT
FriendlyARM所给的bsp是不支持(或者说不正确地支持)KITL的,因此无法在没有硬件调试器的情况下对驱动进行 源代码级调试。为了工作方便,我们决定让这个bsp支持KITL。 首先大概说一下,在没有硬件调试器的情况下,获取调试信息的两种方法:一是DEBUG PORT,二是KITL。 先说DEBUG PORT 在绝大多数情况下,DEBUG PORT实际上就是串口,我们可以让我们的驱动从串口打印一些信息出来,比如 “靠,程序怎么跑到这个鬼地方来了。”早些时候的CE系统还支持并口输出调试信息,但现在已经不用了。 这种方式的优点是简便,且可以兼用于BOOTLOADER和KERNEL。缺点是太简便了,难以交互式调试。 输出信息的函数是DbgOutputString(...) 在Boot阶段,也可以使用EdbgOutputDebugString 再说KITL。 KITL需要CE内核支持,也是通过某个硬件接口和开发人员交互,可以下断点,观察变量, 基本上就是一个完整的源代码级调试环境,缺点是无法用于Bootloader,需要在Kernel跑起来以后才能用。 目前CE支持Serial、Ethernet、USB三种接口的KITL。 现在让我们回到FriendlyARM提供的那个BSP。这个bsp使用了一种很古怪的方式来定义DEBUG PORT和KITL, 见options.h: #define KITL_xxxx xxxx 然后把这个宏同时用于DEBUG PORT和KITL。换句话说,这个bsp把DEBUG PORT和KITL设定为同一个硬件接口, 这不就打架了么。所以我们把options.h里面关于KITL_XXX的行统统删除(在tiny6410中, 保留并打开#define KITL_SERIAL_UART0),然后把设定写在platformsmdk64smdk6410.bat里面: ------------------------------------------------------------------------------REM 关闭所有串口驱动 set BSP_NOSERIAL=1 set BSP_NOUART0=1 set BSP_NOUART1=1 set BSP_NOUART2=1 set BSP_NOUART3=1 set BSP_NOIRDA2=1 set BSP_NOIRDA3=1 REM 关闭DEBUG PORT set BSP_DEBUGPORT= REM KITL使用UART0 set BSP_KITL=SERIAL_UART0? ------------------------------------------------------------------------------- 上面的设定让KITL使用串口0,且关闭DEBUG PORT功能。为什么要关DEBUG PORT? 因为我 没有两根串口线,而我暂时又搞不定USB的KITL,所以只好先这样了。 什么,为嘛要写在bat文件里?这个我也说不清,反正很多官方的bsp都是这么干的,包括但不限于:PXA255,PXA310,SMDK2410 然后在sources文件里根据bat设定的环境变量设置C编译器宏: PLATFORMSMDK6410SRCKITLsources: 添加: --------------------------------------------------------------------- !IF "$(BSP_KITL)" == "SERIAL_UART0" CDEFINES=$(CDEFINES) -DKITL_SERIAL_UART0 !ENDIF !IF "$(BSP_KITL)" == "SERIAL_UART1" CDEFINES=$(CDEFINES) -DKITL_SERIAL_UART1 !ENDIF !IF "$(BSP_KITL)" == "SERIAL_UART2" CDEFINES=$(CDEFINES) -DKITL_SERIAL_UART2 !ENDIF !IF "$(BSP_KITL)" == "SERIAL_UART3" CDEFINES=$(CDEFINES) -DKITL_SERIAL_UART3 !ENDIF !IF "$(BSP_KITL)" == "USBSERIAL" CDEFINES=$(CDEFINES) -DKITL_USBSERIAL !ENDIF PLATFORMSMDK6410SRCOALOALLIBsources 添加: -------------------------------------------------------------------------------- !IF "$(BSP_DEBUGPORT)" == "SERIAL_UART0" CDEFINES=$(CDEFINES) -DDEBUG_PORT=0 !ENDIF !IF "$(BSP_DEBUGPORT)" == "SERIAL_UART1" CDEFINES=$(CDEFINES) -DDEBUG_PORT=1 !ENDIF !IF "$(BSP_DEBUGPORT)" == "SERIAL_UART2" CDEFINES=$(CDEFINES) -DDEBUG_PORT=2 !ENDIF !IF "$(BSP_DEBUGPORT)" == "SERIAL_UART3" CDEFINES=$(CDEFINES) -DDEBUG_PORT=3 !ENDIF 这样就差不多了。但是且慢,KITL的是可以在bootloader里开或关的, 不幸的是Superboot并没有这个功能。 所以我们强制开启: 在KITL.C中修改: ----------------------------------------------------------- BOOL OEMKitlStartup(void) { ... // Force startup KITL ????if(0/*(pArgs->flags & OAL_KITL_FLAGS_ENABLED) == 0*/) ????{ ????????RETAILMSG(1,(TEXT("KITL was Disabled from EBOOT !!rnPlease set KITL Configuration in EBoot !!rn"))); ????????return FALSE; ????} ... }好了,现在clean sysgen,把程序烧进flash,启动后可以看到串口工具里会显示KITL已经启动。 现在关闭串口工具,在vs2005的target菜单下选connectivity options, Transport选serial,设置好端口,debugger选kdstub,download选none,然后点debug->attach 过一会……不,是过一大会,vs2005的output窗口就有东西出来了,告诉你跟设备连上了。 为什么是一大会?这个我们要理解,串口的速度是很慢滴。。。。。。 在我的机子上KITL花了五分钟打印出近千行调试信息,还是没出来CE漂漂的界面。MD,不玩了! 总结:KITL框架没有问题,但是serial太慢了,完全不实用。 下一步:搞定usb KITL。 时间:明年再说吧。 对了,还有一点:编译debug版本以前先给工程瘦个身,Tiny6410的ram是放不下FriendlyARM原版工程的Debug版的。 补充1:以上文字大多数人可以自由使用,但禁止FriendlyARM使用以上文字和根据以上文字得来的东西修改自己的BSP,哈、哈、哈 补充2:补充1是个玩笑,请忽略。估计FriendlyARM的工程师们会笑话这小子狂妄自大、不知天高地厚 :-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |