原创 Driver studio

2008-11-8 08:19 5945 13 14 分类: MCU/ 嵌入式
  4月14日~4月16日 实战篇

       同学走后,再次走进图书馆,想专心啃书。但也许是一连玩了好几天,脑袋一下子放松不转了,坐了一上午,发现效率较之前更低。我想再也不能这样下去了,因为时间已经不多,只有个把月的样子就得开始写论文了。那怎么办呢?光说不练假把式。我得学着编驱动,学着用VC,用Driver Studio,只有在应用的过程中才能消化所学内容,并更系统地、更有目的性地学习新内容(接下来几天的成果验证了这句话,这也成为了我积累下的一个实践经验。当然,这是后话)。


       于是,14日下午我就改呆寝室了。实战从最简单的开始。感谢薛园园的书,虽然涉及驱动的部分很少,但很能领人入门,我的第一个驱动就是《USB应用开发技术大全》第10章的例子KFileWrite。按书所说,将DriverWizard的工作一步步做完,然后输代码,最后组建。但组建的时候出了问题,是cvtres.exe捣的鬼(具体问题已在前几篇描述)。后来终于把驱动程序给build成功并生成.sys文件了,但自动生成的应用程序又挂了:build后无法执行。只好求助于baidu搜索,也在学校论坛相应版块发了贴,但都不果。顿时,感觉走入了黎明前的黑暗,是期盼,是沮丧,我也说不清楚。


      4月17日 曙光篇


       前几天的学习陷入了僵局,不知所措,只好看看ezusb.sys的原代码,看看Driver Studio的帮助文档。jmj同学发短信问进展,只有蔫蔫地回说没进展。晚上,不死心,继续baidu。突然看到驱网上有人针对应用程序无法执行的问题回帖说不要用VC来build,改用Driver Studio菜单下的Build with Build.exe。大喜,尝试之,不行。不过查看错误提示,“F:\java\test\app==>call D:\winddk\2600\bin\build.exe            D:\Program不是内部或外部命令...”感觉这怎么有点命令行的味道,它的意思是调用不了build工具。于是,我打开cmd,输入build,也报错“build不是内部或外部命令...”。


       那又该怎么办呢?对了,之前那个帖也有人说用ddk来build。想起来ddk有四个Build Environments,一直不知道有什么用。参考了一些文章,学习了其用法,原来用ddk编程时就靠它们来build的。于是打开了Win XP Checked Build Environment,出现了命令行窗口,且路径为:D:\winddk\2600。通过cd命令,进入待build的应用程序目录,如F:\test\app,然后输入build,只见窗口内容在很快地滚动,一会儿就显示"Done"。打开目录,发现里面果然有了.exe文件。双击,哈哈,不再是那句烦人的“...不是有效的应用程序”,而是和书上一模一样的用户界面。赶紧用EzDriverInstaller装入驱动程序,接着按部就班。终于,应用程序执行之后,F盘内生成了一个文本文件,内容是“a”!那一刻,我激动得喊了一声:“庆祝一下,我成功了!”


        4月18日 进步篇


        经历了前一个晚上的狂喜,我希望新的一天,有新的突破。昨天的成果是单纯建立在驱动程序上的,并没有实现和硬件的互动。因此,我想新建一个USB总线的Driver,让它和开发板通信。因为USB有四种传输方式,其中好像只有控制传输在Driver Studio中有封装好的函数,看了一下是BuildVendorRequest。所以决定从控制传输入手。因为开发板自带了控制输出的测试程序(点应用程序界面的相应按钮,就可以通过端点0传输相应命令代码,让数码管显示不同数字,或让数字递增、递减),我可以完全用它的固件,另外Driver Studio可以自动生成应用程序,所以我只要专心做驱动程序就OK了。在DriverWizard的步骤中,选USB总线,填上用USBViewer得到的PID和VID(在我的另外一篇帖子有提过方法),然后添加一个IOCTL(也可以添加几个,对应好几个命令。我这里只用一个,对应让数字递减的命令),等等,完成后开始修改IOCTL_800_Handler(KIrp I)内的代码,添加如下代码:


       PURB pUrb = m_Lower.BuildVendorRequest(
                                      NULL,
                                        0,
                                      0,
                                      0xBC,
                                        0,
                                        FALSE,
                                      FALSE,
                                        NULL,
                                        0
                                      );
       if (pUrb)
       {
              status = m_Lower.SubmitUrb(pUrb);
       }
         else
       {
              status = STATUS_INSUFFICIENT_RESOURCES;
       }


        return status


         其中,0xBC即为命令代码,因为当固件收到这个命令后就会让数码管的数字递减。其他参数可参见Driver Studio的关于函数BuildVendorRequest的帮助文档。


        好了,把驱动程序和应用程序都build通过之后,接下来的任务就是安装驱动程序了。首先用开发板的Control Panel将控制输出的固件download到芯片内,然后进入设备管理器,右击相应器件,选择“更新驱动程序”,按提示即可将自己写的驱动装入。接着打开自己的应用程序,设置后点“execute transfer”,就会看到每点一次,数码管的数字就会减一。当时的高兴劲儿,真的有点喜极而泣的感觉。不过现在写这篇东西写得好累,情绪跟不上了,呵呵,看官莫怪。


       4月18日下午 回顾与前瞻


       到目前为止,已熟悉了驱动程序的整个框架的建立流程,并基本掌握了控制传输的代码编写。接下来要做的就是学习如何实现其它传输了,至少批量传输是一定要掌握的。另外,还有其它细节的东西也有待完善。比如在实验过程中,发现在开发板刚上电的时候,它有一个PID和VID,Control Panel能识别它。但在利用Control Panel下载完固件后,它的PID和VID就变成了另外一个,因为我的驱动用的就是这个PID和VID,所以识别到它并绑定了,而Control Panel倒是识别不了了。不知道这是否跟二次枚举有关。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1532887 2009-2-8 19:34

我的QQ是260780991
相关推荐阅读
sealove518_112732726 2012-12-14 13:16
同時兩個surfaceview camera 中的一些開發問題
問題1: 如何將camera surfaceview 顯示在最上層:用了this.setZOrderOnTop(true);這個方法 問題2: 如何用一個BUTTON來自由控制came...
sealove518_112732726 2012-12-14 11:22
Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法
Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法 Eclipse中,Android项目名称前有红叉,但项目内所有文件都无错误,通常发生在导入项目时。 先可以去...
sealove518_112732726 2012-09-05 10:29
android各种权限及说明
  android.permission.ACCESS_CHECKIN_PROPERTIES 允 许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allow...
sealove518_112732726 2012-09-05 10:27
android各种权限及说明
android各种权限及说明 android.permission.ACCESS_CHECKIN_PROPERTIES 允 许读写访问”properties”表在checkin数据库中,改值...
sealove518_112732726 2012-09-04 08:54
android 获取当前程序路径
//  获取当前程序路径     getApplicationContext().getFilesDir().getAbsolutePath();   //  获取该...
sealove518_112732726 2012-01-11 09:40
mt.exe:general error c101008d 最终原因已查明
mt.exe:general error c101008d(最终原因已查明)_算法的天空_百度空间   2011-05-27 16:22:41|  分类: 坑爹软件问题 |  标签: |字号大...
EE直播间
更多
我要评论
1
13
关闭 站长推荐上一条 /3 下一条