sqf
sqf
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2010-05-22
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1222回复:4

PCI卡驱动一问?

楼主#
更多 发布于:2003-08-01 12:56
我在驱动程序里没有实现IRP_MJ_READ和IRP_MJ_WRITE,
我在应用程序里读写采用的是IRP_IO_CONTROL的方式。
问题:我看书上讲,用readfile和writefile读写数据,IO管理器产生IRP_MJ_READ和IRP_MJ_WRITE。
我的做法是,先把PCIBAR的物理地址映射到用户虚地址,然后直接用地址访问。例如:
   temp=*(U32*)(pUserAdd+offset);
我用这种方法读出的数据是正确的,但我不知道这句话到内核模式后是什么IRP包。如果是IRP_MJ_READ和IRP_MJ_WRITE,我根本就没实现,数据怎么会正确?(不是IRP_IO_CONTROL,因为
我就没调用deviceiocontrol函数。
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-01 16:54
用这种方法的话,是用Memory Map的方式,根本没用到IRP_MJ_READ和IRP_MJ_WRITE,也没用到IRP_IO_CONTROL。
助人乃快乐之本 有人给分就更快乐了 :-)
hong
驱动小牛
驱动小牛
  • 注册日期2001-09-19
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-02 02:42
\"先把PCIBAR的物理地址映射到用户虚地址,然后直接用地址访问。例如:
temp=*(U32*)(pUserAdd+offset);
我用这种方法读出的数据是正确的,但我不知道这句话到内核模式后是什么IRP包。
\"

when you do this way, there is not any IRP happens,
you read the port/memory directly.
for small amount of data, this way is ok.
zb19780401
驱动牛犊
驱动牛犊
  • 注册日期2003-04-11
  • 最后登录2004-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-02 10:49
hehe
zb19780401
驱动牛犊
驱动牛犊
  • 注册日期2003-04-11
  • 最后登录2004-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-02 11:01
叮叮咚咚等等等等等
游客

返回顶部