第1章 Linux驱动开发概述.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第1章 Linux驱动开发概述 设备驱动程序是计算机硬件与应用程序的接口,是软件系统与硬件系统沟通的桥梁。如果没有设备驱动程序,那么硬件设备就只是一堆废铁,没有一点的功能。本章将对Linux驱动开发进行简要的概述,使读者理解一些常见的概念。 1.1 Linux设备驱动的基本概念 本节对中断相关概念进行了简要的分析,并对中断进行了分类。根据不同的中断类型,写中断驱动程序的方法也不一样。下面将主要介绍中断的基本概念和常见分类。 1.1.1 设备驱动程序概述 设备驱动程序(Device Driver),简称驱动程序(Driver)。它是一个允许计算机软件(Computer Software)与硬件(Hardware)交互的程序。这种程序建立了一个硬件与硬件,或硬件与软件沟通的界面。CPU经由主板上的总线(Bus)或其它沟通子系统(Subsystem)与硬件形成连接,这样的连接使得硬件设备(Device)之间的数据交换成为可能。 1.1.2 设备驱动程序的作用 设备驱动程序是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口。操作系统只有通过这个接口,才能控制硬件设备的工作。假如某设备的驱动程序未能正确安装,便不能正常工作。正因为这个原因,驱动程序在系统中的所占的地位十分重要。一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。 1.1.3 设备驱动的分类 计算机系统的主要硬件由CPU、存储器和外部设备组成。驱动程序的对象一般是存储器和外部设备。随着芯片制造工艺的提高,为了节约成本,通常将很多原属于外部设备的控制器嵌入到CPU内部。所以现在驱动程序应该支持CPU中的嵌入控制器。Linux将这些设备分为3大类:字符设备、块设备、网络设备。 1.2 Linux操作系统与驱动的关系 Linux操作系统与设备驱动之间的关系如图所示。用户空间包括应用程序和系统调用两层。应用程序一般依赖于函数库,而函数库是由系统调用来编写的,所以应用程序间接地依赖于系统调用。 1.3 Linux驱动程序开发 Linux驱动程序的开发与应用程序的开发有很大的差别。这些差别导致了编写Linux设备驱动程序与编写应用程序有本质的区别,所以对于应用程序的设计技巧很难直接应用在驱动程序的开发上。本节将对Linux驱动程序的开发进行简要的讲解。 1.3.1 用户态和内核态 Linux操作系统分为用户态和内核态。用户态处理上层的软件工作。内核态用来管理用户态的程序,完成用户态请求的工作。驱动程序与底层的硬件交互,所以工作在内核态。 1.3.2 模块机制 模块是可以在运行时加入内核的代码,这是Linux的一个很好的特性。这个特性使内核可以很容易的扩大或者缩小,一方面扩大内核可以增加内核的功能,另一方面缩小内核可以减小内核的大小。 1.3.3 编写设备驱动程序需要了解的知识 Linux操作系统有三四百万行代码,其中驱动程序代码就有四分之三左右。所以对于驱动开发者来说,学习和编写设备驱动程序都是一个漫长的过程。在这个过程中,读者应该掌握如下的一些知识: (1)驱动开发人员应该有良好的C语言基础。 (2)驱动开发人员应该有良好的硬件基础。 (3)驱动开发人员应该对Linux内核源代码有初步的了解。 (4)驱动开发人员应该有多任务程序设计的能力。 1.4 编写设备驱动程序的注意事项 大部分程序员都比较熟悉应用程序的编写,但是对于驱动程序的编写可能不是很熟悉。关于应用程序的很多编程经验不能直接的应用于驱动程序的编写中来。下面给出编写驱动程序的一些注意事项,希望引起读者注意。 1.4.1 应用程序开发与驱动程序开发的差异 在Linux上的程序开发一般分为两种,一种是内核及驱动程序开发,另一种是应用程序开发。这两种开发种类对应Linux的两种状态,分别是内核态和用户态。内核态用来管理用户态的程序,完成用户态请求的工作;用户态处理上层的软件工作。驱动程序与底层的硬件交互,所以工作在内核态。 1.4.2 GUN C开发驱动程序 GUN C语言最开始起源于一个GUN计划,GUN的意思是“GUN is not UNIX”。GUN计划开始于1984年,这个计划的目的是开发一个类似UNIX并且软件自由的完整操作系统。这个计划一直进行,直到Linus开发Linux操作系统时,GNU计划已经开发出来了很多高质量的自由软件。其中就包括著名的GCC编译器,GCC编译器能够编译GUN C语言。Linus考虑到GUN计划的自由和免费,所以选择了GCC编译器来编写内核代码,之后的很多开发者也使用这个编译器,所以直到现在,驱动开发人员也使用GUN C语言来开放驱动程序。 1.4.3 不能使用C库来开发驱动程序 与用户空间的应用程序不同,内核不能调用标准的C函数库,主要

文档评论(0)

nuvem + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档