linux设备驱动的文件操作机制
2013-02-25 21:58
183 查看
1. 并发控制
1.1 起因
并发:多个执行单元同时被执行。竞态:并发的执行单元同时访问同一个共享资源。
举例:对称多处理器(SMP)竞态、单CPU内进程与抢占它的进程竞态、中断(硬中断、软中断、tasklet、底半部)与进程之间竞态。
1.2 控制方法
中断屏蔽原子操作
自旋锁
信号量
2. 中断机制
申请和释放中断使能和屏蔽中断
底半部机制
3. 阻塞机制
阻塞机制(等待队列)1. 定义等待队列头变量(全局);
2. open()中初始化等待队列头;
3. read()中进入休眠(插入队列、改变状态、进程调度);
4. irq_handle()唤醒进程;
5. read()执行完。
poll机制(轮询机制:多文件)
1. 定义一个等待队列头(全局);
2. open()初始化等待队列头;
3. poll()插入等待队列(挂入队列、查询是否有事件);
4. irq_handle()唤醒;
5. read();
4. 异步机制
4.1应用编程
1.将信号与信号处理函数绑定;2.实现信号处理函数;
3.设置信号的拥有者为本进程,将file结构体与pid绑定fcntl(fd,F_SETOWN,getpid());
4.设置为异步通知的模式。
4.2 驱动编程
1.定义一个Struct fasync_struct 结构体;2.fasync()设置fasync_struct结构体;
3.irq_handle()发信号。
5. 设备打开
fd =open("设备文件",权限),完成了如下任务:1.创建file和fd;
2.根据设备文件路径找到设备文件对应的inode结构体;
3.将inode结构体中的i_fop成员赋值给file结构体中的f_op成员;
f->f_op = fops_get(inode->i_fop)
4.调用file中的f_op成员中的open函数;
6.搜索内核中的一个哈希表,根据主设备号找到对应的cdev结构体;
7.将cdev结构体中的ops赋值给file中的f_op成员,
filp->f_op = fops_get(p->ops);
8.调用file中的f_op成员中的open函数,实际就是驱动人员写的xxx_open函数。
6. 设备读写
write(fd,&val,1) read(fd, &val, 1),完成了如下任务:1. 根据fd找到相应的file结构体;
2. 调用file中的f_op成员中的write/read函数,实际就是调用xxx_write函数。
7. 内核定时器
8. 内存映射
注:个人学习,不妥望指正,持续改善中。相关文章推荐
- Linux字符设备驱动(三)-文件操作函数实现
- linux驱动学习--第七天:第五章 Linux 文件系统与设备文件系统 之 linux文件操作
- 07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-按键驱动程序之异步通知机制+原子操作+互斥信号量+阻塞与非阻塞+定时器去抖
- Linux设备驱动之mmap设备操作(memdev.c字符设备驱动分析)
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- linux驱动开发--字符设备:设备轮询操作select/poll
- linux驱动学习——怎么自动创建设备文件
- 根据设备树文件初始化linux驱动
- 操作系统大型实验进展(6)-----Linux 内核文件系统与设备操作流程分析
- 很好转《Linux总线、设备与驱动》USB设备发现机制
- Linux驱动编程--字符设备文件注册
- Linux设备驱动之semaphore机制
- 【Linux高级驱动】linux设备驱动模型之平台设备驱动机制【转】
- 【Linux高级驱动】平台设备驱动机制的编程流程与编译进内核
- linux驱动开发--字符设备:原子操作
- linux 高级字符设备驱动 ioctl操作介绍 例程分析实现
- Linux 字符设备驱动开发基础(六)—— VFS 虚拟文件系统解析
- 例说linux内核与应用数据通信(三):读写内核设备驱动文件
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- Linux 内核驱动里对文件的操作