asslittle
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:918回复:3

用过DriverStudio进行开发的朋友请进

楼主#
更多 发布于:2004-02-25 09:12
我在当固件程序的时候,遇到一个问题:

我用ds生成了一个驱动,然后根据ds提供的ezusb的例子,添加了一些代码。

在downloadfirmware这个函数中,先当下去了loader这个程序,然后再当一个dev_io程序(有cypress提供的例子),用drivermonitor察看,发现loader成功当下去,但当dev_io的时候就没反应了。然后,再拔出设备,才会出现“failed to  download dev_io”的信息。

NTSTATUS USBDRMDevice::DownloadFirmware(void)
{
t << "Entering DownloadFirmware\n";

NTSTATUS status = STATUS_SUCCESS;

Reset8051(1);

status = DownloadIntelHex(loader);
if( !NT_SUCCESS(status) )
return status;

t<<"Download loader OK!\n";
Reset8051(0);

status = DownloadIntelHex(dev_io);

if( !NT_SUCCESS(status) )
{
t << "Fail to Download dev_io\n";
return status;
}
else
{
t << "Download dev_io OK!\n";
}

Reset8051(1);
Reset8051(0);

return status;
}


downloadintelhex调用了下面的函数

NTSTATUS USBDRMDevice::DownloadRAM(PINTEL_HEX_RECORD pHexRecord, bool fExternal)
{
t << "Entering DownloadRAM\n";

NTSTATUS status = STATUS_SUCCESS;
URB Urb;

while( 0 == pHexRecord->Type )
{
if( fExternal ?
                      (! INTERNAL_R(pHexRecord>Address )) :
                      (INTERNAL_RAM( pHexRecord->Address ))  
 )
{
  m_Lower.BuildVendorRequest(
pHexRecord->Data,
pHexRecord->Length,
0,
static_cast<UCHAR>(
fExternal ?
                                              ANCHOR_LOAD_EXTERNAL :
                                              ANCHOR_LOAD_INTERNAL),
pHexRecord->Address,
FALSE, //default
        FALSE, //default
NULL, //default
0, //default
URB_FUNCTION_VENDOR_DEVICE,//default
&Urb
);


  status = m_Lower.SubmitUrb(&Urb);

  if( !NT_SUCCESS(status) )
   {
     t << " SubmitUrb Failed ! \n";
     break;
    }
  else
   {
     t << " SubmitUrb OK! \n";
     break;
    }

   }

   pHexRecord++;
}

return status;
}

SubmitUrb这个函数既没返回成功,也没返回失败?
它将irp传到底层的驱动,但我如何知道irp处理的情况?
irp到底是如何进行工作的?

这个问题已经搞了很久了,一直没搞定,还请各位指点指点!急啊!
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-02-25 11:01
可以理解,不过那个驱动是不需要修改就可以应用的
至少对于那个芯片是这样
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
asslittle
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-25 10:59
开发板带驱动的是直接用ddk写的,我是想用ds来做一个。

我的目的是想验证一下我的驱动程序,ds封装了ddk的东西后是变的很简便,但如果不了解驱动程序工作的细节,写代码还是有些困难。
我觉的对于以前没做过驱动的新手来说,直接用ds开发还是有些困难,而且ds的帮助写的并不是很详细,也没有一个专门讨论ds开发的论坛,一个人做起来会感到有点费力。

有没有工具可以跟踪调试驱动程序?像vc我就可以debug,知道程序具体是怎么运行的,可驱动呢?它的一些函数是怎么进入的?
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-02-25 10:39
我想你还是用芯片自带的那个驱动程序比较合适
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
游客

返回顶部