《Linux内核修炼之道》 之 高效学习Linux驱动开发

下面仍然是之前5月份一次presentation的部分内容及讲义,不过当时的题目叫“驱动开发的方法论”,或许对大家有用吧。至于这几次讲座的视频貌似网上都能找到。

************************************************************************

前一篇我们谈到了如何高效学习Linux内核,现在我们开始另外一个话题,就是如何高效学习 linux 驱动开发。至于为什么会选择这样一个 topic ,主要是基于这样两个原因:

第一个原因是:目前几乎所有的驱动开发方面的参考书,内容结构都是先介绍介绍什么是 linux 驱动,它分为哪些种类,然后是各种类型设备的驱动程序的内容细节。大都是只注重各种驱动本身的细节,而没有站在一个全局整体的角度讲解一下驱动开发的方法。这样导致的后果就是,大多数的驱动开发者虽然可以正确的编写驱动程序,但往往都是只知其一不知其二,知其然而不知其所以然。

第二个原因是:目前很多驱动开发者,即使是已经有多年经验的开发者,在开发驱动的时候也就是填充填充 driver 的结构体,对于比较成熟的平台,就是网上找个类似的驱动修改一下,即使写十个百个千个驱动,也就是对某些硬件比较熟,遇到全新的芯片全新的平台就束手无策。应该说这样对驱动的理解是很有限的。这也是目前 linux 驱动开发领域的现状。

《Linux内核修炼之道》 之 高效学习Linux驱动开发

我们首先认识一下 linux 驱动的基本面,我们认识一个新事物的的第一件事就是了解它的一些基本信息,就像我们人与人之间互相认识首先也是通过个人的基本信息一样。

linux 驱动在本质上就是一种软件程序,上层软件可以在不用了解硬件特性的情况下,通过驱动提供的接口,和计算机硬件进行通信。

系统调用是内核和应用程序之间的接口,而驱动程序是内核和硬件之间的接口,也就是内核和硬件之间的桥梁。它为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。