是的,环形缓冲区可以工作.

您只需要从中断处理程序填充缓冲区,您将从my_read回调中读取它.

一个真正天真且非常低效的实现可能是(未经测试的):

static irqreturn_t irq_handler(int irq,void *dev_id)

{

struct my_dev *dev = dev_id;

buf[buf_wr] = read_device(dev);

buf_wr++;

if (buf_wr >= BUFSIZE)

buf_wr = 0;

wake_up(&wq);

return IRQ_HANDLED;

}

static ssize_t my_read(struct file *file,char __user *ubuf,size_t sz,loff_t *ppos)

{

int n,ret;

ret = wait_event_interruptible(wq,buf_wr != buf_rd);

if (ret)

return ret;

n = buf_wr - buf_rd;

if (n < 0)

n += BUFSIZE;

n = min(count,n);

ret = copy_to_user(ubuf,buf,n);

buf_rd += n;

if (buf_rd >= BUFSIZE)

buf_rd -= BUFSIZE;

if (ret)

return ret;

*ppos += n;

return 1;

}

您可能还想使用DMA或mmap或两者来提高效率.

linux缓冲设备,Linux设备驱动程序缓冲策略相关推荐

  1. linux cdc设备驱动程序,Linux Kernel 'cdc-wdm' USB设备驱动程序堆缓冲区溢出漏洞

    发布日期:2013-03-14 更新日期:2013-03-19 受影响系统: Linux kernel 3.x Linux kernel 2.6.x 描述: --------------------- ...

  2. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED模板驱动程序的改造:设备树

    文章目录 前言 1.驱动的三种编写方法 2.怎么使用设备树写驱动程序 2.1.设备树节点要与platform_driver能匹配 2.2.修改platform_driver的源码 3.实验和调试技巧 ...

  3. linux lddbus设备,Linux设备驱动程序学习(14)-Linux设备模型(各环节的整合)

    Linux设备驱动程序学习(14) -Linux设备模型(各环节的整合) 通过一个设备在内核中生命周期的各个阶段,可以更好地理解Linux设备模型.我将通过分析lddbus和sculld的源码来了解L ...

  4. linux如何切换到设备,如何编写Linux设备驱动程序(转)

    序言 Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环 境下的驱动程序有很大的区别.在Linux环境下设计驱动程序 ...

  5. linux内核的块设备驱动框架详解

    1.块设备和字符设备的差异 (1)块设备只能以块为单位接受输入和返回输出,而字符设备则以字节为单位.大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作; (2)块设备对于 I/O 请求 ...

  6. linux读写usb host,LINUX下USB1.1设备学习小记(3)_host与device

    各位还记得"任何传输都是由host发起的"这句话么~ 在usb设备插入pc中到拔出usb设备,都是由host进行询问的 一个usb鼠标的工作流程可以表达如下: usb鼠标插入pc中 ...

  7. LINUX下USB1.1设备学习小记(5)_uhci与设备(2)

    hub_port_wait_reset在/drivers/usb/core/hub.c中   static int hub_port_wait_reset(struct usb_hub *hub, i ...

  8. Linux驱动开发_设备文件系统详解

    目录 何为设备管理器? Linux下dev的作用 Devfs sysfs kobject udev proc 何为设备管理器? 设备管理器就是负责管理这台电脑上的外设,当我们通过电脑提供的USB口插入 ...

  9. linux raw设备格式化,SUSE Linux 10配置裸设备(raw devices)

    SUSE Linux 10配置裸设备(raw devices) 裸设备,是没有经过格式化的分区或磁盘,也叫裸分区(原始分区),不被Unix通过文件系统来读取的特殊字符设备.它由应用程序负责对它进行读写 ...

  10. linux裸设备大小,SUSE Linux 十 配置裸设备(raw devices)

    SUSE Linux 10 配置裸设备(raw devices) 裸设备,是没有经过格式化的分区或磁盘,也叫裸分区(原始分区),不被Unix通过文件系统来读取的特殊字符设备.它由应用程序负责对 它进行 ...

最新文章

  1. sharepoint自带JS函数获取URL参数
  2. onKeyPress与。 onKeyUp和onKeyDown
  3. curl命令的超时时间
  4. Scala入门到精通——第十七节 类型参数(一)
  5. 对于随机过程方面书籍的评论(转贴)
  6. hystrix threadpool coresize_Hystrix断路器 - 求知若渴的蜗牛
  7. 1 CentOS 6下FastDFS实现分布式文件系统
  8. Monkey King
  9. 那些年做过的ctf之加密篇
  10. 红警 for Mac合集(Red Alert红色警戒)
  11. hihoCoder #1117 战争年代
  12. python设计报告的前言怎么写_前  言_Python语言程序设计_红黑联盟读书频道
  13. 强大数定律与弱大数定律(民科解释)
  14. 正面管教php_我就这样走进正面管教
  15. 20172303 2017-2018-2 《程序设计与数据结构》第10周学习总结
  16. r矢量球坐标系旋度_球面,柱面坐标系下的散度与旋度
  17. leetcode记录-340-至多包含 K 个不同字符的最长子串-双指针
  18. pdf转换成word转换器在线
  19. 域控下发脚本_域控下发脚本,安装zabbix客户端
  20. 【英语阅读】纽约时报 | 紧急状态下的东京:夜生活仍在继续

热门文章

  1. 让云触手可及——微软云计算解决方案白皮书
  2. 微信小程序的三级分销-项目表格设计
  3. SQL server无法打开项 UNKNOWN\Components\929B2416EC4102B48A989956983ACF45\1F7B2B09C788E7644A0F08CA9C1D解决办法
  4. 在python3.X中执行python manage.py migrate命令的坑
  5. Golang 参数传递本质
  6. golang 判断map的键key是否存在
  7. go处理get、post请求返回的body数据
  8. FluentPDO备忘
  9. 七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.
  10. 编程基本功:谁改出的问题谁解,对不对?