linux驱动开发1之什么是驱动?

1.什么是驱动?

字面意思驱动指驱使一个东西,让它动起来。

2.什么是linux驱动

驱动的本质是电力驱动,而驱动代码只是给出了操作方法。

3.linux体系架构

分层思想

驱动的上面是系统调用API

驱动的下面是硬件

驱动自己本身也是分层的

linux驱动开发1之什么是驱动?

linux驱动开发1之什么是驱动?linux驱动开发1之什么是驱动?

4.linux的模块化设计

4.1微内核和宏内核(也说明了linux内核的紧耦合和松耦合的概念)

  1. 宏内核(又称为单内核):将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址空间。所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效。
  2. 微内核:功能被划分成独立的过程,过程间通过IPC(进程间通信)进行通信。模块化程度高,一个服务失效不会影响另外一个服务。典型如windows
  3. linux本质上是宏内核,但是又吸收了微内核的模块化特性,体现在2个层面。

4.2静态模块化

编译时功能可裁剪,特征是想要功能的裁剪改变必须要重新编译。

4.3动态模块化

zImage可以不重新编译烧录,甚至不关机重启就实现模块的安装和卸载。

5.linux设备驱动分类

5.1驱动分类

  1. 分3类:字符设备驱动、块设备驱动、网络设备驱动
  2. 分类原则:设备本身读写操作的特征差异

5.2三类驱动程序详细对比分析

linux驱动开发1之什么是驱动?

  1. 字符设备,准确的说应该叫“字节设备”软件操作设备时是以字节为单位进行的典型的如LCD、串口、LED、蜂鸣器、触摸屏······
  2. 块设备,块设备是相对于字符设备定义的,块设备被软件操作时是以块(多个字节构成的一个单位)为单位的。设备的块大小是设备本身设计时定义好的,软件是不能去更改的,不同设备的块大小可以不一样。常见的块设备都是存储类设备,如:硬盘、NandFlash、iNand、SD····
  3. 网络设备,网络设备是专为网卡设计的驱动模型,linux中网络设备驱动主要目的是为了支持API中socket相关的那些函数工作。

5.3为什么字符设备驱动最重要

  1. 常见大量设备都属于字符设备
  2. 举例说明非标准类型字符设备驱动

6.驱动程序的安全性要求

6.1驱动是内核的一部分

  1. 驱动已经成为内核中最庞大的组成部分
  2. 内核会直接以函数调用的方式调用驱动代码
  3. 驱动的动态安装和卸载都会“更改”内核

6.2驱动对内核的影响

  1. 驱动程序崩溃甚至会导致内核崩溃
  2. 驱动的效率会影响内核的整体效率
  3. 驱动的漏洞会造成内核安全漏洞

6.3常见驱动安全性问题

  1. 未初始化指针
  2. 恶意用户程序
  3. 缓冲区溢出
  4. 竞争状态