Linux 简介
Linux 驱动程序分类
三种驱动设备分类
字符设备(char)
实际上就是字节设备,对设备操作的读写操作是以字节为最小单位,如控制LED灯的亮灭,串口的读写,块设备(block)
实际是就是存储设备,其驱动操作的最小单位是块,对整个块进行操作,如HDD,Flash 都是以一个固定的Block大小进行读写,如512B等等。修改时需要读出整块到内存,对需要的地方进行修改后,再覆写整块网络设备(network)
是一套通用的接口,实际上已经包含在内核,无需开发
驱动的应用
- 常见的设备大多数为字符设备
- 非标准设备
实际上应用最多的,需要开发的就是字符设备,如对于外设的开发,如键盘(HID),或者一些用户自定义的外设,如FPGA和ARM的方案中,和FPGA的控制,读写等,就可以通过字符设备来把FPGA作为一个内核的设备节点,这里的FPGA控制就是典型的非标准设备
驱动程序的安全性
- 在Linux的源码中有进1/3的代码量都是属于驱动设备的代码,其实是一个很庞大的体系
- 内核通过函数调用的方式来调用驱动程序的代码
- 驱动是以模块的形式 装载 在内核之中
常见的内核漏洞
由于内核代码运行在 Ring0 运行级,所以驱动安全就是内核安全,之于Arm 就是特权模式(除了用户模式之外的六种)。
1. 未初始化指针
2. 缓冲区溢出
3. 竞态
4. 代码逻辑漏洞
开始着手
- C语言基础
- 硬件操作基础
- Linux基础
- 应用层编程基础