s3c2410的字符型设备驱动程序设计.doc

s3c2410的字符型设备驱动程序设计.doc

ID:50812562

大小:245.50 KB

页数:10页

时间:2020-03-14

s3c2410的字符型设备驱动程序设计.doc_第1页
s3c2410的字符型设备驱动程序设计.doc_第2页
s3c2410的字符型设备驱动程序设计.doc_第3页
s3c2410的字符型设备驱动程序设计.doc_第4页
s3c2410的字符型设备驱动程序设计.doc_第5页
资源描述:

《s3c2410的字符型设备驱动程序设计.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、福建工程学院课程设计报告实验课题:s3c2410的字符型设备驱动程序设计指导老师:陈老师日期:2011年5月24号一、实验原理:1Linux系统下驱动程序的相关概念:Linux系统中,设备驱动程序是操作系统内核的重要组成部分,它与硬件设备之间建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样,对硬件设备进行打开(open)、关闭(close)、读写(read/write)等操作。通过分析和设计设备驱动程序,可以深入理解Linux系统和进行系统开发。Linux设备分为字符设备、块设备和网络设备。本课

2、程设计研究字符型设备驱动程序设计。Linux系统为每一个设备分配了一个主设备号和次设备号,主设备号标识设备对应驱动程序,次设备号标识具体设备的实例。例如一块开发板上有2个串口终端/dev/tty0,/dev/tty1,它们的主设备号都是4,次设备号分别为0和1。每一类设备使用的主设备号是独一无二的,系统增加一个驱动程序就要赋予它一个主设备号,这一赋值过程在驱动程序的初始化过程中进行。2 设备驱动程序的组成设备驱动在加载时首先需要调用入口函数initmodule(),该函数完成设备驱动的初始化工作,比如寄存器置

3、位、结构体赋值等一系列工作,其中最重要的一个工作就是向内核注册该设备,字符设备调用函数register_chrdev完成注册。注册成功后,该设备获得了系统分配或向系统申请的主设备号、自定义的次设备号,并建立起与设备文件的关联。设备驱动在卸载时需要回收相应的资源,将设备的响应寄存器值复位并从系统中注销该设备。系统调用部分则是对设备的操作过程,比如open、read、write、ioctl等操作。设备驱动程序可以分成以下3个主要部分:(1)自动配置和初始化子程序。负责检测所需驱动的硬件设备是否存在以及是否能正常工

4、作,这部分驱动程序仅在初始化时被调用一次。(2)服务I/O就是请求子程序,是驱动程序的上半部分,这部分是系统调用的结果。(3)中断服务程序又称驱动程序的下半部分,设备在I/O请求结束或其他状态改变时产生中断。因为设备驱动程序一般支持同一类型的若干个设备,所以调用中断服务子程序时都带有一个或多个参数以唯一标识请求服务的设备。3 字符设备驱动程序中重要的数据结构和函数对于每个系统调用,驱动程序中都有一个与之对应的函数。对于字符设备驱动程序,这些函数集合在一个file_operations类型的数据结构中,它定义了

5、常见文件I/O函数的入口.编写字符设备驱动程序就是为具体硬件的file_operations结构编写各个函数,大多数的驱动程序只是利用了其中的一部分对于驱动程序中不提供的功能,把相应位置的值设为NULL),对于字符设备来说,要提供的主要入口有:open()、release()、read()、write()、lseek()、ioctl()等。本课程设计中用到的主要有open()、read()、write()、release()函数。int(*open)(structinode*,structfile*);该操作

6、用来打开设备文件。int(*release)(structinode*,structfile*);该操作用来释放文件结构。ssize_t(*read)(structfile*,char_user*,size_t,loff_t*);该操作用来从设备中读取数据。ssize_t(*read)(structfile*,char_user*,size_t,loff_t*);该操作发送数据给设备。4 驱动程序的注册和卸载驱动程序有一个初始化函数,在安装驱动程序时会调用它。在初始化函数中会将驱动程序的file_operat

7、ions与主设备号一起向内核进行注册。对字符设备使用如下函数进行注册:intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);其中,major是为设备驱动程序向系统申请的主设备号,如果为0则系统动态地分配l个主设备号,name是设备名。fops是file_operations对各个调用入口点的说明。此函数返回0表示成功;返回-1是表示出错;返回-EINVAL表示申请的主设备号非法;返回-EBUSY表示所申请的

8、主设备号正在被其他设备驱动程序使用。模块在调用rmmod函数时被卸载,此时的入口点是cleanup_module函数或宏module_exit,并在其中完成对设备的注销。类似的,字符设备的卸载函数定义为:intunregister_chrdev(unsignedintmajor,constchar*name);二、实验目的:了解、掌握字符型驱动程序的设计过程、编译、加载以及测试过程,包括了解file

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。