1、驱动

驱动就是对底层硬件设备的操作进行封装,并向上层提供函数接口。

2、设备分类:

linux系统将设备分为3类:字符设备、块设备、网络设备。
(1)字符设备:指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。
(2)块设备: 指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等。
(3)网络设备: 网络设备可以是一个硬件设备,如网卡; 但也可以是一个纯粹的软件设备, 比如回环接口(lo).一个网络接口负责发送和接收数据报文。

3、驱动程序开发步骤

Linux 内核就是由各种驱动组成的,内核源码中有大约 85%是各种驱动程序的代码。内核中驱动程序种类齐全,可以在同类驱动的基础上进行修改以符合具体单板。
编写驱动程序的难点并不是硬件的具体操作,而是弄清楚现有驱动程序的框架,在这个框架中加入这个硬件。
一般来说,编写一个 linux 设备驱动程序的大致流程如下:
--- 查看原理图、数据手册,了解设备的操作方法;
--- 在内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始;
--- 实现驱动程序的初始化:比如向内核注册这个驱动程序,这样应用程序传入文件名时,内核才能找到相应的驱动程序;
--- 设计所要实现的操作,比如 open、close、read、write 等函数;
--- 实现中断服务(中断并不是每个设备驱动所必须的);
--- 编译该驱动程序到内核中,或者用 insmod 命令加载;
--- 测试驱动程序;