第一章 设备驱动简介

       以Linux为首的免费操作系统的诸多优点之一是它们的内部是开放可见的。操作系统曾今是一个黑暗且神秘的境界,它的代码只有少数程序员知晓,然而现在,它已经能够被任何具备必要技能(当然是指计算机知识)的人来检查,理解,甚至是修改。Linux让操作系统更加的民主化。Linux依然是一个巨大而且复杂的代码机构,然而,想成为内核hacker的人需要一个入口点,这个入口点能够帮助他们进入代码的内部而不被代码的复杂性压倒。通常情况下,设备驱动就是这个入口点。

        设备驱动在Linux内核里扮演者一个特殊的角色。他们是特殊的“黑箱子“,使一个特定的硬件响应一个定义良好的内部编程接口;它们完全隐藏了设备工作的细节。用户的活动通过一套标准化的调用来进行, 这些调用与具体的驱动是独立的;设备驱动的角色就是将这些调用映射到作用于实际硬件的具体设备的相关的操作上。这个编程接口让驱动能够与内核的其他部分分开建立,并且再需要的时候再“插入”进来。这种模块化的方式让Linux驱动更易于编写,于是乎目前已经有几百个Linux驱动可供使用了。

       之所以对于编写Linux设备驱动这么有兴趣,还是有很多原因的。新的硬件设备的更迭速率(之快)保证了设备驱动编写者在可预知的未来是忙碌的(意思就是说只要有新的硬件出现,就会有新的设备驱动要写)。有些人可能需要通过了解设备驱动来更加理解他们所感兴趣的特定的硬件设备。硬件供应商可以通过为他们的产品开发开发Linux驱动来把大量的且在不断增在的Linux使用者变为他们的潜在用户。还有,Linux的开发源代码特性意味着只要驱动编写者同意,这个驱动程序就能够快速的散布到数百万用户。

        这本书教你如何编写自己的设备驱动程序,以及如何使用内核相关的部分。我们已经采取了一种独立于设备(设备无关化)的方法;这个编程技术和接口在任何时候都不会捆绑到特定的硬件设备。每一个硬件设备都是不同的;作为一个驱动编写者,你需要相当的了解自己的设备。但是对于所有硬件设备来说,大部分原则和基础知识是一样的。本书无法教你关于你的设备的东西,但是它会教你关于让你的设备工作的一些通用知识。

       在你学习编写驱动的时候,你会发现很多关于Linux内核的部分;这也许会帮助你理解你的机器是如何运行,以及你的程序运行总是没有预想的快的原因。我们会逐步的接触新的概念,从最简单的驱动开始并学会建立它们;每一个新的概念都会伴有示例程序,当然,这些示例程序时不需要特定的硬件来测试的。

这一章都不会编写代码。然而,我们介绍了一些关于Linux内核的背景知识,直到我们开始编写程序的时候,你就会发现知道这些背景知识是多么的让人兴奋。

———————————分割线——————

总之,设备驱动程序的作用就是让硬件抽象化和标准化,这样才能便于上层的调用,让操作系统直接与硬件打交道显然不显示。随着驱动的标准化,硬件也在走向标准化了,想想那些即插即用的摄像头和万能网卡驱动..

在编写驱动程序的时候,有一些原则是要铭记在心的:“write kernel code to access the hardware, but don’t force particular policies on the user, since different users have different needs.”  驱动程序只提供能力,如何使用能力是应用程序和用户说了算的。

posted @ 2011-07-25 19:54  自由泳的青蛙  阅读(447)  评论(0编辑  收藏  举报