驱动中如何访问PCI设备的资源?

zkxz 2005-05-20 12:22:19
我要写个程序来访问一个PCI设备上的资源,这个资源类型是memory,映射到线性地址空间的一个地址(这个地址我可以取到)。我知道要要访问它需要ring0代码,也就是得写驱动,简单的驱动会写,但不知道驱动中怎么访问PCI设备的资源,好象要用HalTranslateBusAddress。请问大家具体怎么做啊?
...全文
255 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkxz 2005-06-08
  • 打赏
  • 举报
回复
拖的太久了,不好意思!

给分先!
piaochen_2002 2005-05-28
  • 打赏
  • 举报
回复
还有其他的方法,这个比较简单!
piaochen_2002 2005-05-28
  • 打赏
  • 举报
回复
HalTranslateBusAddress( Isa, //总线类型PCI 为0
0,
PortAddress, //用户传来的需访问的物理地址
&MemType, //为0表示存储器,为1表示I/O口
&MappedAddress ); //被转换的物理地址
//存放设备特定状态信息的数据结构
pLocalInfo
=(PLOCAL—DEVICE—INFO)DeviceObject->
DeviceExtension;
if (MemType == 0)  //意味着对存储器的操作
{
//映射为在内核中可读写的地址
pLocalInfo->PortBase
= MmMapIoSpace(MappedAddress, PortCount, FALSE);
*(PUCHAR)pIOBuffer = READ—REGISTER—UCHAR((PUCHAR)((ULONG) pLocalInfo->PortBas) );
}
else   //MemType=1意味着对I/O口的操作
{
//系统所认可的I/O口地址即是映射到内核中的I/O口地址
pLocalInfo->PortBase
=(PVOID)MappedAddress.LowPart;
*(PUCHAR)pIOBuffer = READ—PORT—UCHAR
((PUCHAR)((ULONG) pLocalInfo->PortBase
+nPort));
}
zkxz 2005-05-27
  • 打赏
  • 举报
回复
没有人写过吗?
alphapiao 2005-05-24
  • 打赏
  • 举报
回复
先得到设备IO空间的基地址,
再得到设备寄存器的地址和缓冲区的地址,
地址需要转换成线性地址才可以被win32程序操作。
zkxz 2005-05-24
  • 打赏
  • 举报
回复
多谢alphapiao(奉旨灌水钦差) ,过程我也知道。

但就是代码具体不知该怎么写。
zkxz 2005-05-23
  • 打赏
  • 举报
回复
多谢楼上的兄弟帮我顶!

一起等呆高手!
xift_2008 2005-05-23
  • 打赏
  • 举报
回复
学习~~~

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧