《Linux驱动开发概述.ppt》由会员分享linux驱动原理linux开发培训,可在线阅读linux驱动原理linux培训班,更多相关《Linux驱动开发概述.ppt(22页典藏版)》请在一课资料网上搜索。
1、第1章Linux驱动开发概述设备驱动程序是计算机硬件与应用程序的插口是软件系统与硬件系统沟通的桥梁若果没有设备驱动程序这么硬件设备就只是一堆废品没有一点的功能本章将对Linux驱动开发进行简略的概述使读者理解一些常见的概念11Linux设备驱动的基本概念本节对中断相关概念进行了简略的剖析并对中断进行了分类依据不同的中断类型写中断驱动程序的方式也不一样下边将主要介绍中断的基本概念和常见分类111设备驱动程序概述设备驱动程序DeviceDriver简称驱动程序Driver它是一个容许计算机软件ComputerSoftware与硬件Hardware

2、交互的程序这些程序构建了一个硬件与硬件或硬件与软件沟通的界面CPU经由显卡上的总线Bus或其它沟通子系统Subsystem与硬件产生联接这样的联接促使硬件设备Device之间的数据交换成为可能112设备驱动程序的作用设备驱动程序是一种可以使计算机和设备通讯的特殊程序可以说相当于硬件的插口操作系统只有通过这个插口能够控制硬件设备的工作如果某设备的驱动程序无法正确安装便不能正常工作正由于这个缘由驱动程序在系统中的所占的地位非常重要通常当操作系统安装完毕后首要的便是安装硬件设备的驱动程序113设备驱动的分类计算机系统的主要硬件由CPU储存器和外
3、部设备组成驱动程序的对象通常是储存器和外部设备随着芯片制造工艺的提升为了节省成本一般将好多原属于外部设备的控制器嵌入到CPU内部所以如今驱动程序应当支持CPU中的嵌入控制器Linux将这种设备分为3大类字符设备块设备网路设备12Linux操作系统与驱动的关系Linux操作系统与设备驱动之间的关系如图所示用户空间包括应用程序和系统调用两层应用程序通常依赖于函数库而函数库是由系统调用来编撰的所以应用程序间接地依赖于系统调用13Linux驱动程序开发Linux驱动程序的开发与应用程序的开发有很大的差异这种差异造成了编撰Linux设备驱动程序与编撰应用程序有本质

4、的区别所以对于应用程序的设计方法很难直接应用在驱动程序的开发上本节将对Linux驱动程序的开发进行简略的讲解131用户态和内核态Linux操作系统分为用户态和内核态用户态处理下层的软件工作内核态拿来管理用户态的程序完成用户态恳求的工作驱动程序与底层的硬件交互所以工作在内核态132模块机制模块是可以在运行时加入内核的代码这是Linux的一个挺好的特点这个特点使内核可以很容易的扩大或则缩小一方面扩大内核可以降低内核的功能另一方面缩小内核可以减少内核的大小133编撰设备驱动程序须要了解的知识Linux操作系统有三四百万行代码其中驱动程序代码就有四分之三
5、左右所以对于驱动开发者来说学习和编撰设备驱动程序都是一个漫长的过程在这个过程中读者应当把握如下的一些知识1驱动开发人员应当有良好的C语言基础2驱动开发人员应当有良好的硬件基础3驱动开发人员应当对Linux内核源代码有初步的了解4驱动开发人员应当有多任务程序设计的能力14编撰设备驱动程序的注意事项大部份程序员都比较熟悉应用程序的编撰并且对于驱动程序的编撰可能不是很熟悉关于应用程序的好多编程经验不能直接的应用于驱动程序的编撰中来下边给出编撰驱动程序的一些注意事项希望引发读者注意141应用程序开发与驱动程序开发的差别在Linux上的程序开发通常分为两种
6、一种是内核及驱动程序开发另一种是应用程序开发这两种开发种类对应Linux的两种状态分别是内核态和用户态内核态拿来管理用户态的程序完成用户态恳求的工作用户态处理下层的软件工作驱动程序与底层的硬件交互所以工作在内核态142GUNC开发驱动程序GUNC语言最开始起源于一个GUN计划GUN的意思是GUNisnotUNIXGUN计划开始于1984年这个计划的目的是开发一个类似UNIX而且软件自由的完整操作系统这个计划仍然进行直至Linus开发Linux操作系统时GNU计划早已开发下来了好多高质量的自由软件其中就包括知名的GCC编译器GCC编译器才能编译GUNC语
7、言Linus考虑到GUN计划的自由和免费所以选择了GCC编译器来编撰内核代码以后的好多开发者也使用这个编译器所以直至现今驱动开发人员也使用GUNC语言来开放驱动程序143不能使用C库来开发驱动程序与用户空间的应用程序不同内核不能调用标准的C函数库主要的缘由在于对于内核来说完整的C库太大了一个编译的内核大小可以是1M左右的字节而一个标准的C语言库大小可能操作5M字节这对于储存容量较小的嵌入式设备来说是不实用的缺乏标志C语言库并不是说驱动程序就只能做挺好的事情了144没有显存保护机制当一个用户应用程序因为编程错误企图访问一个非法的显存空间这么操作系统内

8、核会结束这个进程并返回错误码应用程序可以在操作系统内核的帮助下恢复过来并且应用程序并不会对操作系统内核有太大的影响并且假如当操作系统内核访问了一个非法的显存这么就有可能苹的诤说拇或则数据这将造成内核处于未知的状态内核会通过oops错误给用户一些提示并且这种提示都是不支持未能剖析的145小内核栈用户空间的程序可以从栈上分配大量的空间来储存变量甚至用栈储存巨大的数据结构或则字段都没问题之所以能这样做是由于应用程序是非常驻显存的它们可以动态的申请和释放所有可用的显存空间内核要求使用固定常驻的显存空间因而要求尽量少的占用常驻显存而尽量多的留出显存提供给用户程序
9、使用因而内核栈的宽度是固定大小的不可动态下降的32位机的内核栈是8KB64位机的内核栈是16KB146注重可移植性对于用户空间的应用程序来说可移植性仍然是一个重要的问题通常可移植性通过两种方法来实现一种方法是定义一套可移植的API之后对这套API在个这两个须要移植的平台上分别实现应用程序开发人员只要使用这套可移植的API就可以写出可移植的程序在嵌入式领域比较常见的API套件是QT另一种方法是使用类似JAVAactionscript等可移植到好多操作系统上的语言这种语言通常通过虚拟机来执行所以可以移植到好多平台上15Linux驱动的发展趋势随着嵌入式

10、技术的发展使用Linux的嵌入式设备也越来越多同样地工业上对Linux驱动的开发也越来越注重本节对Linux驱动的发展做简略的介绍151Linux驱动的发展Linux和嵌入式Linux软件在过去几年里早已越来越普遍的为IT业半导体公司嵌入式系统所认可和接受它早已成为一个可以代替谷歌的Windows和诸多传统的RTOS的重要的操作系统Linux内核和基本组件和工具已然是成熟的软件面向行业应用和设备的嵌入式Linux工具软件和嵌入式Linux操作系统平台是未来发展的必然趋势符合标准遵照开放是大势所趋人心所向嵌入式Linux也不例外152驱动的应用计算机系
11、统早已融入到了各行各业各个领域计算机系统在电子产品中无处不在从手机游戏机冰柜电视洗衣机等大型设备到车辆货轮列车客机等小型设备都有它的身影这种设备都须要驱动程序来使之运行可以说驱动程序的运用前景是十分广泛的每三天都有好多驱动程序须要去编撰所以驱动程序开发人员的前途是无比光明的153相关学习资源学习Linux设备驱动程序单单只是学习理论是不够的还须要手动动手来写各类设备的驱动程序写驱动程序除了须要读者的软件知识还须要读者的硬件知识在这儿推荐一些国外外优秀的驱动开发网站希望读者的学习有所帮助1Linux内核之旅网站16小结本章首先对Linux设备驱动程序的基本概念进行了详尽的述说而且述说了设备驱动程序的作用接着述说了设备驱动程序的分类特征与操作系统之间的关系等之后述说了驱动程序开发的一些重要知识和一些注意事项最后述说了Linux驱动程序的发展趋势通过本章的中学读者可以对Linux设备驱动程序的开发有一个概要的了解随着嵌入式设备的迅猛出现有越来越多的驱动程序须要程序员去编撰所以学习驱动程序的开发对个人的进步是十分有帮助的本章作为驱动程序开发的入门希望才能造成读者的学习兴趣
