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

简介:


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

1.引言

ARM的嵌入式Linux移植体验》发表以来,笔者收到许多读者来信,他们对嵌入式Linux开发表现出了浓厚的兴趣。我们摘取其中的两封:
   你好,不知道怎么称呼你。就叫你技术大侠吧。
   我是一个在学校里教一些基础课的老师,一直没有在那方面做出点成绩。现在本人下决心想在嵌入式这块努点力,但一直不知道怎么下手。本来没有硬件基础,LINUX也才接触。希望大侠给条出路,指点一下从零开始应该走什么路比较好。
多谢!
                              xxx
 
   你好!
   首先,请原谅我的冒昧打扰!
   我是通过一个网站知道你的邮件地址的,我看过你的一篇关于LINUX的文章,很深入浅出的,由于以前我的相关知识比较薄弱,现在又从事这方面的工作(嵌入式系统的的硬件研发工作),所以时常感到力不从心,如果你有空,请给我介绍一点相关的书籍,或者给我E-MAIL一点您的相关资料或者您的学习心得好吗?
   我想知道如何写驱动,以及对LINUX内核有一个了解。。。
   向您的无私奉献表示感谢!
                           xxx
首先对读者的学习热情和强烈的求知欲表示敬意,基于读者对Linux设备驱动程序编写知识的需求和目前该类参考资料缺乏的现状,创作本系列文章。
目前,Linux软件工程师大致可分为两个层次:
1Linux应用软件工程师(Application Software Engineer):主要利用C库函数和Linux API进行应用软件的编写;
2Linux固件工程师(Firmware Engineer):主要进行BootloaderLinux的移植及Linux设备驱动程序的设计。
一般而言,固件工程师的要求要高于应用软件工程师的层次,而其中的Linux设备驱动编程又是Linux程序设计中比较复杂的部分,究其原因,主要包括如下几个方面:
1)设备驱动属于Linux内核的部分,编写Linux设备驱动需要有一定的Linux操作系统内核基础;
2)编写Linux设备驱动需要对硬件的原理有相当的了解,大多数情况下我们是针对一个特定的嵌入式硬件平台编写驱动的;
3Linux设备驱动中广泛涉及到多进程并发的同步、互斥等控制,容易出现bug
4)由于属于内核的一部分,Linux设备驱动的调试也相当复杂。
目前,市面上的Linux设备驱动程序参考书籍非常稀缺,少有的经典是由Linux社区的三位领导者Jonathan CorbetAlessandro RubiniGreg 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源代码),如下图:


 本文转自 21cnbao 51CTO博客,原文链接:http://blog.51cto.com/21cnbao/120106,如需转载请自行联系原作者



相关文章
|
1月前
|
Linux C语言
Linux c编程(20210608)
Linux c编程(20210608)
|
1月前
|
网络协议 Linux Python
Python网络编程基础(Socket编程)epoll在Linux下的使用
【4月更文挑战第12天】在上一节中,我们介绍了使用`select`模块来实现非阻塞IO的方法。然而,`select`模块在处理大量并发连接时可能会存在性能问题。在Linux系统中,`epoll`机制提供了更高效的IO多路复用方式,能够更好地处理大量并发连接。
|
13天前
|
Linux
【Linux系统编程】基础指令(二)(下)
【Linux系统编程】基础指令(二)
|
13天前
|
Linux C语言
【Linux系统编程】基础指令(二)(上)
【Linux系统编程】基础指令(二)
|
2天前
|
网络协议 Shell Linux
LabVIEW 在NI Linux实时设备上访问Shell
LabVIEW 在NI Linux实时设备上访问Shell
|
5天前
|
存储 算法 网络协议
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
12 0
|
5天前
|
Linux
linux驱动层输出dev_dbg打印信息
linux驱动层输出dev_dbg打印信息
10 0
|
13天前
|
存储 Unix Linux
【Linux系统编程】基础指令(三)
【Linux系统编程】基础指令(三)
|
13天前
|
Linux
【Linux系统编程】基础指令(一)(下)
【Linux系统编程】基础指令(一)
|
13天前
|
人工智能 Unix Linux
【Linux系统编程】基础指令(一)(上)
【Linux系统编程】基础指令(一)