superrobust
驱动牛犊
驱动牛犊
  • 注册日期2003-01-04
  • 最后登录2007-08-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:857回复:2

急问9052的DS驱动基本问题

楼主#
更多 发布于:2003-10-14 23:58
我把BAR3对应为m_MemoryRange2并初始化
引用-----------------------------------------------------
status = m_MemoryRange2.Initialize(
pResListTranslated,
pResListRaw,
PciConfig.BaseAddressIndexToOrdinal(2)
);
----------------------------------------------------------
然后在Pci9052Device::Read(KIrp I)和Write(KIrp I)中想对BAR3
空间的基地址进行单字节读写。这样写对吗
标志位移设置的是DO_DIRECT_IO

引用-----------------------------------------------------
NTSTATUS Pci9052Device::Read(KIrp I)
{...
KMemory Mem(I.Mdl());
PUCHAR  pBuffer= (PUCHAR) Mem.MapToSystemSpace();
ULONG   dwTotalSize = I.ReadSize(CURRENT);
ULONG   dwBytesRead = 0;
m_MemoryRange2.inb(0,pBuffer,dwTotalSize);
...}
----------------------------------------------------------
Write(KIrp I)例程中类似。
但最后在测试程序中先调用writefile()后进行redfile()操作
打算写一个字节再读出来,但总是无法成功。用语句
printf(\"%d bytes written to device (%d attempted).\\n\", nWritten, n);
进行察看。返回的信息
0 bytes written to device。

请大侠们帮忙解惑。
everything is developing
CYoung
驱动中牛
驱动中牛
  • 注册日期2003-06-10
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-15 09:39
1:ULONG dwBytesRead = 0;这是不可以的,要写出你要每次读多少字节
2:如果要写的话,你的硬件支持吗?就是你的硬件外面有没有连接的Memory空间?比如RAM,如果没有的话,当然写不进去  
答得好的话,请兄弟们加点分,那是对我的肯定
superrobust
驱动牛犊
驱动牛犊
  • 注册日期2003-01-04
  • 最后登录2007-08-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-15 10:55
多谢Cyoung。
我把dwBytesRead赋为dwTotalSize,console程序显示2bytes read
from device。
还有两事想请教,现在读进来的内容什么都没有。我原来的做法是
9052local bus上的数据线没用的都被接了地。如果在某个地址往
回读数据,应该是有确定数据状态的,比如00。现在的情况是读进来
的数据内容为空。
另外一件事是,用了Mem.MapToSystemSpace()来进行空间映射。根据
文档的解释似乎是把用户空间由mdl锁定的一段内存映射到内核空间
这样内核模式的驱动可以直接与用户模式的内存进行数据传输。这样
理解对吗?
那个virtualadress()返回的虚拟地址指的什么?
everything is developing
游客

返回顶部