linux 2.6 驱动笔记(三)
驱动的并发与应用的并发实现一样,以信号量为例,修改基本字符驱动代码如下:
1. 增加sem定义
struct globalmem_dev{
struct cdev cdev; /*linux 2.6 内核表示一个字符设备结构体 */
unsigned char mem[];
struct semaphore sem; /* 信号量*/
};
2. 在模块初始化中初始化信号量
int globalmem_init(void){
//省略
cdev_init(&globalmem_devp->cdev, &globalmem_fops);
globalmem_devp->cdev.owner = THIS_MODULE;
int err = cdev_add(&globalmem_devp->cdev, devno, );
init_MUTEX(&globalmem_devp->sem); //初始化信号量
return result;
}
3. 在读写函数中增加对信号量的判断,如下:
static ssize_t globalmem_write(struct file *flip, const char __user *buf, size_t size, loff_t *ppos){
//略
struct globalmem_dev *dev = flip->private_data;
if(down_interruptible(&globalmem_devp->sem)){
return -ERESTARTSYS;
}
if(copy_from_user(dev->mem + p, buf, count)){
printk("copy_from_user error \n");
return -EFAULT;
}
*ppos += count;
ret = count;
up(&globalmem_devp->sem);
return ret;
linux 2.6 驱动笔记(三)的更多相关文章
- linux 2.6 驱动笔记(一)
本文作为linux 2.6 驱动笔记,记录环境搭建及linux基本内核模块编译加载. 环境搭建: 硬件:OK6410开发板 目标板操作系统:linux 2.6 交叉编译环境:windows 7 + v ...
- Linux系统运维笔记(三),设置IP和DNS
Linux系统运维笔记(三),设置IP和DNS 手工配置静态的IP地址 也就是手工配置IP地址.子网掩码.网关和DNS. vi /etc/sysconfig/network-scripts/ifcfg ...
- linux 2.6 驱动笔记(二)
字符设备驱动 linux 2.6的字符驱动由cdev结构体描述,具体参考globalmem例子,代码主要分以下几部分: 1. 定义一个字符类型设备驱动的结构体 struct globalmem_dev ...
- Linux下GPIO驱动(三) ----gpio_desc()的分析
上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...
- linux下i2c驱动笔记 转
1. 几个基本概念 1.1. 设备模型 由 总线(bus_type) + 设备(device) + 驱动(device_driver) 组成,在该模型下,所有的设备通过总线连接起来,即使有些设备没有连 ...
- linux 块设备驱动 (三)块设备驱动开发
一: 块设备驱动注册与注销 块设备驱动中的第1个工作通常是注册它们自己到内核,完成这个任务的函数是 register_blkdev(),其原型为:int register_blkdev(unsigne ...
- linux lcd设备驱动剖析三
上一节文章中详细地剖析了probe函数,但是从始至终都没有看到打开读写文件接口的操作函数,只看到了下面这个操作结构体 [cpp] view plain? static struct fb_ops s3 ...
- Linux System Programming 学习笔记(三) 标准缓冲I/O
1. partial block operations are inefficient. The operating system has to “fix up” your I/O by ensuri ...
- LINUX驱动笔记 目录
笔记参考了宋宝华老师的<Linux设备驱动开发详解:基于最新的Linux 4.0内核>以及韦东山老师的嵌入式驱动教程 笔记开发环境: 单板:第一章到第八章使用TINY4412-1611:第 ...
随机推荐
- Codeforces 586D. Phillip and Trains 搜索
D. Phillip and Trains time limit per test: 1 second memory limit per test :256 megabytes input: stan ...
- MVC中使用EF:排序,过滤,分页
原文链接:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging ...
- XE3随笔18:实例 - 解析 Google 关键字搜索排名
同上例类似, 通过 'http://clients1.google.cn/complete/search?&q=' + "关键字" 可以获取 Google 的关键字搜索排名 ...
- 将List转换为二维数组(result)
result的数据结构为List<Map<String,Object>> //将List转换为二维数组String[][] String[][] z = new String[ ...
- ZOJ3792_Romantic Value
给出图,使得两点无流量,剩余其他边的总容量与删除边数的比值. 要机智啊... 因为原图给的边数不超过1000,容量也不超过1000,可以这样把边的容量变为2000*c+1.这样跑出最大流后,最大流除以 ...
- ubuntu14.04设置terminal配色方案以配合使用vim的Solarized插件
在安装vim插件之前,首先安装Vundle插件,用来管理vim插件,安装方法查看Vundle在github上的指南.在安装vundle的时候出现了一个错误E117:unknown function v ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
- Web调用FastReport的配置问题
1.修改配置webconfig文件 IIS6: <system.web> <httpHandlers> <add path="FastReport.Export ...
- android技巧总结
技巧1. 在写布局文件时,有时不需要给控件指定text值,但是又想知道他的位置是否是自己想要他在的位置.这种情况只有在运行时给他指定text值才能确切地知道它显示的位置. 现在有一种方法可以实现,即利 ...
- 二叉搜索树、B树
二叉搜索树又叫二叉排序树. B树又可写为B-树,“B-树”种的“-”无区分意义. 此外,还有B+树,B*树.