1.1、理解驱动的概念
linux内核驱动。软件层面的驱动广义上就是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序。(本质上是电力提供了动力,而驱动程序使得硬件产生了固定时序或者说电信号而工作)
狭义上驱动程序就是专指操作系统中用来操控硬件的逻辑方法部分代码。
1.2、linux体系架构(分层思想)
(1)驱动的上面是系统调用API
(2)驱动的下面是硬件
(3)驱动自己本身也是分层的
1.3 微内核和宏内核
(1)宏内核(又称为单内核):将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址空间。所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效。
(2)微内核:功能被划分成独立的过程,过程间通过IPC进行通信。模块化程度高,一个服务失效不会影响另外一个服务。典型如windows
(3)linux:本质上是宏内核,但是又吸收了微内核的模块化特性,提现在2个层面
静态模块化:在编译时实现可裁剪,特征是想要功能裁剪改变必须重新编译
动态模块化:zImage可以不重新编译烧录,甚至可以不关机重启就实现模块的安装和卸载。
1.4.3、内核空间和用户空间
(1)内核空间:Linux中一部分核心软件独立于普通应用程序,包括驱动程序,运行在较高的特权级别上,他们驻留在被保护的内存空间,拥有访问硬件设备的所有权限。
(2)用户空间:其他应用程序在用户空间执行,这部分的应用程序只能看到允许他们使用的部分系统资源,并且不能使用某些特定的系统功能,不能直接访问硬件,如果特殊情况下需要对内核空间进行访问,也必须得到内核空间的授权方可。
内核空间和用户空间都是指虚拟空间,也就是虚拟地址。Linux不能直接访问物理地址,对于物理地址需要使用memremap或者ioremap转为虚拟地址后再访问。
1.4.linux设备驱动分类
1.4.1、驱动分类
(