Linux设备驱动程序开发基础.ppt

Linux设备驱动程序开发基础.ppt

ID:48055551

大小:244.50 KB

页数:46页

时间:2020-01-13

Linux设备驱动程序开发基础.ppt_第1页
Linux设备驱动程序开发基础.ppt_第2页
Linux设备驱动程序开发基础.ppt_第3页
Linux设备驱动程序开发基础.ppt_第4页
Linux设备驱动程序开发基础.ppt_第5页
资源描述:

《Linux设备驱动程序开发基础.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux设备驱动程序开发基础Linux字符设备驱动基础字符设备驱动实现框架用户空间和内核空间的数据传输同步、互斥、阻塞、睡眠机制字符设备字符设备是指在I/O传输过程中以字符为单位进行传输的设备,例如键盘,打印机等。请注意,以字符为单位并不一定意味着是以字节为单位,因为有的编码规则规定,1个字符占16比特,合2个字节。在Linux系统中,字符设备以特别文件方式在文件目录树中占据位置并拥有相应的i结点。i结点中的文件类型指明该文件是字符设备文件。可以使用与普通文件相同的文件操作命令对字符设备文件进行操作,例如打开、关闭

2、、读、写等  字符设备是最基本、最常用的设备。设备文件用户进程是通过设备文件来与实际的硬件打交道。每个设备文件都有其文件属性(c/b),表示是字符设备还是块设备。另外每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是次设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。MKDEV(ma,mi)设备驱动程序的功能设备驱动程序是内核的一部分,它完成以下的功能:1、对设备初始化和释放;2、把数据从内核传送到硬件和从硬件读取数据;3、读取应用程序传送给设备文件的数据和

3、回送应用程序请求的数据;4、检测和处理设备出现的错误。设备驱动调用关系应用程序驱动程序设备writereadioctlioctl字符设备驱动的接口字符设备提供给应用程序流控制接口有:open/close/read/write/ioctl等,添加一个字符设备驱动程序,实际上是给上述操作添加对应的代码,Linux对这些操作统一做了抽象。字符设备驱动核心:structfile_operationsstructfile_operations这个结构的每一个成员的名字都对应着一个系统调用。用户进程利用系统调用在对设备文件进行诸

4、如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是linux的设备驱动程序工作的基本原理。字符设备驱动的编写概括的说,字符设备驱动主要要做三件事:1、定义一个结构体staticstructfile_operations变量,其内定义一些设备的打开、关闭、读、写、控制函数;2、在结构体外分别实现结构体中定义的这些函数;3、向内核中注册或删除驱动模块。字符设备驱动实现框架(1)编写设备驱动程序的主要工作就是编写子函数,并填充

5、file_operations的各个域。一个最简单字符驱动程序,由下面5个函数和1个结构体就可组成。staticstructfile_operationsmy_fops={对文件操作结构体成员定义初始值…}字符设备驱动实现框架(2)staticintmy_open(structinode*inode,structfile*filp){设备打开时的操作…}staticintmy_release(structinode*inode,structfile*filp){设备关闭时的操作…}staticintmy_write(

6、structfile*file,constchar*buffer,size_tcount,loff_t*ppos){设备写入时的操作…}字符设备驱动实现框架(3)staticint__initmy_init(void){初始化硬件,注册设备,创建设备节点…}staticvoid__exitmy_exit(void){删除设备节点,注销设备…}用户态与内核态Linux运转在两种模式下,一种是用户态,另一种是内核态。内核态有较高的权限,可以控制处理器内存的映射和分配方式,访问外设空间和处理器状态寄存器,控制中断等。用户态

7、只能运行系统上的应用程序。驱动程序作为系统内核的一部分,工作在内核态。用户空间和内核空间的数据传输应用程序(user)和驱动程序(kernel)之间传送数据(指针)。用户空间->内核空间get_usercopy_from_user内核空间->用户空间put_usercopy_to_userget_user(x,p)函数功能从用户空间读取一个简单变量,可以使用get_user函数,该函数适用于简单数据类型,比如,char和int,但是像结构体这类较大的数据类型,必须使用copy_from_user函数参数x:内核空间整

8、型变量,用来存放从用户空间读取的值ptr:用户空间的地址copy_from_user(to,from,n)函数功能从用户空间拷贝一块数据到内核空间参数to:目标地址,这个地址是内核空间的地址;from:源地址,这个地址是用户空间的地址;n:将要拷贝的数据的字节数。put_user(x,p)函数功能把内核变量的值写入用户空间,该函数适用于简单数据

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

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

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