驱动程序属于内核的一个部分。

准确的说是内核的一个组件。不包含驱动的内核也叫做内核,并且这也是我们常说的内核。内核要干的事情无非5件。

1,内存管理

2,虚拟文件系统

3,进程调度

4,网络接口

5,进程间通信

驱动更像是内核的扩展组件来帮助内核实现硬件的连接和操控。内核通过提供统一的驱动操作接口供用户层使用,驱动就是在这层统一的接口下实现硬件的操控的中间层。

首先,要理解操作系统的概念,操作系统是用户和硬件之间的一层媒介程序。不管是Linux还是Windows或者安卓、iOS,它的主要功能有两点:
1、有效管理硬件。
2、方便用户操作。

其次,Linux内核是Linux系统的核心程序,主要完成任务调度、内存管理、IO设备管理等等功能,主要目的是为了应用程序提供一个稳定良好的运行环境,这是一个基础。

再次,驱动程序是操作系统有效管理硬件的一个途径。 应用程序是方便用户操作提供的程序,比如Shell,Linux中的bash shell以及KDE、gnome等图形Shell都是应用程序。 你可以简单的理解为驱动程序实现了操作系统对硬件的有效管理,应用程序实现了操作系统方便用户操作的目的。

最后,从编程角度来看,Linux内核就是一个调用库,应用程序通过调用Linux提供的API函数来实现操作,Linux内核通过与驱动通信实现对硬件的有效管理。具体的编程细节,需要自己在实践编程中体会。这是一个整体的描述。

什么是驱动?

按照字面意思就是给一个东西动力,让它动起来,至于物体怎么动是有一定的逻辑规律在里面的;对于电学中的硬件驱动来说,电力提供了动力,但是驱动程序提供了操作物体的逻辑方法。

比如我们的LED路灯照明,电让我们的LED灯亮起来,但是里面的程序检测到时间的变化控制电路的导通和断开,这里面的驱动程序就叫LED Driver。

linux驱动LINUX DRIVER

linux驱动是linux内核驱动的全称,至于什么是linux内核,我们将在下面的linux体系结构中进行说明。

对于linux驱动的理解可以分为广义和狭义上两种。

linux驱动广义上是指操作硬件,让硬件工作起来的程序代码,这段代码就叫做硬件的驱动程序。

但是在裸机开发中我们也经常会听到裸机驱动,其实严格意义上来说,没有操作系统是没有驱动概念的,如果非要说裸机驱动的话,也是指裸机中操作硬件的那部分程序。

linux驱动狭义上是指操作系统中用来控制硬件的逻辑方法的那部分代码。

对于这个定义我们可以从以下两方面去进行理解:

①操作系统有很多种,windows有windows驱动,ios有ios驱动,android有android驱动,而我们学习的linux驱动则是针对linux操作系统平台。

linux驱动只是内核中的一部分,除了用来控制硬件的这部分外,还有文件系统,内存管理,内核调度等内容。

linux体系结构LINUX ARCHITECTURE

①、linux系统是分层的

android app调用内核驱动 手机内核驱动_android app调用内核驱动

Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。

内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。

分层设计的思想让程序间松耦合,有助于适配各种平台。

②驱动的上面是系统调用,下面是硬件。

android app调用内核驱动 手机内核驱动_运维_02

③驱动本身也是分层

Linux内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。

彼此之间的系统合作也是一级调用一级,系统庞大,这也是它难以学习的原因所在。

linux驱动的分类CLASSIFICATION OF LINUX DRIVERS

Linux驱动分为三个基础大类:字符设备驱动,块设备驱动,网络设备驱动。

①字符设备

字符设备提供的就是一种数据流。比如当你在键盘上敲入“yes”这个字符串的时候,键盘驱动程序会按照输入完全相同的顺序返回这个由这三个字符组成的数据流,首先是“y”,然后是“e”,然后是“s”,最终是文件的结束符(EOF),当没有人敲键盘的时候,键盘的字符流就是空的。

所以鼠标、键盘、显示器等都是典型的字符设备。

②块设备

而块设备的驱动可能要求读取磁盘上任意块的内容,然后又转去读别的块的内容,而被读取的块在磁盘上位置不一定要连续,所以说硬盘是可以被随机访问的,而不是以流的方式被访问,显然它就是一个块设备。

典型的块设备有:磁盘、U盘等。

③网络设备

网络设备驱动是特殊设备的驱动,它负责接收和发送帧数据,可能是物理帧,也可能是ip数据包,这些特性都由网络驱动决定。

典型的网络设备有:网卡、wifi、蓝牙等。

而在我们的linux驱动学习中,字符设备驱动占的比例比较大。

因为字符设备应用面广,在以后的开发中是使用最多的。对于块设备和网络设备要求修改或者定制的很少,一般都是厂家拿过来可以直接用的。

最后觉得前辈的开头句话说的很好,盲目追求技术实现,而忽略了整个生态环境的观察和基础理论铺垫,导致学完后似是而非,不能举一反三,遇到项目依然拿不出合理的解决方案。想要学习一门新技术,我们首先要对它有个清晰的了解,不能什么都不懂就开始往上面扑,就像很多人到庙里面就上香求佛祖保佑,可能根本都不知道这个佛是哪一路神仙。

http://t.zoukankan.com/KKKEr-p-10328195.html