深入浅出Linux设备驱动编程--引言

深入浅出 Linux 设备驱动编程--引言
宋宝华 [email protected] yesky

1.引言

ARM 的嵌入式 Linux 移植体验》发表以来,笔者 收到许多读者来信,他们对嵌入式 Linux 开发表现出了浓厚的兴趣。我们摘取其中的两封:
   你好,不知道怎么称呼你。就叫你技术大侠吧。
   我是一个在学校里教一些基础课的老师,一直没有在那方面做出点成绩。现在本人下决心想在嵌入式这块努点力,但一直不知道怎么下手。本来没有硬件基础,LINUX也才接触。希望大侠给条出路,指点一下从零开始应该走什么路比较好。
多谢!
                              xxx
 
   你好!
   首先,请原谅我的冒昧打扰!
   我是通过一个网站知道你的邮件地址的,我看过你的一篇关于LINUX的文章,很深入浅出的,由于以前我的相关知识比较薄弱,现在又从事这方面的工作(嵌入式系统的的硬件研发工作),所以时常感到力不从心,如果你有空,请给我介绍一点相关的书籍,或者给我E-MAIL一点您的相关资料或者您的学习心得好吗?
   我想知道如何写驱动,以及对LINUX内核有一个了解。。。
   向您的无私奉献表示感谢!
                           xxx
首先对读者的学习热情和强烈的求知欲表示敬意,基于读者对 Linux 设备驱动程序编写知识的需求和目前该类参考资料缺乏的现状,创作本系列文章。
目前, Linux 软件工程师大致可分为两个层次:
1 Linux 应用软件工程师( Application Software Engineer ):主要利用 C 库函数和 Linux API 进行应用软件的编写;
2 Linux 固件工程师( Firmware Engineer ):主要进行 Bootloader Linux 的移植及 Linux 设备驱动程序的设计。
一般而言,固件工程师的要求要高于应用软件工程师的层次,而其中的 Linux 设备驱动编程又是 Linux 程序设计中比较复杂的部分,究其原因,主要包括如下几个方面:
1 )设备驱动属于 Linux 内核的部分,编写 Linux 设备驱动需要有一定的 Linux 操作系统内核基础;
2 )编写 Linux 设备驱动需要对硬件的原理有相当的了解,大多数情况下我们是针对一个特定的嵌入式硬件平台编写驱动的;
3 Linux 设备驱动中广泛涉及到多进程并发的同步、互斥等控制,容易出现 bug
4 )由于属于内核的一部分, Linux 设备驱动的调试也相当复杂。
目前,市面上的 Linux 设备驱动程序参考书籍非常稀缺,少有的经典是由 Linux 社区的三位领导者 Jonathan Corbet Alessandro Rubini Greg Kroah-Hartman 编写的《 Linux Device Drivers 》(目前该书已经出版到第 3 版,中文译本由中国电力出版社出版)。该书将 Linux 设备驱动编写技术进行了较系统的展现,但是该书所列举实例的背景过于复杂,使得读者需要将过多的精力投放于对例子背景的理解上,很难完全集中精力于 Linux 驱动程序本身。往往需要将此书翻来覆去地研读许多遍,才能有较深的体会。
               
(《 Linux Device Drivers 》中英文版封面)
本文将仍然秉承《 Linux Device Drivers 》一书以实例为主的风格,但是实例的背景将非常简单,以求使读者能将集中精力于 Linux 设备驱动本身,理解 Linux 内核模块、 Linux 设备驱动的结构、 Linux 设备驱动中的并发控制等内容。另外,与《 Linux Device Drivers 》所不同的是,针对设备驱动的实例,本文还给出了用户态的程序来访问该设备,展现设备驱动的运行情况及用户态和内核态的交互。相信阅读完本文将为您领悟《 Linux Device Drivers 》一书中的内容打下很好的基础。
本文中的例程除引用的以外皆由笔者亲自调试通过,主要基于的内核版本为 Linux 2.4 ,例子要在其他内核上运行只需要做少量的修改。
构建本文例程运行平台的一个较好方法是:在 Windows 平台上安装 VMWare 虚拟机,并在 VMWare 虚拟机上安装 Red Hat 。注意安装的过程中应该选中“开发工具”和“内核开发”二项(如果本文的例程要在特定的嵌入式系统中运行,还应安装相应的交叉编译器,并包含相应的 Linux 源代码),如下图:

你可能感兴趣的:(linux,开发,驱动)