欢迎来到天天文库
浏览记录
ID:43362925
大小:1.23 MB
页数:41页
时间:2019-10-08
《linux设备驱动程序开发》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Linux设备驱动程序开发主讲:赵焕宇Email:zhycd168@hotmail.com认识目标板各设备型号及开发中注意事项驱动程序(BSP)在嵌入式系统中的重要性和所处位置Linux驱动程序的概念、驱动结构、对中断和内存的处理、设备驱动的初始化Linux下设备驱动程序开发框架和流程Linux下模块化驱动程序设计(动态加载)设备驱动加入Linux内核中实验:编写驱动程序框架+测试用例(字符型设备)两种初始化方式主要内容目标板各设备介绍设备开发中的注意事项了解清楚设备型号接口大小,详细阅读用户手册和硬件设计规
2、格说明书了解清楚电源的输出功率插拔接口的顺序,是否支持热插拔和带电插拔遇到问题要多一点细心,沉着冷静分析问题,作好笔记,分析问题的范围扩大,把每一个新的想法都去试一试,有时就试出来了。善于利用网络资源BSP的重要性BSP:BoardSupportPackage(板级支持包),介于硬件与操作系统之间一层,属于操作系统的一部分,所以同一体系结构下移植操作系统就是编写BSP过程。用户通过一组与具体设备无关的标准化的调用来完成相应的操作(如:open,write,read,close),同时完全隐蔽了设备的工作细节操
3、作系统分为两层:用户态:只能运行系统上的应用程序内核态:权限高,处理内存的映射和分配,访问外设空间和处理器的特殊状态寄存器,用户空间的数据不能直接通过指针传给内核在用户态和内核态之间传递数据(copy_from_user、copy_to_user、get_user、put_user)驱动程序是内核的一部分,可以使用中断、DMA等操作驱动程序提供访问硬件设备寄存器的函数开发一个性能可靠、可移植性好,可配置性好,规范化的BSP可以大在提高系统各方面性能BSP的重要性Linux驱动程序概念设备—CPU并不是系统中唯
4、一的智能设备,每个物理设备都拥有自己的控制器(键盘、鼠标和串行口),每个硬件控制器都有各自的控制和状态寄存器(CSR)并且各不相同,这些CSR被用来启动和停止、初始化设备及对设备进行诊断,在Linux中管理硬件设备控制器的代码并不放置在每个应用程序中而是由内核统一管理。这些处理和管理硬件控制器的软件就是Linux设备驱动程序。Linux核心设备驱动是一组运行在特权级上的内存驻留底层硬件处理共享库,它们负责管理各个设备。设备驱动程序的流程:设备初始化和释放把数据从内核送到硬件和从硬件读取数据读取应用程序传送
5、给设备文件的数据和回送应用程序请求的数据检测和处理设备出现的错误Linux下设备驱动的共性Linux下的设备驱动都有以下几方面特点:核心代码设备驱动是内核的一部分,象内核中其它代码一样,出错将导致系统的严重损伤。一个编写不好的设备驱动甚至能使系统崩溃并导致文件系统的破坏和数据丢失。内核接口设备驱动必须为Linux内核或者其从属子系统提供一个标准接口。内核机制与服务设备驱动可以使用标准的内核服务如内存分配、中断发送和等待队列等。动态可加载Linux设备驱动可以在内核模块发出加载请求时加载,同时在不再使用时卸载
6、。这样内核能有效地利用系统资源。(insmod,rmmod)可配置Linux设备驱动可以和内核一起编译。当内核被编译时,哪些内核被链入内核是可配置的。在系统启动时会由内核调用驱动程序初始化设备驱动程序的分类字符设备无缓存,每次读写一个字符的设备当发出读/写请求时,实际的硬件I/O马上发生一般要包含openreadwritecloseioctl等系统调用的实现块设备通常是指诸如磁盘、内存、Flash等可以容纳文件系统的存储设备。块设备也是通过文件系统来访问,与字符设备的区别是:内核管理数据的方式不同,利用一块内
7、存缓冲区,满足硬件要求时发生它允许象字符设备一样以字节流的方式来访问,也可一次传递任意多的字节。网络接口设备通常它指的是硬件设备,但有时也可能是一个软件设备(如回环接口loopback),它们由内核中网络子系统驱动,负责发送和接收数据包。它们的数据传送往往不是面向流的,因此很难将它们映射到一个文件系统的节点上。每一个设备文件属性:主设备号(major)和次设备号(minor)主设备号和次设备号能够唯一地标识一个设备128(kernelV2.0以前),256(kernelv2.2v2.4v2.5)其中:0和25
8、5保留主设备号相同的设备使用相同的驱动程序(I8250),次设备号用于区分具体设备的不同硬件(com1,com2)动态获取主设备号,MAJOR=0Linux下对设备号的分配请参考Documentation/devices.txt设备文件(mknod)Linux使用设备文件来统一对设备的访问接口,将设备文件放在/dev/目录下设备的命名一般为设备文件名+数字或者字母表示的子类,例如/dev/hda1,
此文档下载收益归作者所有