Linux驱动入门

Linux 简介

Linux 驱动程序分类

三种驱动设备分类

  1. 字符设备(char)linux


    实际上就是字节设备,对设备操做的读写操做是以字节为最小单位,如控制LED灯的亮灭,串口的读写,
  2. 块设备(block)web


    实际是就是存储设备,其驱动操做的最小单位是块,对整个块进行操做,如HDD,Flash 都是以一个固定的Block大小进行读写,如512B等等。修改时须要读出整块到内存,对须要的地方进行修改后,再覆写整块
  3. 网络设备(network)编程


    是一套通用的接口,实际上已经包含在内核,无需开发

驱动的应用

  1. 常见的设备大多数为字符设备
  2. 非标准设备
    实际上应用最多的,须要开发的就是字符设备,如对于外设的开发,如键盘(HID),或者一些用户自定义的外设,如FPGA和ARM的方案中,和FPGA的控制,读写等,就能够经过字符设备来把FPGA做为一个内核的设备节点,这里的FPGA控制就是典型的非标准设备

驱动程序的安全性

  • 在Linux的源码中有进1/3的代码量都是属于驱动设备的代码,实际上是一个很庞大的体系
  • 内核经过函数调用的方式来调用驱动程序的代码
  • 驱动是以模块的形式 装载 在内核之中

常见的内核漏洞

因为内核代码运行在 Ring0 运行级,因此驱动安全就是内核安全,之于Arm 就是特权模式(除了用户模式以外的六种)。
1. 未初始化指针
2. 缓冲区溢出
3. 竞态
4. 代码逻辑漏洞安全

开始着手

  1. C语言基础
  2. 硬件操做基础
  3. Linux基础
  4. 应用层编程基础