这本《Linux内核修炼之道》,虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到写上去的每段话能够让读者产生什么疑惑,然后也都会紧接着尽量的去进行解释清楚,中间的很多概念也有反复纠结过怎么解释能够更容易的理解,力求即使对于初学者也可以有很少阻碍的一气读完。同时我也把书中一部分自己的感悟抽出来整理了精华版,share出来。当然水平有限,错漏之处有发现而修订时遗漏的,也有尚没有发现的。这本书如果对您有用,乃我之幸事,如果无用,就在此先诚惶诚恐的向大家拜个不是了。
下面仍然是之前5月份一次presentation的部分内容及讲义,不过当时的题目叫“驱动开发的方法论”,或许对大家有用吧。至于这几次讲座的视频貌似网上都能找到。
相关阅读:《Linux内核修炼之道》 之 高效学习Linux内核
************************************************************************
前一篇我们谈到了如何高效学习Linux内核,现在我们开始另外一个话题,就是如何高效学习 linux 驱动开发。至于为什么会选择这样一个 topic ,主要是基于这样两个原因:
第一个原因是:目前几乎所有的驱动开发方面的参考书,内容结构都是先介绍介绍什么是 linux 驱动,它分为哪些种类,然后是各种类型设备的驱动程序的内容细节。大都是只注重各种驱动本身的细节,而没有站在一个全局整体的角度讲解一下驱动开发的方法。这样导致的后果就是,大多数的驱动开发者虽然可以正确的编写驱动程序,但往往都是只知其一不知其二,知其然而不知其所以然。
第二个原因是:目前很多驱动开发者,即使是已经有多年经验的开发者,在开发驱动的时候也就是填充填充 driver 的结构体,对于比较成熟的平台,就是网上找个类似的驱动修改一下,即使写十个百个千个驱动,也就是对某些硬件比较熟,遇到全新的芯片全新的平台就束手无策。应该说这样对驱动的理解是很有限的。这也是目前 linux 驱动开发领域的现状。
我们首先认识一下 linux 驱动的基本面,我们认识一个新事物的的第一件事就是了解它的一些基本信息,就像我们人与人之间互相认识首先也是通过个人的基本信息一样。
linux 驱动在本质上就是一种软件程序,上层软件可以在不用了解硬件特性的情况下,通过驱动提供的接口,和计算机硬件进行通信。
系统调用是内核和应用程序之间的接口,而驱动程序是内核和硬件之间的接口,也就是内核和硬件之间的桥梁。它为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。