阅读:857回复:2
急问9052的DS驱动基本问题
我把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。 请大侠们帮忙解惑。 |
|
|
沙发#
发布于:2003-10-15 09:39
1:ULONG dwBytesRead = 0;这是不可以的,要写出你要每次读多少字节
2:如果要写的话,你的硬件支持吗?就是你的硬件外面有没有连接的Memory空间?比如RAM,如果没有的话,当然写不进去 |
|
|
板凳#
发布于:2003-10-15 10:55
多谢Cyoung。
我把dwBytesRead赋为dwTotalSize,console程序显示2bytes read from device。 还有两事想请教,现在读进来的内容什么都没有。我原来的做法是 9052local bus上的数据线没用的都被接了地。如果在某个地址往 回读数据,应该是有确定数据状态的,比如00。现在的情况是读进来 的数据内容为空。 另外一件事是,用了Mem.MapToSystemSpace()来进行空间映射。根据 文档的解释似乎是把用户空间由mdl锁定的一段内存映射到内核空间 这样内核模式的驱动可以直接与用户模式的内存进行数据传输。这样 理解对吗? 那个virtualadress()返回的虚拟地址指的什么? |
|
|