Linux设备驱动

Linux设备驱动

ID:38145175

大小:365.50 KB

页数:5页

时间:2019-05-21

Linux设备驱动_第1页
Linux设备驱动_第2页
Linux设备驱动_第3页
Linux设备驱动_第4页
Linux设备驱动_第5页
资源描述:

《Linux设备驱动》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一、设备驱动的分类Linux的一个重要特点就是将所有的设备都当做文件进行处理,这一类特殊文件就是设备文件,它们可以使用文件、I/O相关函数进行操作,这样就大大方便了对设备的处理。它通常在/dev下面存在一个对应的逻辑设备节点,这个节点以文件的形式存在1-1、字符设备驱动字符设备可以通过设备文件节点访问,它与普通文件之间的区别在于普通文件可以被随机访问(可以前后移动访问指针),而大多数字符设备只能提供顺序访问(但也有例外)1-2、块设备驱动块设备通常指一些需要以块为单位随机读写的设备,块设备也是通过文件节点来访问,它不仅可以提供随机访问,而且可以容纳文件系统(例如硬盘、闪

2、存等)。Linux可以使用户态程序像访问字符设备一样每次进行任意字节的操作,只是在内核态内部中的管理方式和内核提供的驱动接口上不同注解:在dev目录下执行ls-l命令,可以查看到已加载的设备驱动,能够通过首字母区分设备驱动类型,c表示字符设备,b表示块设备1-3、网络设备驱动内核和网络设备驱动程序之间的通信调用是一套数据包处理函数,完全不同于和字符设备驱动程序之间的通信(read、write等函数)二、设备号设备号是一个数字,它是设备的标志,一个设备文件(也就是设备节点)可以通过mknod命令来创建,其中指定了主设备号和次设备号2-1、主设备号主设备号表示设备的类型,与

3、一个确定的驱动程序对应,字符驱动程序编写时会指明自身的主设备号2-2、次设备号次设备号用于标明不同的属性,例如不同的使用方法、不同的位置、不同的操作等注解:可以通过ls-l命令查看dev目录下已加载的设备驱动的主设备号和次设备号,在日期之前,主次设备号不能大于255三、设备驱动结构Linux下的设备驱动程序是内核的一部分,运行在内核模式下,也就是说设备驱动程序为内核提供了一个I/O接口,用户使用这个接口实现对设备的操作3-1、设备控制器获得系统服务有两种方式:查询和中断3-2、设备服务子程序包含了所有与设备操作相关的处理代码注解:Linux设备驱动程序包含中断处理程序(

4、或查询方式)和设备服务子程序两部分四、设备驱动接口每种类型的驱动程序,不管是字符设备还是块设备都为内核提供相同的调用接口,因此内核能以相同的方式处理不同的设备,如下图4-1、驱动程序与操作系统内核的接口这是通过数据结构file_operations来完成的4-2、驱动程序与系统引导的接口这部分利用驱动程序对设备进行初始化4-3、驱动程序与设备的接口这部分描述了驱动程序如何与设备进行交互,这与具体设备密切相关一、设备驱动特点5-1、内核代码设备驱动程序是内核的一部分,如果驱动程序出错,则可能导致系统崩溃5-2、内核接口提供标准的内核接口,不得随意改动5-3、内核机制和服务

5、设备驱动程序使用一些标准的内核服务,如内存分配等5-4、可装载大多数的Linux操作系统设备驱动程序都可以在需要时装载进内核,在不需要时从内核中卸载5-5、可设置Linux操作系统设备驱动程序可以集成为内核的一部分,在制作时候可以选择编译成模块化还是集成到内核二、字符设备驱动编写模块在调用insmod命令时被加载,此时的入口点是init_module()函数,通常在该函数中完成设备的注册。同样,模块在调用rmmod命令时被卸载,此时的入口点是cleanup_module()函数注解:终端执行insmod和rmmod命令加载和卸载设备驱动时候,设备驱动通过执行注册解注册来

6、实现与内核的交互一、重要的数据结构7-1、structfile_operationsstructfile_operations是定义在中的数据结构,它定义了常见文件I/O函数的入口,数据结构成员是I/O函数注解:这是一个内核结构,不会出现在用户空间的程序中,系统调用函数通过内核,最终调用对应的structfile_operations结构的接口函数来实现的,例如,open()文件操作是通过调用对应文件的file_operations结构的open函数接口而被实现7-2、structinodestructinode结构提供了dev目录下设备节点的信

7、息一、设备驱动注册在Linux内核中使用structcdev结构来描述字符设备,在驱动程序中必须将已分配到的设备号以及设备操作接口(即为structfile_operations结构)赋予structcdev结构变量Step1、使用cdev_alloc()函数向系统申请分配structcdev结构,Step2、用cdev_init()函数初始化已分配到的结构并与file_operations结构关联起来Step3、调用cdev_add()函数将设备号与structcdev结构进行关联并向内核正式报告新设备的注册,这样新设备可以被用起来了所

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

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

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