linux设备驱动程序开发.ppt
《linux设备驱动程序开发.ppt》由会员分享,可在线阅读,更多相关《linux设备驱动程序开发.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 2007 CHINAEDALinux设备驱动程序开发 主讲:主讲:赵焕宇赵焕宇 Email: 2007 CHINAEDA认识目标板各设备型号及开发中注意事项驱动程序(BSP)在嵌入式系统中的重要性和所处位置Linux驱动程序的概念、驱动结构、对中断和内存的处理、设备驱动的初始化Linux下设备驱动程序开发框架和流程Linux下模块化驱动程序设计(动态加载)设备驱动加入Linux内核中实验:编写驱动程序框架+测试用例(字符型设备)两种初始化方式主要内容 2007 CHINAEDA目标板各设备介绍 2007 CHINAEDA设备开发中的注意事项了解清楚设备型号接口大小,详细阅读用户手册和硬件设计
2、规格说明书了解清楚电源的输出功率插拔接口的顺序,是否支持热插拔和带电插拔遇到问题要多一点细心,沉着冷静分析问题,作好笔记,分析问题的范围扩大,把每一个新 的想法都去试一试,有时就试出来了。善于利用网络资源 2007 CHINAEDABSP的重要性BSP:Board Support Package(板级支持包),介于硬件与操作系统之间一层,属于操作系统的一部分,所以同一体系结构下移植操作系统就是编写BSP过程。2007 CHINAEDA用户通过一组与具体设备无关的标准化的调用来完成相应的操作(如:open,write,read,close),同时完全隐蔽了设备的工作细节操作系统分为两层:用户态:
3、只能运行系统上的应用程序 内核态:权限高,处理内存的映射和分配,访问外设空间和处理器的特殊状态寄存器,用户空间的数据不能直接通过指针传给内核 在用户态和内核态之间传递数据(copy_from_user、copy_to_user、get_user、put_user)驱动程序是内核的一部分,可以使用中断、DMA等操作驱动程序提供访问硬件设备寄存器的函数开发一个性能可靠、可移植性好,可配置性好,规范化的BSP可以大在提高系统各方面性能BSP的重要性 2007 CHINAEDALinux驱动程序概念设备设备CPU并不是系统中唯一的智能设备,每个物理设备都拥有自己的控制器(键盘、鼠标和串行口),每个硬件
4、控制器都有各自的控制和状态寄存器(CSR)并且各不相同,这些CSR被用来启动和停止、初始化设备及对设备进行诊断,在Linux中管理硬件设备控制器的代码并不放置在每个应用程序中而是由内核统一管理。这些处理和管理硬件控制器的软件就是LinuxLinux设备驱动程序设备驱动程序。Linux核心设备驱动是一组运行在特权级上的内存驻留底层硬件处理共享库,它们负责管理各个设备。设备驱动程序的流程:设备初始化和释放把数据从内核送到硬件和从硬件读取数据读取应用程序传送给设备文件的数据和回送应用程序请求的数据检测和处理设备出现的错误 2007 CHINAEDALinux下设备驱动的共性LinuxLinux下的设
5、备驱动都有以下几方面特点:下的设备驱动都有以下几方面特点:核心代核心代码 设备驱动是内核的一部分,象内核中其它代码一样,出错将导致系统的严重损伤。一个编写不好的设备驱动甚至能使系统崩溃并导致文件系统的破坏和数据丢失。内内核接口核接口 设备驱动必须为Linux内核或者其从属子系统提供一个标准接口。内内核机制与服核机制与服务 设备驱动可以使用标准的内核服务如内存分配、中断发送和等待队列等。动态可加可加载 Linux设备驱动可以在内核模块发出加载请求时加载,同时在不再使用时卸载。这样内核能有效地利用系统资源。(insmod,rmmod)可配置可配置 Linux设备驱动可以和内核一起编译。当内核被编译
6、时,哪些内核被链入内核是可配置的。在系统启动时会由内核调用驱动程序初始化 2007 CHINAEDA设备驱动程序的分类字符设备字符设备无缓存,每次读写一个字符的设备当发出读/写请求时,实际的硬件I/O马上发生一般要包含open read write close ioctl等系统调用的实现块设备块设备通常是指诸如磁盘、内存、Flash等可以容纳文件系统的存储设备。块设备也是通过文件系统来访问,与字符设备的区别是:内核管理数据的方式不同,利用一块内存缓冲区,满足硬件要求时发生它允许象字符设备一样以字节流的方式来访问,也可一次传递任意多的字节。网络接口设备网络接口设备通常它指的是硬件设备,但有时也可
7、能是一个软件设备(如回环接口loopback),它们由内核中网络子系统驱动,负责发送和接收数据包。它们的数据传送往往不是面向流的,因此很难将它们映射到一个文件系统的节点上。2007 CHINAEDA每一个设备文件属性:主设备号(每一个设备文件属性:主设备号(majormajor)和次设备号和次设备号(minor)minor)主设备号和次设备号能够唯一地标识一个设备128(kernel V2.0以前),256(kernel v2.2 v2.4 v2.5)其中:0和255保留主设备号相同的设备使用相同的驱动程序(I8250),次设备号用于区分具体设备的不同硬件(com1,com2)动态获取主设备号
8、,MAJOR=0Linux下对设备号的分配请参考Documentation/devices.txt设备文件设备文件(mknodmknod)Linux使用设备文件来统一对设备的访问接口,将设备文件放在/dev/目录下设备的命名一般为设备文件名+数字或者字母表示的子类,例如/dev/hda1,/dev/hda2等Linux 2.4以后引入了设备文件系统(devfs)的概念,所有的设备文件作为一个可以挂装的文件系统,这样就可以被文件系统统一管理,从而设备文件就可以挂装到任何需要的地方。一般将主设备建立一个目录,再将具体的子设备文件建立在此目录下。例如,/dev/mtdblock0设备驱动程序的属性
9、2007 CHINAEDA在系统内部在系统内部,I/0I/0设备的存设备的存/取通过一组固定的入口点来进取通过一组固定的入口点来进行行,这组入口点是由每个设备的设备驱动程序提供的这组入口点是由每个设备的设备驱动程序提供的驱动程序使用的驱动程序使用的2 2个重要结构个重要结构struct filestruct file_operations(重点了解)设备驱动程序的结构 2007 CHINAEDAstructstruct file file设备驱动程序的结构 2007 CHINAEDAstructstruct file file数据结构数据结构file结构代表一个“打开的文件”。它有内核在ope
10、n时创建而且在close前做为参数传递给如何操作在设备上的函数。在文件关闭后,内核释放这个数据结构。一个“打开的文件”与由struct inode表示的“磁盘文件”有所不同定义位于include/fs.hstruct file结构与驱动相关的成员mode_t f_mode标识文件的读写权限loff_t f_pos当前读写位置unsigned int_f_flag文件标志,主要进行阻塞/非阻塞型操作时检查struct file_operation*f_op 文件操作的结构指针void*private_data驱动程序一般将它指向已经分配的数据,在跨系统调用时保存状态信息struct dentry
11、*f_dentry 文件对应的目录项结构设备驱动程序的结构 2007 CHINAEDAstructstruct file_operations file_operationsint(*lseek)(struct inode*inode,struct file*file,off_t off,int pos);int(*read)(struct inode*inode,struct file*file,char*buf,int count);int(*write)(struct inode*inode,struct file*file,const char*buf,int count);int(*
12、readdir)(struct inode*inode,struct file*file,struct dirent*dirent,int count);int(*select)(struct inode*inode,struct file*file,int sel_type,select_table*wait);int(*ioctl)(struct inode*inode,struct file*file,unsigned int cmd,unsigned int arg);int(*mmap)(void);int(*open)(struct inode*inode,struct file*
13、file);int(*release)(struct inode*inode,struct file*file);int(*fsync)(struct inode*inode,struct file*file);设备驱动程序的结构 2007 CHINAEDA设备驱动程序接口设备驱动程序接口(structstruct file_operations),file_operations),标记化方法:标记化方法:static static structstruct file_operations demo_fops=file_operations demo_fops=owner:THIS_MODUL
14、E,owner:THIS_MODULE,write:demo_write,write:demo_write,read:demo_read,read:demo_read,ioctlioctl:demo_:demo_ioctlioctl,open:demo_open,open:demo_open,release:demo_release,release:demo_release,NULL,NULL,;设备驱动程序的结构 2007 CHINAEDA设备驱动程序接口(设备驱动程序接口(structstruct file_operations file_operations)通常所说的设备驱动程序接口是
15、指struct file_operations,它的定义位于include/linux/fs.h中,初始化时注册到系统内部。常用操作lseek移动文件指针的位置,只能用于可以随机存取的设备read从设备中读取数据write向字符设备中写数据readdir 取得下一个目录入口点,只有与文件系统相关设备select进行选择操作.ioctl控制设备,实现除读写操作以外的其他控制命令mmap 设备的内容映射到地址空间,用块设备open打开设备并进行初始化release关闭设备并释放资源设备驱动程序的结构 2007 CHINAEDA中断是现代微处理器的一个重要功能Linux驱动程序中的中断处理函数#in
16、clude int request_irq(unsigned int irq,/硬件中断号 void(*handler)(int,void*,struct pt_regs*),/登记中断处理子程序 unsigned long flag,/确定快速(所有中断屏蔽)或慢速const char*dev_name,/设备名 void*dev_id);/申请时告诉系统的设备标识void free_irq(unsigned int irq,void*dev_id);/释放中断Polling方式收发数据Linux对中断的处理 2007 CHINAEDA内存分配也同样是系统核心部分Linux驱动程序申请和释放
17、内存不是malloc和free#include void*kmalloc(unsigned int len,int priority);/len为申请字节数,priority分配内存操作的优先级Void kfree(void*obj);/释放内存指针调试驱动程序时打印一些调试信息,通常使用printk同时会记录在文件syslog里面,用法和printf类似Linux对内存的处理 2007 CHINAEDA设备注册-设备驱动在初始化时向系统进行登记,以便系统适当的时候调用。Linux通过调用register_chrdev函数#include#includeint register_chrdev(
18、unsigned int major,const char*name,struct file_operations*fops);major:设备驱动向系统申请的主设备号,如果是0,则系统动态分配一个主设备号。name:设备名。fops:各个调用的入口点函数说明。此函数正确返回0,返回-EINVAL申请主设备号非法,返回-EBUSY申请的主设备号被其它设备正使用,如果动态分配主设备号返回主设备号。注册成功会出现在/proc/device文件里,每个设备在/dev目录中都有一个文件Linux设备驱动的初始化 2007 CHINAEDA设备卸载-设备驱动在卸载时对应的主设备号必须释放。Linux在c
19、leanup_module()函数下调用unregister_chrdev函数#include#includeint unregister_chrdev(unsigned int major,const char*name);主设备号major和设备名name。在系统中对比,如果不等返回-EINVAL卸载失败,major大于最大的设备号返回-EINVAL卸载失败。Linux设备驱动的初始化 2007 CHINAEDA设备驱动初始化函数主要完成的功能(1)对驱动程序管理的硬件进行必要的初始化对硬件寄存器进行设置,如:设置中断掩码,设置串口工作方式。(2)初始化设备驱动相关参数每个设备都要定义一个
20、设备变量,用以保存设备相关参数。(3)在内核中注册设备调用register_chrdev函数(4)注册中断如果设备需要IRQ支持,注册中断:request_irq函数 (5)其它初始化工作如:设备分配I/O,申请DMA通道等。Linux设备驱动的初始化 2007 CHINAEDALinux设备驱动的开发流程在进行嵌入式系统的开发,大部分工作量是为各种设备编写驱动程序,除非系统不使用操作系统,程序直接操纵硬件。Linux系统中,内核提供保护机制,用户不能直接访问硬件。Linux v2.0 v2.2 v2.4主要是驱动的增加根据设备的共性,操作系统提供给驱动程序的支持大致相同。重要特征如下(1)读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 设备 驱动程序 开发
限制150内