网站首页  词典首页

请输入您要查询的论文:

 

标题 信号量在LINUX系统I2C驱动程序的应用
范文

    刘新

    【摘要】 在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.

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/2/11 9:58:12