leaf_xx75
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2004-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1223回复:4

PCI驱动的问题

楼主#
更多 发布于:2003-05-09 22:18
PCI卡实时接收高速数据的时候,在2000下
可以采用IRP排队,用异步的方式进行,
或则直接就采用地址映射方法
每次中断就直接通知。

我刚编完一个Linux下的bus master的PCI驱动
我是采用这样的方式:
  首先read,启动传送,然后用sleen_on_interruptible
然后中断,interruptible_wake_up,然后读取数据
读完数据后启动下一次传送

我觉得这样做效率太低,然后我看有个
O_NONBLOCK.
但是我不知道怎么用,也不知道能不能象2000下那样
可以用多个ReadFile(read)来排队读取数据

不知道哪位高手能给在下指点一下迷津?

zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-11 16:01
那要做块设备的驱动了
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
gigimao
驱动牛犊
驱动牛犊
  • 注册日期2003-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-11 16:28


[编辑 -  5/11/03 by  gigimao]
dos
dos
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-12 00:40
WINDOWS的驱动的主干是irp,系统借此进行全面的协调和监控,同时也提供了比较方便的异步方式。Linux的驱动机制没有这么复杂,可以认为只是许多回调函数堆在一起。似乎也没有提供简单的异步机制。
我的看法是,不管上层的机制是怎么实现的,最底层的硬件驱动总是相似的。硬件本身并不能同时处理多笔数据,所有的数据还是要一笔一笔的交给硬件处理。
我觉得提高驱动效率的一个关键点是怎么优化程序的流程。比如在你的程序准备进入sleen_on_interruptible之前是不是还有些事情需要准备呢?
leaf_75
驱动牛犊
驱动牛犊
  • 注册日期2002-05-16
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-12 12:37
谢谢
   当时在2000下,我将系统空间映射成用户空间,
   然后中断产生后启动下一次传送,并用事件通知
   用户去处理数据,这样可以不用数据搬移
 
   而在Linux下
   我每回不得不在中断里面设置停止传送
   在read里面设置启动传送,还要数据拷贝
   效率不免低了一点,
  
   有没有更好的办法?
  
      
  
游客

返回顶部