- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
s3c2410的字符型设备驱动程序设计
福建工程学院
课程设计报告
实验课题: s3c2410的字符型设备驱动程序设计
日期:2011年5月24号
实验原理:
1 Linux系统下驱动程序的相关概念:
Linux系统中,设备驱动程序是操作系统内核的重要组成部分,它与硬件设备之间建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样,对硬件设备进行打开(open)、关闭(close)、读写(read/write)等操作。通过分析和设计设备驱动程序,可以深入理解Linux系统和进行系统开发。Linux设备分为字符设备、块设备和网络设备。字符型设备驱动程序设计
Linux系统为每一个设备分配了一个主设备号和 次设备号,主设备号标识设备对应驱动程序 ,次设备号标识具体设备的实例。例如一块开发板上有2个串口终端 / dev/ tty0, / dev/ tty1 ,它们的主设备号都是4,次设备号分别为0和1。每一类设备使用的主设备号是独一无二的,系统增加一个驱动程序就要赋予它一个主设备号,这一赋值过程在驱动程序的初始化过程中进行。
2 设备驱动程序的组成
设备驱动在加载时首先需要调用入口函数 init module ( ) ,该函数完成设备驱动的初始化工作 ,比如寄 存器置位、结构体赋值等一系列工作,其中最重要的一个工作就是向内核注册该设备 ,字符设备调用函数register_chrdev 完成注册。注册成功后 ,该设备获得了系统分配或向系统申请的主设备号、自定义的次设备号,并建立起与设备文件的关联。设备驱动在卸载时需要回收相应的资源 ,将设备的响应寄存器值复位并从系统中注销该设备。系统调用部分则是对设备的 操作过程 , 比如 open、read、write、ioctl等操作。设备驱动程序可以分成以下 3个主要部分:
(1) 自动配置和初始化子程序。负责检测所需驱动的硬件设备是否存在以及是否能正常工作 ,这部分驱动程序仅在初始化时被调用一次。
(2) 服务 I/O 就是请求子程序,是驱动程序的上半部分,这部分是系统调用的结果。
中断服务程序又称驱动程序的下半部分,设备在 I/O请求结束或其他状态改变时产生中断。因为设备驱动程序一般支持同一类型的若干个设备 ,所以调用中断服务子程序时都带有一个或多个参数以唯一标识请求服务的设备。
3 字符设备驱动程序中重要的数据结构和函数
对于每个系统调用,驱动程序中都有一个与之对应的函数。对于字符设备驱动程序 ,这些函数集合在一个file_op erations类型的数据结构中,它定义了常见文件I/O 函数的入口.编写字符设备驱动程序就是为具体硬件的 file_ operations结构编写各个函数 ,大多数的驱动程序只是利用了其中的一部分 对于驱动程序中不提供的功能,把相应位置的值设为 NULL ) ,对于字符设备来说 ,要提供的主要入口有: open ( ) 、release ( ) 、read ( ) 、write( ) 、lseek ( ) 、ioctl ( )等。本课程设计中用到的主要有 open ( )、read ( )、write( )、release ( )函数。
int (*open)(struct inode*,struct file*); 该操作用来打开设备文件。
int (*release)(struct inode*,struct file*); 该操作用来释放文件结构。
ssize_t(*read)(structfile*,char_user*,size_t,loff_t*); 该操作用来从设备中读取数据。
ssize_t(*read)(structfile*,char_user*,size_t,loff_t*); 该操作发送数据给设备。
4 驱动程序的注册和卸载
驱动程序有一个初始化函数 ,在安装驱动程序时会调用它。在初始化函数中会将驱动程序的 file_operations与主设备号一起向内核进行注册。对字符设备使用如下函数进行注册:
int register_chrdev ( unsigned int major, const char* name, struct file_operations* fop s) ;
其中,major是为设备驱动程序向系统申请的主设备号,如果为 0则系统动态地分配 l个主设备号, name是设备名。fop s是 file_operation s对各个调用入口点的说明。此函数返回0表示成功;返回 - 1是表示出 错;返回 - E INVAL 表示申请的主设备号非法;返回- EBU SY表示所申请的主设备号正在被其他设备驱动程序使用。
模块在调用 rmm
您可能关注的文档
最近下载
- 关于十二矿优化劳动组织的调研报告.docx VIP
- 沪粤版九年级物理上册知识点整理.pdf VIP
- 关于十二矿优化劳动组织的调研报告.doc VIP
- 2025年财会类中级会计职称中级会计实务-中级会计实务参考题库含答案解析(5套试卷).docx VIP
- 旅游咨询项目创业计划书.pptx VIP
- 西师版数学六年级上册全册教案.pdf VIP
- 2025江西鹰潭市公安局面向社会招聘留置看护勤务辅警87人笔试备考试题及答案解析.docx VIP
- 浅析互联网金融平台的风险与监管——以蚂蚁金服为例.doc VIP
- 旅游咨询创业计划书.pptx VIP
- 【0181】46页PPT数字化建设项目总体规划蓝图(豪华版).pptx VIP
文档评论(0)