怎样用串口实现KITL调试

damafeng   2009-2-19 16:12 楼主
我的平台是pc104,我想把生成的镜像存在CF卡中,启动镜像后通过串口实现KITL(因为没有网卡,不能通过网口实现KITL),与PB相连,调试驱动。
我在生成镜像的时候要怎样设置才能让镜像启动后与用串口与PB通信,enable KITL是一定要选的吧,那决定镜像是用网卡还是用串口KITL的参数是什么呢?是在loadcepc的指定参数的么?不过loadcepc的参数好像没有关于这个的阿。
还是要改代码?改那里呢?
不能调试搞得我好郁闷,一点都进行不下去

回复评论 (14)

串口?奉劝你还是不要用串口,超级慢。
点赞  2009-2-19 16:14
。。。我也知道慢阿,可是没办法啊,之前我用的8139D的网卡,用CE5.0的自带的驱动,去掉enable KITL,ping都ping不通;
选上enable KITL,去掉8139d的NDIS驱动,loadcepc 完成后jumping to...,停1分半钟,出来界面。
后来查看了KITL的代码,才知道停1分半钟是在DHCP请求分配IP地址,因为每次请求IP要等待30s,共重试了3次。而这时抓抱器并没有抓到他发出来的DHCP数据包(根本就没有任何数据包发出来,网卡的active灯都不闪)
后来又往下看,走到
c:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\RTL8139\rtl8139.c中的
RTL8139SendFrame(BYTE *pbData, DWORD dwLength),就是这个函数发送数据包,最后一句话
////////////////////////////////////////////////////////////////////////////
    //  Send it out now..
    //  8 bytes threshold.
    //
    WRITE_PORT_ULONG(
        RTL_TSD_X(i),
        (DWORD)(dwLength) | (0x00 << 16));  
设置8139d的TSD寄存器,把发送帧长度放到底13位,这时发送门限(TSD寄存器的16~21位)是0,根据PDF,意思是发送门限为8Byte,只要TSD的0~12位中的帧长度〉8就启动8139D的DMA,从相应描述表的TSAD中的地址开始copy帧数据到内部发送FIFO,发送出去。
但问题是根本就没有发送出来,TSD的TOK,TUN都为0,根本就启动发送,郁闷致死,
当然前提是我的硬件是好使的,之前用VXworks启动,网络是可用的。
下面是我启用了DumpAll8139Regs()函数打印出来的所有寄存器值,大虾邦看一下阿,555
+------------------------------------------------------------+
IDR[0..5]  = 0x[00 - E0 - C7 - 07 - F6 - F3]
MAR[0..7]  = 0x[00 - 00 - 00 - 00 - 00 - 00 - 00 - 00]
TSD[0..3]  = 0x[00000127 - 00002000 - 00002000 - 00002000]
TSAD[0..3] = 0x[00EB6120 - 00EB6720 - 00EB6D20 - 00EB7320]
RBSTART [0x00EB7920]     ERBCR   [0x0000]        ERSR     [0x00]         CR       [0x0D]
CAPR    [0xFFF0]         CBR     [0x0000]        IMR      [0x0000]       ISR      [0x0000]
TCR     [0x77400700]     RCR     [0x0000101A]    TCTR     [0x3638B14A]   MPC      [0x00000000]
9346CR  [0x00]           CONFIG0 [0x10]          CONFIG1  [0x8D]         TimerInt [0x00000000]
MSR     [0x18]           CONFIG3 [0xE1]          MULINT   [0x00C0]       RERID    [0x0010]
TSAD    [0x000E]         BMCR    [0x3000]        BMSR     [0x782D]       ANAR     [0x0021]
ANLPAR  [0x0000]         ANER    [0x0000]        DIS      [0x0000]       FCSC     [0x0000]
NWAYTR  [0x0705]         REC     [0x0000]        CSCR     [0x07C0]       PHY1_PARM[0x60F60C59]
TW_PARM [0x7B732660]     PHY2PARM[0x1A]

这个问题都困扰了我2周了,没办法才想用串口KITL的,大虾要是能解决8139D的KITL问题,那就太感谢了,还有我听说MS的KITL没有实现对8139D网卡支持,是这样的么?
点赞  2009-2-19 16:46
。。。没人回答,是分太少了么,我没怎么发过帖子,忘了加分了,好像改不了啊。。。
点赞  2009-2-19 17:38
和你的BSP有关系。
点赞  2009-2-19 18:02
yashi 能说得详细一点么?我的BSP和网卡有什么关系呢,我用的是pb自带的8139D驱动阿,
点赞  2009-2-19 18:14
BSP里要对应支持
点赞  2009-2-19 19:32
。。。可不可以说得详细一点?BSP包里怎么样才算支持,我用的8139d也要bsp支持么?
点赞  2009-2-19 21:42
PC104,没有用过。

这个KTIL完全要自己实现是非常复杂的。我觉得楼主看看BSP是否有KITL文件夹,如果没有那么,自己搞真的很难的。

点赞  2009-2-19 21:54
没有网卡可以用USB啊,不过用串口也是可以的,好多CPU带的BSP里就支持串口KITL,如果在BSP下面找不到相关代码,也可以到CSP目录下面找找看,实在不行找CPU厂商要
至于Enable Kitl,用什么方式通信,那都应该在BSP代码里面设定
点赞  2009-2-19 22:49
hzdysymbol 的意思是说我要串口KITL的话要在BSP代码里设置,修改代码?我现在用的标准的CEPC的BSP,我要在那里改呢?
还有,镜像从CF卡里启动,启动后用串口KITL调试,可以吧?
不是说 我想用串口KITL就得用串口下载镜像,想用网卡KITL就得用网卡下载镜像?是吧?
点赞  2009-2-19 23:27
谢谢gooogleman
我看了一下,我的BSP是标准的CEPC,有网卡,串口都有kitl,
那我想用串口KITL我得怎么设置呢?PB连接选项里那个我会,
就是生成镜像的时候要 注意什么?
点赞  2009-2-19 23:30
hzdysymbol 的意思是说我要串口KITL的话要在BSP代码里设置,修改代码?我现在用的标准的CEPC的BSP,我要在那里改呢?
你的BSP跟我的完全不一样,所以我没有办法告诉你在哪里改,一般KITL的入口在OEMInit函数里面,你从那里开始看起吧

还有,镜像从CF卡里启动,启动后用串口KITL调试,可以吧?
可以的

不是说 我想用串口KITL就得用串口下载镜像,想用网卡KITL就得用网卡下载镜像?是吧?
KITL跟用什么下载镜像没有关系
点赞  2009-2-20 09:15
谢谢大家,搞定了!不过果真的很慢!超慢!!! 要是大虾们能帮我搞定为什么网络不通就更好了!!


在c:\WINCE500\PLATFORM\COMMON\SRC\X86\COMMON\OTHER\debug.c中
void InitBootInfo (BOOT_ARGS *pBootArgs)中
  1.      if (BOOT_ARG_VERSION_SIG != pBootArgs->dwVersionSig){
  2.         // nothing passed from bootloader, set default
  3.         BSPInitDfltBootInfo (&x86Info);
  4.         
  5.     } else {
  6.         [color=#FF0000]pBootArgs->KitlTransport = KTS_SERIAL;//加入这一句[/color]
  7.         x86Info.dwKitlIP            = pBootArgs->EdbgAddr.dwIP;
  8.         x86Info.dwKitlBaseAddr      = pBootArgs->dwEdbgBaseAddr;
  9.         x86Info.dwKitlDebugZone     = pBootArgs->dwEdbgDebugZone;
  10.         x86Info.KitlTransport       = pBootArgs->KitlTransport;
  11.         x86Info.ucKitlAdapterType   = pBootArgs->ucEdbgAdapterType;
  12.         ...
  13.     }

找了好半天,想loadcepc可以传入pBootArgs->KitlTransport参数,但看了loadcepc的帮助,没有这个参数的说明,
又找了loadcepc的源码,果真好多pBootArgs的参数都没有负值,不知道为什么,
上面的代码插入那一句话强制设置为串口KITL,

这样是好使的,但不知道是 正统的做法。
点赞  2009-2-20 17:35
可是为什么一直不出届面呢,?
和我选Enable Full Kernal mode 有关系么?

点赞  2009-2-20 18:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复