linux缓冲设备,Linux设备驱动程序缓冲策略
是的,环形缓冲区可以工作.
您只需要从中断处理程序填充缓冲区,您将从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设备驱动程序缓冲策略相关推荐
- linux cdc设备驱动程序,Linux Kernel 'cdc-wdm' USB设备驱动程序堆缓冲区溢出漏洞
发布日期:2013-03-14 更新日期:2013-03-19 受影响系统: Linux kernel 3.x Linux kernel 2.6.x 描述: --------------------- ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED模板驱动程序的改造:设备树
文章目录 前言 1.驱动的三种编写方法 2.怎么使用设备树写驱动程序 2.1.设备树节点要与platform_driver能匹配 2.2.修改platform_driver的源码 3.实验和调试技巧 ...
- linux lddbus设备,Linux设备驱动程序学习(14)-Linux设备模型(各环节的整合)
Linux设备驱动程序学习(14) -Linux设备模型(各环节的整合) 通过一个设备在内核中生命周期的各个阶段,可以更好地理解Linux设备模型.我将通过分析lddbus和sculld的源码来了解L ...
- linux如何切换到设备,如何编写Linux设备驱动程序(转)
序言 Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环 境下的驱动程序有很大的区别.在Linux环境下设计驱动程序 ...
- linux内核的块设备驱动框架详解
1.块设备和字符设备的差异 (1)块设备只能以块为单位接受输入和返回输出,而字符设备则以字节为单位.大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作; (2)块设备对于 I/O 请求 ...
- linux读写usb host,LINUX下USB1.1设备学习小记(3)_host与device
各位还记得"任何传输都是由host发起的"这句话么~ 在usb设备插入pc中到拔出usb设备,都是由host进行询问的 一个usb鼠标的工作流程可以表达如下: usb鼠标插入pc中 ...
- 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 ...
- Linux驱动开发_设备文件系统详解
目录 何为设备管理器? Linux下dev的作用 Devfs sysfs kobject udev proc 何为设备管理器? 设备管理器就是负责管理这台电脑上的外设,当我们通过电脑提供的USB口插入 ...
- linux raw设备格式化,SUSE Linux 10配置裸设备(raw devices)
SUSE Linux 10配置裸设备(raw devices) 裸设备,是没有经过格式化的分区或磁盘,也叫裸分区(原始分区),不被Unix通过文件系统来读取的特殊字符设备.它由应用程序负责对它进行读写 ...
- linux裸设备大小,SUSE Linux 十 配置裸设备(raw devices)
SUSE Linux 10 配置裸设备(raw devices) 裸设备,是没有经过格式化的分区或磁盘,也叫裸分区(原始分区),不被Unix通过文件系统来读取的特殊字符设备.它由应用程序负责对 它进行 ...
最新文章
- sharepoint自带JS函数获取URL参数
- onKeyPress与。 onKeyUp和onKeyDown
- curl命令的超时时间
- Scala入门到精通——第十七节 类型参数(一)
- 对于随机过程方面书籍的评论(转贴)
- hystrix threadpool coresize_Hystrix断路器 - 求知若渴的蜗牛
- 1 CentOS 6下FastDFS实现分布式文件系统
- Monkey King
- 那些年做过的ctf之加密篇
- 红警 for Mac合集(Red Alert红色警戒)
- hihoCoder #1117 战争年代
- python设计报告的前言怎么写_前 言_Python语言程序设计_红黑联盟读书频道
- 强大数定律与弱大数定律(民科解释)
- 正面管教php_我就这样走进正面管教
- 20172303 2017-2018-2 《程序设计与数据结构》第10周学习总结
- r矢量球坐标系旋度_球面,柱面坐标系下的散度与旋度
- leetcode记录-340-至多包含 K 个不同字符的最长子串-双指针
- pdf转换成word转换器在线
- 域控下发脚本_域控下发脚本,安装zabbix客户端
- 【英语阅读】纽约时报 | 紧急状态下的东京:夜生活仍在继续
热门文章
- 让云触手可及——微软云计算解决方案白皮书
- 微信小程序的三级分销-项目表格设计
- SQL server无法打开项 UNKNOWN\Components\929B2416EC4102B48A989956983ACF45\1F7B2B09C788E7644A0F08CA9C1D解决办法
- 在python3.X中执行python manage.py migrate命令的坑
- Golang 参数传递本质
- golang 判断map的键key是否存在
- go处理get、post请求返回的body数据
- FluentPDO备忘
- 七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.
- 编程基本功:谁改出的问题谁解,对不对?