• 浅谈wince驱动调试方法(作者:wogoyixikexie@gliet)


    浅谈wince驱动调试方法(作者:wogoyixikexie@gliet)

         以前,我调试驱动都是打包,下载,很郁闷,一个小小的DLL都要这么费神,对微软极为不满,现在发现驱动调试有一些诀窍,特来和大家分享,如果你有更好的方法,就来和大家分享吧。

         之所以说“浅谈”,是因为我自己也搞得模模糊糊的,问过很多人,大家一致认为有三种调试方法:

    一、使用应用程序动态加载驱动——优点是不用下载打包NK,可以在正常情况下看到驱动的运行情况;缺点是只能调试流驱动。在这方面有个专家做的很好,发布了驱动调试助手http://www.cnblogs.com/we-hjb/archive/2009/02/14/1250838.html#1451120——在这里就不多说了,看原版才是好的。

    二、KITL。这个东西我用过,觉得调试那些不能启动的严重BUG很有用。下面适合一个朋友的谈话,很清晰了。

    三、神秘武器......什么都不用!
     
    加密助手 说:
    --- 系统提示: 以下会话未被加密 ---
    CSDN-Ricky_hu北京 说:
    做过
    CSDN-Ricky_hu北京 说:
    这就是动态调试驱动,经常这样做
    wogoyixikexie@gliet 说:
    这个方法我很想学,你能不能教教我
    wogoyixikexie@gliet 说:
    整天烧写,太郁闷了
    CSDN-Ricky_hu北京 说:
    谈不上教, 很容易的
    wogoyixikexie@gliet 说:
    我都不知道怎么操作
    CSDN-Ricky_hu北京 说:
    你烧写一次,然后用pb通过kitl下载,在这个target->release dir module->add module里面添加你要调试的驱动就ok了
    CSDN-Ricky_hu北京 说:
    这个就是kitl的主要功能
    wogoyixikexie@gliet 说:
    这样加载上去也没有什么意思啊。因为KITL只能往前加载,不能往后加载的
    CSDN-Ricky_hu北京 说:
    你说的往后加载是什么意思?
    wogoyixikexie@gliet 说:
    就是比如我加载过一个驱动以后,不能再回来设置断点再次执行了
    wogoyixikexie@gliet 说:
    同一个驱动不能执行两次的吧
    CSDN-Ricky_hu北京 说:
    再回来设置断点就重新连接kitl啊
    wogoyixikexie@gliet 说:
    KITL,我的还有点问题,我只会使用一点点
    CSDN-Ricky_hu北京 说:
    在eboot里面配置好了就ok了
    wogoyixikexie@gliet 说:
    你的意思是说,在这个target->release dir module->add module里面添加你要调试的驱动,然后要重新连接KITL?
    CSDN-Ricky_hu北京 说:
    你要调试那个驱动就把它添加到target->release dir module->add module这里面,然后连接kitl调试,发现问题,修改后直接编译这个驱动,然后再重新连接kitl继续调试,再发现问题,再修改,再连kitl调试
    wogoyixikexie@gliet 说:
    哦,这也是个方法
    wogoyixikexie@gliet 说:
    这个方法很强大,可以调试本机驱动
    wogoyixikexie@gliet 说:
    使用应用程序只能调试流驱动
    CSDN-Ricky_hu北京 说:
    这是pb中kitl的基本调试方法,功能很强大,能打印很多调试信息
    CSDN-Ricky_hu北京 说:
    应用程序调试的只是接口,驱动内部的还是不能够调试
    wogoyixikexie@gliet 说:
    不过缺点是注册表修改之后就要重新下载内核才行
    CSDN-Ricky_hu北京 说:
    嗯,对,这个对于注册表以及kernel级别的修改要重新下载nk
    wogoyixikexie@gliet 说:
    还有一般要编译成debug版本的驱动才行,整个NK编译成debug版本会非常大。哈哈,原以为是不用KITL就可以加载的。厉害
    CSDN-Ricky_hu北京 说:
    不一定非得编译成debug版本的驱动啊,release版本的也可以通过kitl调试,而且调试信息也很丰富的
    wogoyixikexie@gliet 说:
    你用什么芯片?
    wogoyixikexie@gliet 说:
    PXA310?
    CSDN-Ricky_hu北京 说:
    你可以在release驱动里面加断点,一步步走,这样发现问题很快
    CSDN-Ricky_hu北京 说:
    pxa270,不过马上要用310了
    wogoyixikexie@gliet 说:
    有些驱动是有接口的,接口需要应用来访问
    wogoyixikexie@gliet 说:
    如果KITL+应用程序来调试,这样打印信息也会显示在PB里面吧
    CSDN-Ricky_hu北京 说:
    驱动一般都有接口,就看这个接口是留给谁来访问了
    CSDN-Ricky_hu北京 说:
    wogoyixikexie@gliet 说 (9:43):
    如果KITL+应用程序来调试,这样打印信息也会显示在PB里面吧

    对,会显示
    wogoyixikexie@gliet 说:
    不过这样已经很不错了。比如COM_Read这些,KITL应该不能在里面设置断点的吧
    CSDN-Ricky_hu北京 说:
    这个COM_Read是驱动提供的接口吗?如果是,也能设置断点的
    wogoyixikexie@gliet 说:

    wogoyixikexie@gliet 说:
    要应用程序打开的
    wogoyixikexie@gliet 说:
    这个也行?
    CSDN-Ricky_hu北京 说:
    但是你要把断点设置在驱动里面,而不是应用程序里面
    wogoyixikexie@gliet 说:
    那太厉害了,那怎么控制它进去?
    CSDN-Ricky_hu北京 说:
    你用kitl就应该没问题
    CSDN-Ricky_hu北京 说:
    在XXX_Read
    CSDN-Ricky_hu北京 说:
    里面设置断点
    wogoyixikexie@gliet 说:
    是不是有命令才行进去,还是直接弄个断点就可以了?
    CSDN-Ricky_hu北京 说:
    你确定应用要调用xxx_read(),然后在它的驱动里面设置断点就可以断住了吧
    wogoyixikexie@gliet 说:
    这是很好的方法
    CSDN-Ricky_hu北京 说:
    具体的你可以试试,但是用kitl调试应用的话效果不太理想
    CSDN-Ricky_hu北京 说:
    你可以用vs调试应用,看问题出现在哪里,然后用pb继续跟踪驱动
    wogoyixikexie@gliet 说:
    我上次弄过一下子,发现液晶屏不会亮了,但是系统已经起来
    CSDN-Ricky_hu北京 说:
    呵呵
    wogoyixikexie@gliet 说:
    这个三星BSP做的不是很好。
    CSDN-Ricky_hu北京 说:
    我没用过三星的bsp和芯片
    CSDN-Ricky_hu北京 说:
    三星自己的手机啊什么的产品都不用他们自己的芯片和bsp,我们为什么要用呢,呵呵。。。
    wogoyixikexie@gliet 说:
    的确是
    wogoyixikexie@gliet 说:
    你是通过网卡来弄KITL的吧?
    CSDN-Ricky_hu北京 说:
    usb
    CSDN-Ricky_hu北京 说:
    其实也是模拟成网卡
    wogoyixikexie@gliet 说:
    很多人都不会用KITL,你那里有什么文档吗?有空写个完整的博客帮帮大家,哈哈
    wogoyixikexie@gliet 说:
    上次我也用USB,这样就会是同步软件不能连接了。不能弄应用程序进来联调
    CSDN-Ricky_hu北京 说:
    我也是从优龙的eboot里面移植过来的
    CSDN-Ricky_hu北京 说:
    还有pb下面mainstone的bsp里面也有,你也可以移植一下
    wogoyixikexie@gliet 说:
    哦,确实是,PB5.0下,那个正是PXA270的BSP。
    CSDN-Ricky_hu北京 说:
    有空我可以整理一下,但是目前很忙啊,产品马上要上市了,天天加班
    CSDN-Ricky_hu北京 说:
    是啊,我们就是在这个bsp上移植的,很好用,很快
    wogoyixikexie@gliet 说:
    我想弄个这种板子来搞搞。嘿嘿。
    wogoyixikexie@gliet 说:
    不打扰你了。谢谢你
    CSDN-Ricky_hu北京 说:
    客气,呵呵。。

    准备结贴。

    总结:
    一、经过这次教训,MDD部分的代码最好不要修改,因为它极有可能和别的驱动公用,如果改动了,甚至让信息打印也会产生意想不到的后果,实在要修改的,就移植到BSP下,这样我们就可以任意妄为了。哈哈
    二、意外收获——找到了最佳调试驱动方法。1、KITL(适合调试大BUG,比如异常,不能启动系统等情况) 2、驱动调试助手(适合调试流驱动,并且驱动中无注册表操作的情况,有注册表操作的会导致异常,如果有时间,可以修改一下这个BUG) 3、在platform.bib,platform.reg文件中准备好所调试驱动相关信息。再次调试修改该驱动的时候,只需要把该驱动的DLL代替wince windows目录下的老DLL即可。当然少不了应用程序配合调试其他功能(最好加入注册表操作)——这是我目前最支持的方法,因为最简单,最可靠!

  • 相关阅读:
    [转载]Matlab实用小技巧
    Matlab rand randn randint
    Matlab取整
    Mathtype报错:MathType has detected an error in....
    [转载]十大编程算法助程序员走上高手之路
    (转)Free函数的参数一定要是malloc返回的那个指针
    sizeof,一个其貌不扬的家伙(转)
    ISO C Random Number Functions
    srand() rand() time(0)
    IOS之文件夹创建、删除,图片在本地的保存和加载
  • 原文地址:https://www.cnblogs.com/gooogleman/p/1869741.html
Copyright © 2020-2023  润新知