yanxing
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:955回复:3

初学者,请求帮助,关于pci的wdm

楼主#
更多 发布于:2003-01-03 09:16
硬件不是我做的,我只是做驱动,有几个问题如下:
1,我用driverworks生成wdm驱动,如果我什么代码也不加,只是将vendorID和DeviceID加上,此时安装驱动,系统提示:无法确定驱动是否与硬件兼容,怎样才能让系统监测到驱动与硬件兼容那?
2,我不管兼容与否,安装完成,此时我用Ioctl与应用程序通信,只是发几个字符到wdm,再收回这几个字符,这时候,没问题,一切正常,后来我在wdm中添加kmemoryrange变量,如果只是添加,而不利用,也没问题,但是如果我加入kmeoryrang的执行语句(outb),在执行时,驱动接收到的应用程序数据却少了,不知为什么?例如:应用程序传送数据“abcdefg”,驱动收到是“aceg”请问为什么?
yanxing
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-03 11:34
第二个问题算是解决了,后来我把应用程序发送和驱动接收的数据类型完全统一起来,就没事了。但是现在又有一个问题,我不会用kmemoryrange这个东西,我在创建wdm时添加一个变量,在驱动中我先发送几个字符(outw),后再接收几个字符(inw),我只是想看看能不能写到硬件中去,可是inw总是接收不到,为什么?
driverworks定义kememoryrange如下:
在函数::OnStartDevice(KIrp I)中
{
 PCM_RESOURCE_LIST pResListRaw = I.AllocatedResources();
PCM_RESOURCE_LIST pResListTranslated = I.TranslatedResources();
KPciConfiguration PciConfig(m_Lower.TopOfStack());
status = m_MemoryRange0.Initialize(
pResListTranslated,
pResListRaw,
PciConfig.BaseAddressIndexToOrdinal(0)
);
}
以上由driverworks自动生成,我未改动,然后我就直接使用m_MemoryRange0.outw(0x100,sBuffer2,10)和m_MemoryRange0.inw(0x100,sBuffer1,10),我不知道这样写对不对,大家帮忙看看,我是想把数据写到0X100中,接着从0X100中读出。
yanxing
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-03 12:19
我问的问题是不是太简单了,不值得去回答?怎么没人回答那??
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-01-03 14:22
用户被禁言,该主题自动屏蔽!
游客

返回顶部