欢迎来到天天文库
浏览记录
ID:38225361
大小:185.25 KB
页数:4页
时间:2019-05-24
《基于Linux操作系统的设备驱动程序开发》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、http://www.elecfans.com电子发烧友http://bbs.elecfans.com电子技术论坛基于Linux操作系统的设备驱动程序开发钱晨,徐荣华,王钦若(广东工业大学罗克韦尔自动化实验室,广东广州510090)摘要:本文介绍了Linux系统的特点,阐述了在Linux操作系统下,对系统硬件的访问和开发驱动程序的方法,说明了设备驱动程序的结构和编写过程。关键词:Linux,操作系统,驱动程序中图分类号:TP316文献标识码:ATheDevelopmentofDeviceDriveronLinuxQianC
2、hen,XuRonghua,WangQinruo(GuangdongUniversityofTechnology,GuangdongProvince,GuangzhouCity,510090)Abstract:thispaperintroducesthefeatureofLinuxoperationsystem,anddemonstratesthemethodofdevelopingdevicedriversonLinux,thedriver’sstructureandprogramdevelopingprocess.Ke
3、ywords:Linux,operationsystem,devicedriver1.引言Linux是一个遵循POSIX标准的免费操作系统,具有BSD和SYSV的扩展特性。与其他操作系统相比,Linux有其自身的一些特点:多任务、多用户、多平台、使用分页技术的虚拟内存等。同时由于它源代码完全公开,用户可根据需要自己定制自己的操作系统,从而系统能够很好的满足用户的要求。它是免费的自由软件,用其构建的系统成本较低,而且Linux是单内核的操作系统,并可按要求进行任意剪裁,因此具有很好的实时性,很强的稳定性、嵌入性的操作系统,因
4、此越来越多的研究人员开始采用图1设备访问层次图Linux平台来开发自己的产品。3.驱动程序编写2.Linux下的硬件访问Linux是Unix操作系统的一种变种,在Linux下编写Linux系统中,在Linux用户态的程序不能直接对硬驱动程序的原理和思想完全类似于其他的Unix系统。在件进行访问。CPU并不是系统中唯一的智能设备,每个物Linux环境下设计驱动程序,思路简洁,操作方便,功能理设备都有自己的控制器,每个硬件控制器都有各自的控也很强大,但是支持函数少,只能依赖内核中的函数,有制状态寄存器(CSR)并且各不相同,这
5、些寄存器用来启些常用的操作要自己来编写。动、停止、初始化设备以及对设备进行诊断。在Linux中系统调用是操作系统内核和应用程序之间的接口,管理硬件设备控制的代码就是设备驱动程序。Linux内核设备驱动程序是操作系统内核和机器硬件之间的接口,设的设备管理是由一组运行在特权级上、驻留在内存中以及备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程对底层硬件进行处理的共享库的驱动程序来完成。序看来,硬件设备只是一个设备文件,应用程序可以像操设备管理的一个基本特征是设备处理的抽象性,即所作普通文件一样对硬件设备进行操作,设备驱动程序
6、是内有硬件设备都被看成普通文件,可以通过与操纵普通文件核的一部分,它完成以下的功能:对设备初始化和释放;相同的系统调用来打开、关闭、读取和写入设备。系统中数据从内核传送到硬件和从硬件读取数据;读取应用程序每个设备都用一种设备特殊文件来表示,例如系统中第一传送给设备文件的数据和回送应用程序请求的数据;检测个IDE硬盘被表示成/dev/hda.。图1表示了设备访问的层和处理设备出现的错误。次关系。Linux内核中虽然存在许多不同的设备驱动程序但http://www.elecfans.com电子发烧友http://bbs.ele
7、cfans.com电子技术论坛他们具有一些共同的特性,比如驱动程序为内核提供统一由一个结构来向系统进行说明,此结构定义为:的接口、驱动程序的执行是属于内核机制并且使用内核服#incude务、动态可加载等。structfile_operations{Linux硬件设备支持两个标准接口,块设备接口和字int(*lseek)(structinode*inode,structfile符设备接口,通过块(字符)设备接口存取的设备称为块*flip,off_toff,intpos);(字符)设备或称其具有块(字符
8、)设备接口。块设备接int(*read)(structinode*inode,struectfile口仅支持面向块的I/O操作,所有I/O操作都通过内核地*flip,char*buf,intcount);址空间中的I/O缓冲区进行,它可以支持几乎任意长度和int(*write)(structinode*
此文档下载收益归作者所有