深入浅出Linux设备驱动编程--引言
宋宝华 yesky
引言
《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设备驱动的调试也相当复杂。