APP下载

信号量在LINUX系统I2C驱动程序的应用

2017-05-02刘新

中国新通信 2017年6期
关键词:驱动程序

刘新

【摘要】 在LINUX中,设备驱动程序与磁盘文件相同,都是经过打开、读写数据、关闭等一系列过程,当硬件有数据时直接读取,无数据时等待,驱动程序不断查询。在LINUX中有信号量机制,本文讨论信号量在驱动程序中的应用。

【关键词】 嵌入式LINUX 信号量 驱动程序 I2C

一、引言

笔者在开发嵌入式LINUX系统I2C驱动,通过实验将信号机制运用到驱动程序中,实现了硬件中断请求的消息传递,从而提高软件运行效率。

二、异步通知技术

笔者查阅书籍,发现LINUX可以使用信号来处理事件,在设备驱动中也有异步通知SIGIO信号,当新数据到达时发送SIGIO信号通知上层程序读数据。异步通知只有一个SIGIO信号,当多个设备都发送该信号,用户进程无法区分,必须用poll或select函数来确定数据来源。笔者研究发现信号机制经过POSIX扩展后,用sigaction()可以传递文件句柄,用户进程就可区分信号来源了。

三、信号在I2C驱动的应用

3.1 I2C驱动信号接口

用户进程使用fcntl执行F_SETOWN,进程ID号就保存在file->f_owner中,执行F_SETFL在设备中置FASYNC标志,设备有新数据时发送一个SIGIO信号,该信号被存放在file->f_owner中。

3.2信号的安装

使用sigaction()安裝信号函数。该函数有三个参数,第一个为信号值,第二个是结构sigaction指针,第三个未用。

在结构sigaction中sa_sigaction是信号函数。该信号函数有三个参数,第一个为信号值,第二个是siginfo_t结构指针,第三个未用。在siginfo_t结构中,si_fd就是文件句柄。

结构sigaction的sa_flags中SA_SIGINFO标志位被设定表示附带的参数可以被传递到信号函数中。

四、测试

下面用两个I2C设备fd、fd1来测试信号在驱动程序的应用。

经测试,I2C驱动程序达到了实时中断的要求,互不干扰。

结语:笔者以I2C驱动程序为例,抛砖引玉,推广到其他驱动程序的编写上来,会使嵌入式LINUX代码更短,方法更简单,效率更高。

参 考 文 献

[1]LINU设备驱动程序.第二版.魏永明,骆刚,姜君译.北京:中国电力出版社.2002.11.

[2]Linux内核设计与实现.第一版.陈莉君译.北京:机械工出版社.2006.5.

[3]Linux程序设计.第一版.杨晓云,王建桥,杨涛等译.北京:机械工业出版社.2002.1.

猜你喜欢

驱动程序
用活兼容模式安装不兼容的打印机驱动程序
驱动升级管理维护一条龙
避免Windows系统更新反复安装显示驱动
方便直观改善Windows驱动程序管理
设备升级问题回退驱动解决
阻止Windows Update更新驱动程序
驱动光盘丢了不用愁 打印一体机驱动程序下载安装实战体验
重装系统,驱动程序的事别操心等
基于DSP的PCI驱动程序开发
妙用鼠标驱动