《精通Linux设备驱动程序开发》中文版-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

《精通Linux设备驱动程序开发》中文版

简介:
http://www.china-pub.com/196419

精通Linux 设备驱动程序开发





shupi.jpg

基本信息

内容简介

本书是Linux 设备驱动程序开发领域的权威著作。全书基于2.6 内核,不仅透彻讲解了基本概念和技术,更深入探讨了其他书没有涵盖或浅尝辄止的许多重要主题和关键难点,如PCMCIA、I2C 和USB 等外部总线以及视频、音频、无线连网和闪存等驱动程序的开发,并讲解了相关的内核源码文件,给出了完整的开发实例。
本书适合中高级Linux 开发人员阅读。 

作译者

本书提供作译者介绍

Sreekrishnan Venkateswaran 世界顶级Linux开发技术专家。在IBM工作多年,有丰富的嵌入式Linux和驱动程序开发经验,曾经将Linux移植到了手表、音乐播放器、VoIP 电话、心脏起搏器以及远程门诊监控系统等设备上。目前负责IBM印度公司的嵌入式解决方案组。他曾担任Linux Magazine的特邀编辑,主持内核技术专栏。
.. << 查看详细

目录

第1章 引言 1 
1.1 演进 1 
1.2 GNU Copyleft 2 
1.3 kernel.org 2 
1.4 邮件列表和论坛 3 
1.5 Linux发行版 3 
1.6 查看源代码 4 
1.7 编译内核 7 
1.8 可加载的模块 8 
1.9 整装待发 9 
第2章 内核 11 
2.1 启动过程 11 
2.1.1 BIOS-provided physical RAM map 12 
2.1.2 758MB LOWMEM available 14 
2.1.3 Kernel command line: ro 
root=/dev/hda1 14 
2.1.4 Calibrating delay...1197.46BogoMIPS (lpj=2394935) 15 
2.1.5 Checking HLT instruction 16 
2.1.6 NET: Registered protocol family 2 17 
2.1.7 Freeing initrd memory: 387k freed 17 

前言

20世纪90年代末,我们IBM的一群同事将Linux内核移植到了一种智能手表上。目标设备虽然微不足道,但是移植Linux的任务却相当艰巨。在当 时,内核中还不存在MTD(Memory Technology Device,内存技术设备)子系统,这意味着为了让文件系统能够运行在这种手表的闪存中,我们不得不从头开发必要的存储驱动程序。由于当时内核的输入事 件驱动程序接口尚未诞生,因此手表的触摸屏与用户应用程序的接口非常复杂。让X Windows运行在手表的LCD上十分困难,因为X Windows和帧缓冲设备驱动程序搭配得并不好。如果你戴着一块防水的Linux智能手表,却不能躺在浴缸里实时获得股票行情,那么这块手表还有什么用 呢?Linux几年前就已集成了蓝牙技术,而当时我们却花费了数月的时间将一种专有的蓝牙协议栈移植到手表上,从而使得这种手表可以联上因特网。电源管理 系统虽然只能从手表的电池中多“榨出”短短几个小时时间,但也算够意思了;实际上,为了解决这个棘手的问题,我们也没少花心思。那时候,Linux红外项 目Linux-Infrared还不稳定,而为了使用红外键盘输入数据,我们不得不与其协议栈小心翼翼地周旋。最后,由于当时还没有能应用于消费类电子产 品的成型的编译器发行版,我们也只能自己编个编译器,并交叉编译出一个紧凑的应用程序集。 
时光飞逝,当年的小企鹅已经成长为一名健壮的少年。过去我们编写了成千上万行代码并耗时一年完成的任务,若采用现在的内核,只需要几天就可以完成。但是,要成为一名能巧妙地解决多种问题的高级内核工程师,就必须理解今天的Linux内核提供的各种功能和设施。 
关于本书 
在Linux内核源代码树提供的各个子系统中,drivers/目录是其中最大的一个分支,它比其他子系统大数倍。随着各种新技术的广泛应用,内核中新的设备驱动程序的开发工作正在稳步加速。最新的Linux内核支持多达70余种设备驱动程序。 
本书主要讲解如何编写Linux设备驱动程序,介绍了目前内核所支持的主要设备类型的设计与开发,其中包括当年我在将Linux移植到手表中时未遇到的设 备。本书在讲解每类设备驱动程序的时候,都会先介绍与该驱动程序相关的技术,接着给出一个实际的开发例子,最后列出相关的内核源代码文件。在介绍 Linux设备驱动程序之前,本书先介绍了内核以及Linux 2.6的重要特性,重点介绍了设备驱动程序编写者感兴趣的内核知识。 
读者对象 
本书面向渴望在Linux内核上开发新设备驱动程序的中级程序员。要阅读本书,读者需要具备与操作系统相关的基本概念。比如,要知道什么是系统调用,理解 为什么在内核开发中需要关注并发问题。本书假定读者已经下载了Linux,浏览过Linux内核源代码,并至少浏览过一些相关的文档。另外,读者必须能非 常熟练地使用C语言。 
各章概述 
前4章为阅读本书其他部分打下了基础,接下来的16章讨论了不同类型的Linux设备驱动程序,之后的第21章描述了设备驱动程序的调试技术,第22章讲 解了维护和交付设备驱动程序的相关事宜,最后一章给出了当接到一个新设备驱动程序开发任务的时候,要首先查验的项目清单。 
第1章是引言,简单介绍了Linux系统,讲解了下载内核源代码、进行小的代码修改以及建立可启动的Linux内核映像。 
第2章引导读者轻松地进入Linux内核的内部结构,讲解了一些必要的内核概念。首先讲述了内核的启动进程,接下来描述了与驱动程序开发相关的内核API,譬如内核定时器、并发管理以及内存分配等。 
第3章讲解了对驱动程序开发有用的一系列内核API。首先介绍了内核线程(它提供了一种在内核空间运行后台任务的能力),接下来讲解了一系列的辅助 API(如链表、工作队列、完成函数、通知链等)。这些辅助API能简化代码,剔除内核中的冗余,有助于内核的长期维护。 
第4章为掌握Linux设备驱动程序开发艺术打基础。这一章首先呈现一般的PC兼容系统和嵌入式设备的体系结构的鸟瞰图,介绍了设备和驱动程序,并讲解了中断处理和内核设备模型等基本的驱动程序概念。 
第5章介绍了Linux字符设备驱动程序的体系架构,引入了几个新概念,譬如轮询、异步通知和I/O控制等。由于本书后面介绍的大多数设备都可以看作“超级”字符设备,所以这些概念也与后续章节密切相关。 
第6章讲解了内核串行设备驱动程序的层次结构。 
第7章讨论了内核中为键盘、鼠标和触摸屏控制器等输入设备服务的输入子系统。 
第8章讲解了通过I2C总线或SMBus总线与系统连接的设备(如EEPROM)的驱动程序,同时也介绍了SPI总线和1-wire总线等其他串行接口。 
第9章分析了PCMCIA子系统,讲授了如何编写含PCMCIA或CF组件的设备的驱动程序。 
第10章描述了内核对PCI及其衍生总线设备的支持。 
第11章探讨了USB的体系架构,并讲解了如何利用Linux内核USB子系统的API来开发USB设备驱动程序。 

序言

拿到这本书,你也许会问:为什么还要写一本Linux设备驱动程序的书呢?这样的书不是已经有一堆了吗? 
答案是:相对于其他同类书,本书实现了一个巨大的突破。 
首先,本书与时俱进,基于最新的2.6内核进行讲解。其次,也是更重要的,本书对驱动程序的讲解非常透彻。大多数设备驱动程序的图书仅仅讲解与标准 Unix内核或操作系统相关的主题,譬如串口、磁盘驱动和文件系统等,如果你运气好,可能也会碰到讲解网络协议栈的内容。 
本书前进了一大步,它没有避重就轻,而是知难而上,探讨了在现代PC和嵌入式系统中必须面对的难点,比如PCMCIA、USB、I2C、视频、音频、闪存、无线通信等。你可以这样定位本书:Linux内核包含了什么,本书就会告诉你什么。 
它毫无遗漏,应有尽有。 
何况,作者早就取得了不凡的成就:仅仅是看到他在20世纪90年代末将Linux移植到了手表中的相关介绍就让人激动不已。 
本书能成为Prentice Hall开源软件开发系列丛书中的一本,我感到非常激动和欣慰。开源领域从来不乏振奋人心的事件,但本书的面世无疑更加引人瞩目。我希望你能从本书中找到你在进行内核开发时需要的东西,并且也能享受这一过程。 
Arnold Robbins 
资深Linux技术专家,gawk维护者,Prentice Hall开源软件开发系列丛书编者 


媒体评论

“这是我读过的最全面的Linux设备驱动程序著作。” 
——Theodore Ts’o,Linux基金会首席平台战略师,北美第一位内核开发者 
“我要找的就是这样一本书,它告诉我的不只是实例,更重要的是设备驱动程序的设计思路。” 

—— Anthony Lawrence,知名操作系统咨询师 




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



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章