深入浅出Linux设备驱动编程--引言<?XML:NAMESPACE PREFIX = O />
宋宝华 [email]21cnbao@21cn.com[/email] 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设备驱动的调试也相当复杂。
<?XML:NAMESPACE PREFIX = V />目前,市面上的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设备驱动编程--引言相关推荐

  1. linux 设备驱动阻塞,深入浅出:Linux设备驱动中的阻塞和非阻塞I/O

    今天写的是Linux设备驱动中的阻塞和非阻塞I/0,何谓阻塞与非阻塞I/O?简单来说就是对I/O操作的两种不同的方式,驱动程序可以灵活的支持用户空间对设备的这两种访问方式. 一.基本概念: 阻塞操作 ...

  2. Linux设备驱动编程第三版-笔记

    第1章 设备驱动简介 1.1 驱动程序的角色 机制:提供什么能力. 策略:如何使用这些能力. 1.2. 划分内核 内核的角色可以划分:     一:进程管理 二:内存管理 三:文件系统 四:设备控制 ...

  3. linux 设备驱动编程

    驱动 目 录 驱动 I/O端口 from smth 基本结构 驱动程序 具体实现 PCI loopback Sis 900 ISA总线DMA的实现 驱动     Linux系统支持三种类型的硬件设备: ...

  4. 《言简意赅之Linux设备驱动编程》 前言

    linux 内核与驱动开发是一门很深的学问,主要是由于覆盖知识面较广.内核架构设计层级较深.软硬件知识要兼具.因此自己在学习理解时会经常遇到某一章节需要反复阅读理解多次.所以,我想用一种言简意赅的方式 ...

  5. linux驱动基础开发0——linux 设备驱动概述-转

    目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer):       主要利用C库函数和Linux API进行应用 ...

  6. 《Linux设备驱动开发详解(第2版)》隆重出版

    Linux设备驱动开发详解(第2版)(前一版狂销3万册,畅销书最新升级) [新品] 点击看大图     基本信息 * 作者: 宋宝华       * 出版社:人民邮电出版社     * ISBN:97 ...

  7. Linux设备驱动开发详解-Note(5)---Linux 内核及内核编程(1)

    Linux 内核及内核编程(1) 成于坚持,败于止步 Linux 2.6 内核的特点 Linux 2.6 相对于 Linux 2.4 有相当大的改进,主要体现在如下几个方面. 1.新的调度器 2.6 ...

  8. linux设备驱动,tty串口编程 如何查看linux下串口是否可用?串口名称等

    如何查看linux下串口是否可用?串口名称等? http://zhidao.baidu.com/question/419148559.html 查看串口是否可用,可以对串口发送数据比如对com1口,e ...

  9. Linux设备驱动开发详解【三】_Linux 内核及内核编程

    本文简介 由于 Linux 驱动编程本质属于 Linux 内核编程,因此有必要掌握 Linux 内核及内核编程的基础知识.         3.1-3.2 节讲解 Linux 内核的演变及 Linux ...

  10. (二)Linux设备驱动的模块化编程

    本系列导航 (一)初识Linux驱动 (二)Linux设备驱动的模块化编程 (三)写一个完整的Linux驱动程序访问硬件并写应用程序进行测试 (四)Linux设备驱动之多个同类设备共用一套驱动 (五) ...

最新文章

  1. ActiveMQ消息存储持久化
  2. Windows Server 2003 IIS 使用 Excel.Application
  3. 【Tools】Linux远程拷贝工具(WinSCP)
  4. 骑士游历问题问题_骑士步行问题
  5. [html] HTML5如何监听video的全屏和退出全屏?
  6. 【面试】c++单例模式
  7. 增量式pid调节方式有何优点_增量式pid和位置式pid相比各有什么优缺点
  8. 分布式团队_我们说的意思是:我们是一个分布式优先团队
  9. Matlab常用函数:rand,randi和randn区别
  10. ubuntu 英伟达显卡驱动异常
  11. logrotate 切割 nginx php mysql 日志
  12. jbig java_jbig2 Java Develop 238万源代码下载- www.pudn.com
  13. PLC状态机编程第六篇-优化PLC程序生成
  14. 免费批量化音频切割软件 AutoVoiceCut
  15. SXT:聚合与组合的理解
  16. Linux自动化运维部署+运维
  17. Xcode The 'Apple Push Notification' feature is only available to users enrolled in Apple Develo.
  18. 流光溢彩PCTV[WLED]
  19. scrapy-splash安装使用
  20. 大型网络游戏服务器要具备什么条件

热门文章

  1. 软件测试技术体系-专业术语
  2. 疫情防控的“第二战场” | 凌云时刻
  3. 【图像增强】基于matlab拉氏滤波图像质量提升【含Matlab源码 488期】
  4. 【图像处理】基于matlab GUI图像处理(编辑+分析+调整+平滑+锐化+小波变换)【含Matlab源码 207期】
  5. 【基础教程】基于matlab疫情防护动图制作【含Matlab源码 028期】
  6. BP算法和RNN_RNN/LSTM BPTT详细推导以及梯度消失问题分析
  7. C++中指针运算符(*)和数组索引符([])的优先级。指针数组及数组指针
  8. mysql引擎接口_Mysql存储引擎MyISAM和InnoDB
  9. 计算机网络-Postman测试http的get和post方法
  10. python:np.vstack, np.hstack