Linux设备驱动程序学习笔记01:设备驱动程序简介

设备驱动程序(Device Driver)是一种可以使操作系统和设备通信的特殊程序。驱动程序硬件设备提供接口。操作系统只有通过这个接口,才能使用硬件设备且应用程序必须通过操作系统来使用硬件设备。他们之间的关系可以用下面的图来表示:

Linux设备驱动程序学习笔记01:设备驱动程序简介_第1张图片

Linux系统将设备分成3类:字符设备(character device)、块设备(block device)以及网络接口(network interface)。

字符设备是能够像字节流一样被访问的设备。字符设备驱动程序通常至少要实现open、close、read以及write系统调用。字符设备可以通过文件系统节点来访问。字符设备文件和普通文件之间的唯一差别在于对普通文件的访问可以前后移动访问位置,而大多数字符设备是一个只能顺序访问的数据通道。

块设备上的数据以块的形式存放。在Linux以及大多数Unix系统中,块设备以块为单位进行数据传输(每个块包含512字节或2的更高次幂的字节)。对用户而言块设备和字符设备没有差别,它们的区别仅仅在于内核同驱动程序之间的软件接口不一致。

网络接口是面向数据包的接收和发送而设计的,接口可以是硬件设备但也可能是个纯软件设备(如loopback)。由于不是面向流的所以它并不对应文件系统的节点。内核同网络设备驱动程序的通信完全不同于内核和字符以及块设备驱动之间的通信,内核调用一套和数据包传输相关的函数而不是read、write等。

一般来说,编写一个Linux设备驱动程序的大致流程如下:

(1)    查看原理图、数据手册,了解设备的操作方法。

(2)    将设备归类为相应的设备类型。

(3)    根据设备类型实现相应的系统接口函数。

(4)    根据情况实现并发控制,阻塞、中断等特性。

(5)    测试驱动程序并持续改进。

我们在编写驱动程序时应将注意力集中在硬件能提供什么样的功能,而不应该假设用户会怎么使用这些功能。这部分的相关论述大家可以看[1]中第一章中设备驱动程序的作用这一节的内容。


参考资料:

[1].《Linux设备驱动程序》第三版 Jonathan Corbet etc. 魏永明等译中国电力出版社

[2].《嵌入式Linux应用开发完全手册》韦东山编著人民邮电出版社

[3].《Linux设备驱动开发详解》第二版宋宝华 人民邮电出版社




你可能感兴趣的:(Linux)