linux嵌入式系统驱动程序的阻塞与异步
对于那些需要进程独占的设备,需要使用linux提供的阻塞编程。步骤如下:
1.在设备驱动程序中定义该设备的进程等待列多,并将其初始化
static wait_queue_head_t wait_queue;
init_waitqueue_head(&wait_queue);
2.在设备驱动程序的读操作中,调用函数wait_event 实现阻塞访问
int mixled_read(struct file * filp,char__user * buffer,size_t size,loff_t * ppos)
{
wait_event(wait_queue,Elmixled_dev->full_flag!=0);
elmixled_dev->full_flag = 0;
if(copy_to_user(buffer,Elmixled_dev->buf,read_lea))
{
printk(“copy to user err!”);
}
return lead_len;
}
在写操作中,调用wake_up函数唤醒该设备等待进程列队上的进程
int mixled_write(struct file * filp, const char__user * buffer,size_t size,loff_t * ppos)
{
int write_len =size;
if(copy_from_user(Elmixled_dev->buf,buffer,write_len))
{
printk(“copy from user err”);
}
elmixled_dev->full_flag = 1;
wake_up(&wait_queue);
return write_len;
}
对于异步驱动编程,需要做的步骤如下:
1.定义设备驱动程序的异步通知列队
struct fasync_struct * fasync_queue;
实现设备驱动程序的异步操作函数fasync,并在异步操作函数fasync中调用fasync_helper函数将当前进程添加到设备驱动程序的异步通知列队
int mixled_fasync(int fd,struct file * file ,int on)
{
printk(“enter mixled_fasync function”);
return fasync_helper(fd,file,on,&Elmixled_dev->fasync_queue);
}
struct file_operations mixled_ops={
…
.fasync = mixled_fasync
}
3.在设备驱动程序中,当检测到设备状态信息发生变化时,如数据到达或者按键被按下就需要通知应用程序,调用函数kill_fasync想应用程序发送异步通知消息
irqeturn_t mixled_isr(int irq,void * dev_id)
{
printk(“key interrupt take place”);
if(Elmixled_dev-》fasync_queue)
{
kill_fasync(&Elmixled_dev->fasync_queue,SIGIO,POLLMSG)
}
return IRQ_HANDLED;
}
4.在设备驱动的close函数中,调用mixled_fasync函数将当前进程从设备的异步通知列队中移除
mixled_fasync(-1,file,0)
linux嵌入式系统驱动程序的阻塞与异步的更多相关文章
- Linux嵌入式系统与硬件平台的关系
一. Linux嵌入式系统 操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口.它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合 ...
- ARM+LINUX嵌入式系统的终端显示中文乱码解决
前一段时间解决的一个问题,看起来是个小问题,实际解决这个问题却花了一个星期的晚上休息时间,记录分享一下. 问题描述: linux内核配置中NLS(native language support)已经选 ...
- linux嵌入式系统交叉开发环境
交叉开发的特点是使用交叉开发环境编译出目标机上可以运行的二进制程序. tool chain就是一整套的交叉开发工具,包括cross assembler.cross compiler. cross li ...
- 嵌入式系统Linux内核开发工程师必须掌握的三十道题(转)
嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师,试试看! 1) Linux中主要有哪几种内核 ...
- 嵌入式系统基础知识(一): 系统结构和嵌入式Linux
目录 一. 嵌入式体系结构 二. 开发过程中的分工 三. 嵌入式软件体系结构 四. 嵌入式Linux 一. 嵌入式体系结构 <嵌入式系统设计师教程>这本书的前三章脉络很清晰, 按照嵌入式系 ...
- 嵌入式Linux驱动学习之路(一)嵌入式系统的软硬件架构
硬件资料: 操作系统:(非虚拟机) zws@z-pc:~$ lsb_release -aNo LSB modules are available.Distributor ID: Ubuntu Desc ...
- 热烈庆祝华清远见2014嵌入式系统(Linux&Android)开发就业培训课程全面升级
近日,华清远见公开宣布:2014嵌入式系统 (Linux&Android)开发就业培训课程再次升级!据悉,华清远见如今已经持续10年,一直保持课程每年2次的更新的频率.华清远见的每 次课程更新 ...
- [看门狗]基于Linux的嵌入式系统全程喂狗策略
转自:http://blog.csdn.net/erickhuang1989/article/details/8721548 在嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入看门狗电路. ...
- [嵌入式开发入门]4412开发板从零建立Linux最小系统
本文转自iTOP-4412开发板实战教程书籍 http://www.topeetboard.com iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统. 最小L ...
随机推荐
- uva 11324
Problem B: The Largest Clique Given a directed graph G, consider the following transformation. First ...
- cf div2 238 D
D. Toy Sum time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- git的安装使用和代码自动部署
1.安装 http://www.cnblogs.com/sunada2005/archive/2013/06/06/3121098.html http://www.cnblogs.com/zhcncn ...
- AsyncTask和Handler对比
AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...
- 相对布局RelativeLayout
一. public class RelativeLayout extends ViewGroup java.lang.Object ↳ android.view.View ↳ an ...
- App接口设计1
http://blog.csdn.net/newjueqi/article/details/44062849 http://www.tuicool.com/articles/YNZBna http:/ ...
- poj 3228(二分+最大流)
题目链接:http://poj.org/problem?id=3228 思路:增设一个超级源点和一个超级汇点,源点与每一个gold相连,容量为gold数量,汇点与仓库相连,容量为仓库的容量,然后就是二 ...
- springmvc的mvc:view-controller标签
1.重定向 <mvc:view-controller path="/" view-name="redirect:/admin/index"/> 即如 ...
- 李洪强iOS开发之【Objective-C】07-自定义构造方法和description方法
知识回顾 在前面已经介绍了如何定义类和创建并初始化对象,比如有Student这个类 1.Student.h 1 #import <Foundation/Foundation.h> 2 3 ...
- Android 核心分析 之五基本空间划分
基本空间划分 Google给了我们一张系统架构图,在这张图上我们可以看到Android的大体框架组成. 11.jpg (175.6 KB, 下载次数: 0) 下载附 ...