加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于友善的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的工程师们会笑话这小子狂妄自大、不知天高地厚 :-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读