深入Linux设备驱动程序内核机制

出版时间:2012-1  出版社:电子工业出版社  作者:陈学松  页数:540  
Tag标签:无  

内容概要

  这是一本系统阐述Linux设备驱动程序技术内幕的专业书籍,它的侧重点不是讨论如何在Linux系统下编写设备驱动程序,而是要告诉读者隐藏在这些设备驱动程序背后的那些内核机制及原理。作者通过对Linux内核源码抽丝剥茧般的解读,再辅之以精心设计的大量图片,使读者在阅读完本书后对驱动程序前台所展现出来的那些行为特点变得豁然开朗。
本书涵盖了编写设备驱动程序所需要的几乎所有的内核设施,比如内核模块、中断处理、互斥与同步、内存分配、延迟操作、时间管理,以及新设备驱动模型等内容。为了避免读者迷失在某一技术细节的讨论当中,本书在一个比较高的层面上进行展开,以一种先框架再细节的结构安排极大地简化了读者的阅读与学习。
本书不仅适合那些在Linux系统下从事设备驱动程序开发的专业技术人员阅读,也同样适合有志于从事Linux设备驱动程序开发或对Linux设备驱动程序及Linux内核感兴趣的在校学生等阅读。对于没有任何Linux设备驱动程序开发经验的初学者,建议先阅读那些讨论“如何”在Linux系统下编写设备驱动程序的入门书籍,然后再阅读本书来理解“为什么”要以这样或者那样的方式来编写设备驱动程序。

作者简介

  陈学松,曾任职于Intel,Marvell等半导体公司,9年以上Linux内核、设备驱动程序、嵌入式Linux
BSP等领域的开发经验。专注于Linux系统内核、BIOS、文件系统及软件虚拟化等技术,曾模仿Linux内核编写过微型操作系统。工作之余喜欢以文章的形式将自己的学习心得进行总结,善于运用图形等元素将复杂概念具体化,梳理脉络而不拘于细节。05年在IBM
Linux开发者论坛所发表的《解析Linux中的VFS文件系统机制》则堪称作者这一写作特色的代表之作,该文发表后曾被多家技术网站、论坛及个人博客所转载。
  喜欢游泳,四肢发达,胸无城府。古文功底颇深,少时涉猎甚广,现在则主要阅读一些历史题材类的书籍,熟读《三国志》。目前任职于AMD上海研发中心,主要从事Linux显卡驱动等领域的研发工作。

书籍目录

第1章 内核模块
 1.1 内核模块的文件格式
 1.2 EXPORT_SYMBOL的内核实现
 1.3 模块的加载过程
 1.3.1 sys_init_module(第一部分)
 1.3.2 struct module
 1.3.3 load_module
 1.3.4 sys_init_module(第二部分)
 1.3.5 模块的卸载
 1.4 本章小结
第2章 字符设备驱动程序
 2.1 应用程序与设备驱动程序互动实例
 2.2 struct file_operations
 2.3 字符设备的内核抽象
 2.4 设备号的构成与分配
 2.4.1 设备号的构成
 2.4.2 设备号的分配与管理
 2.5 字符设备的注册
 2.6 设备文件节点的生成
 2.7 字符设备文件的打开操作
 2.8 本章小结
第3章 分配内存
 3.1 物理内存的管理
 3.1.1 内存节点node
 3.1.2 内存区域zone
 3.1.3 内存页
 3.2 页面分配器(page allocator)
 3.2.1 gfp_mask
 3.2.2 alloc_pages
 3.2.3 __get_free_pages
 3.2.4 get_zeroed_page
 3.2.5 __get_dma_pages
 3.3 slab分配器(slab allocator)
 3.3.1 管理slab的数据结构
 3.3.2 kmalloc与kzalloc
 3.3.3 kmem_cache_create与kmem_cache_alloc
 3.4 内存池(mempool)
 3.5 虚拟内存的管理
 3.5.1 内核虚拟地址空间构成
 3.5.2 vmalloc与vfree
 3.5.3 ioremap
 3.6 per-CPU变量
 3.6.1 静态per-CPU变量的声明与定义
 3.6.2 静态per-CPU变量的链接脚本
 3.6.3 setup_per_cpu_areas函数
 3.6.4 使用per-CPU变量
 3.7 本章小结
第4章 互斥与同步
 4.1 并发的来源
 4.2 local_irq_enable与local_irq_disable
 4.3 自旋锁
 4.3.1 spin_lock
 4.3.2 spin_lock的变体
 4.3.3 单处理器上的spin_lock函数
 4.3.4 读取者与写入者自旋锁rwlock
 4.4 信号量(semaphore)
 4.4.1 信号量的定义与初始化
 4.4.2 DOWN操作
 4.4.3 UP操作
 4.4.4 读取者与写入者信号量rwsem
 4.5 互斥锁mutex
 4.5.1 互斥锁的定义与初始化
 4.5.2 互斥锁的DOWN操作
 4.5.3 互斥锁的UP操作
 4.6 顺序锁seqlock
 4.7 RCU
 4.7.1 读取者的RCU临界区
 4.7.2 写入者的RCU操作
 4.7.3 RCU使用的特点
 4.8 原子变量与位操作
 4.9 等待队列
 4.9.1 等待队列头wait_queue_head_t
 4.9.2 等待队列的节点
 4.9.3 等待队列的应用
 4.10 完成接口completion
 4.11 本章小结
第5章 中断处理
 5.1 中断的硬件框架
 5.2 PIC与软件中断号
 5.3 通用的中断处理函数
 5.4 do_IRQ函数
 5.5 struct irq_chip
 5.6 struct irqaction
 5.7 irq_set_handler
 5.8 handle_irq_event
 5.9 request_irq
 5.10 中断处理的irq_thread机制
 5.11 free_irq
 5.12 SOFTIRQ
 5.13 irq的自动探测
 5.14 中断处理例程
 5.15 中断共享
 5.16 本章小结
第6章 延迟操作
 6.1 tasklet
 6.1.1 tasklet机制初始化
 6.1.2 提交一个tasklet
 6.1.3 tasklet_action
 6.1.4 tasklet的其他操作
 6.2 工作队列work queue
 6.2.1 数据结构
 6.2.2 create_singlethread_workqueue和create_workqueue
 6.2.3 工人线程worker_thread
 6.2.4 destroy_workqueue
 6.2.5 提交工作节点queue_work
 6.2.6 内核创建的工作队列
 6.3 本章小结
第7章 设备文件的高级操作
 7.1 ioctl文件操作
 7.1.1 ioctl的系统调用
 7.1.2 ioctl的命令编码
 7.1.3 copy_from_user和copy_to_user
 7.2 字符设备的I/O模型
 7.3 同步阻塞型I/O
 7.3.1 wait_event_interruptible
 7.3.2 wake_up_interruptible
 7.4 同步非阻塞型I/O
 7.5 异步阻塞型I/O
 7.6 异步非阻塞型I/O
 7.7 驱动程序的fsync例程
 7.8 fasync例程
 7.9 llseek例程
 7.10 访问权能
 7.11 本章小结
第8章 时间管理
 8.1 jiffies
 8.1.1 时间比较
 8.1.2 时间转换
 8.2 延时操作
 8.2.1 长延时
 8.2.2 短延时
 8.3 内核定时器
 8.3.1 init_timer
 8.3.2 add_timer
 8.3.3 del_timer和del_timer_sync
 8.4 本章小结
第9章 Linux设备驱动模型
 9.1 sysfs文件系统
 9.2 kobject和kset
 9.2.1 kobject
 9.2.2 kobject的类型属性
 9.2.3 kset
 9.2.4 热插拔中的uevent和call_usermodehelper
 9.2.5 实例源码
 9.3 总线、设备与驱动
 9.3.1 总线及其注册
 9.3.2 总线的属性
 9.3.3 设备与驱动的绑定
 9.3.4 设备
 9.3.5 驱动
 9.4 class
 9.5 本章小结
第10章 内存映射与DMA
 10.1 设备缓存与设备内存
 10.2 mmap
 10.2.1 struct vm_area_struct
 10.2.2 用户空间虚拟地址布局
 10.2.3 mmap系统调用过程
 10.2.4 驱动程序中mmap方法的实现
 10.2.5 mmap使用范例
 10.2.6 munmap
 10.3 DMA
 10.3.1 内核中的DMA层
 10.3.2 物理地址与总线地址
 10.3.3 dma_set_mask
 10.3.4 DMA映射
 10.3.5 回弹缓冲区(bounce buffer)
 10.3.6 DMA池
 10.4 本章小结
第11章 块设备驱动程序
 11.1 块子系统初始化
 11.2 ramdisk源码实例
 11.2.1 make_request版本的RAM DISK源码
 11.2.2 request版本的RAM DISK源码
 11.2.3 ramdisk的使用
 11.3 块设备号的注册与管理
 11.4 block_device
 11.5 struct gendisk
 11.6 struct hd_struct
 11.7 用alloc_disk分配gendisk对象
 11.8 向系统添加一个块设备add_disk
 11.9 block_device_operations
 11.10 块设备文件的打开
 11.11 blk_init_queue
 11.12 blk_queue_make_request
 11.13 向队列提交请求
 11.14 块设备的请求处理函数
 11.15 bio结构
 11.16 本章小结
  

章节摘录

版权页:插图:模块最大的好处是可以动态扩展应用程序的功能而无须重新编译链接生成一个新的应用程序映像,这种广义上的模块概念其实并非Linux系统所特有,在微软的Windows系统上动态链接库DLL(Dynamic Link Library)便是模块概念的一个典型应用场景,对应到Linux系统上这种模块以所谓的共享库so(shared object)文件的形式存在。本章要讨论的主题-Linux内核模块,在概念及原理方面与上面提到的DLL和so模块类似,但又有其独特的一面,内核模块可以在系统运行期间动态扩展系统功能而无须重新肩动系统2,更无须为这些新增的功能重新编译一个新的系统内核映像。内核模块的这个特性为内核开发者开发验证新的功能提供了极大的便利,因为像Linux这么庞大的系统,编译一个新内核并重新启动将浪费开发者大量的时间。虽然设备驱动程序并不一定要以内核模块的形式存在,并且内核模块也不一定就代表着一个设备驱动程序,但是内核模块的这种特性似乎注定是为设备驱动程序而生。Linux系统下的设备驱动程序员在开发一个新的设备驱动的过程中,使用的最多的工具之一是insmod,这就是一个简单的向系统动态加载内核模块的命令。很难想象,如果没有insmod这样的机制,在Linux底下调试一个设备驱动会是怎样的一件让人痛苦抓狂的事情!笔者相信,任何一个在Linux上面有过实际的驱动程序开发经历的人都会有类似的感受。Linux系统虽然为内核模块机制提供了完善的支持,使得其下的内核模块是如此强大,然而现实中事情往往并非如预想的那样一帆风顺,如果对其幕后的机制不甚了解,在实际的开发过程之中,除了驱动程序自身要实现的功能可能会遇到麻烦以外,在利用Linux中的内核模块机制时,也会遇到各种各样的问题,比如在用insmod命令加载一个模块时,就很可能会碰到类似下面的错误信息。

编辑推荐

《深入Linux设备驱动程序内核机制》编辑推荐:穿针引线,将Linux设备驱动程序从台前到幕后融会贯通,条分缕析,剖析Linux设备驱动程序使用到的每一个重要的内核设施,高屋建瓴,多层次立体化揭示Linux设备驱动程序的框架结构,化繁为简,简单的示例源码具体验证内核背后的运作机制。

图书封面

图书标签Tags

评论、评分、阅读与下载


    深入Linux设备驱动程序内核机制 PDF格式下载


用户评论 (总计70条)

 
 

  •   深入Linux设备驱动程序内核机制--作者在用心把自己了解的展现出来,如题,是深入机制,从开始的模块的加载过程,就给人一种用心研究深入的感觉.
  •   这本书对于驱动开发的直接帮助不大,涉及的硬件接口并不多。如作者所说适合有一定经验的驱动开发人员更深一层理解内核驱动结构机制。中文原创,非常感谢作者的分享。
  •   很有深度,披着驱动外壳进行内核分析,不仅仅停留在驱动程序层面,而是深入到相应的内核实现~~~~
  •   很好的一本内核与驱动都涉及的书,有点无语的是书本首页的纸张竟然有一道深深的皱痕,幸亏不影响阅读
  •   就写驱动内核而言,这本书是最强的一本
  •   这本书适合初入门的驱动开发,非常推荐
  •   写的挺不错的,让你知道驱动中每一行的意义。就是贵了一点。
  •   里面的讲解和描述非常不错,喜欢内核的朋友可以看看
  •   至少纸张很好,内容感觉不错,有丰富图表帮助理解,对全面理解内核很有帮助!
  •   真的很不错的一本书
    内核结构介绍比较好
  •   拿到书,迫不及待的看了几页,感觉作者真的是用心在写这本书,很想把自己所知道的东西都在书里讲出来,讲的也很细致。
    另外浏览了下,插图不错,推荐啊!
    看了不少书了,感觉能有这本书作者般用心的不多,很多只是为了写书而写书,但这本书的作者是用心在总结传授自己所学和自己的理解感悟。
  •   算是比较深入的书,如果是初学者,不太推荐,比较适合深入学习,或者有一定经验的人。
  •   一直想买这本书来着,具体细节方面还有待于进一步发掘研究
  •   不同于一般的源码情景分析,深入层次把握的很好。
  •   很喜欢这本书,作者讲解细致入微,深入浅出,看后受益匪浅!
  •   很不错的一本书,感觉作者很用心的在写,而不是简单的内容堆砌。
  •   适合初学者和中级读者
  •   数目编写的非常清楚,可以按照函数搜索内容这点很满意,不错
  •   阅读了一部分,以前一些没有懂的问题搞懂了
  •   这本书真的非常非常好.我很喜欢.越看越喜欢
  •   刚开始看,很不错的一本书。正好适合我这样的水平。
  •   快递很给力,书的质量很好,
  •   对于同行而言,这本书还真的是一本好书。
  •   这个不建议初学者买啊 哎
  •   入门必备的数据,值得拥有
  •   刚开始感觉挺晦涩,但是现在越看越喜欢,超级有用
  •   没有基础的朋友建议不要买,买了都是收藏。
  •   网上看过章节的确需要手头一本
  •   好评横好经典
  •   还可以吧,这次是帮朋友买的,他说不错,,,
  •   还没读呢 感觉很不错
  •   刚看了这边书的前面两章,感觉挺好的。本书强调了一种思想--“知其然,知其所以然”。作为linux驱动开发者若明白了内核设施的机制原理,用起来那应该是相当顺手了。
  •   如果不满足只是简单修改、调用现有的函数,通过此书可以更快的理解驱动内核原理
  •   不错,讲解的很深入,不过可惜的是既然作者是专门搞显卡驱动这部分的,为什么不顺带讲解一下LCD驱动和视频驱动这方面的知识。
  •   内容不错,比大多数驱动的书讲得较好,就是排版不怎么好,所以只打4星了
  •   希望能够在Can驱动添加的内容
  •   正在等待中,希望书的内容和作者的前言一样引人入胜
  •   书的中间有折页,不影响阅读,尚未细读,希望对自己有很大帮助
  •   比想象中的厚些,内容丰富深入,相对偏贵了些。
  •   刚拿到手,稍微翻了翻,正是我想看的的内容。五一长假有事干了,慢慢看。。。
    呵呵书有些薄,原价要98.00元,感觉在抢钱。好在打完折就是那个价了。
  •   书还不错,内容也还行
  •   书没收到,但却显示交易成功,更蹊跷的是居然还可以些评论。真是无奇不有。呵呵呵!
  •   其实内容还不错,就是排版,算了,其实就没排版。
  •   纸张有一点一点不好。。。。。。
  •   简单的典型源码分析,感觉就像是按照这各个功能特点,挑选出源码讲解了一下,涉及到内核机制的分析几乎没多少吧,这东西还是得自己慢慢从linux内核学习起~
  •   一直做LINUX这块,但是有的原理不太了解,学习下原理的东西
  •   不是很深入,很多地方一笔带过,感觉是使用Word排版,行间距有点大,相对而言,实在是太贵了。给个中评。
  •   书还没看,不过纸张确实让人失望,一直在当当买书,感觉书的纸张质量一次不如一次,确实要改进拉!不过送货速度还是挺快的!
  •   书刚到,纸张颜色很黄,看着像盗版。本次网购不怎么满意。
  •   比较枯燥。。比较枯燥。。比较枯燥。。
  •   1。整本书没有一个主线,东一榔头,西一棒槌。每一章,也没见到什么深入的论述。作者的本身的能力不知如何,但可以肯定的是其写作能力可以说极差,废话一大堆,也没见说到正点上,俺是越看越生气。2。排版极差。段间距很大,每段连个缩进也没有,真不知编辑是干什么吃的。对源代码的解释,本来源代码中就有一些解释,只要将在源代码后的英文换成中文就可以了,但作者却在后面每个每个的解释,每个解释就是一、二句话的一小段,由于超大的段间距,结果占用了大量篇幅。3。装订质量差。书还没看完,但书就出现了脱胶,后面的几页就要掉了。
  •   没有打满分原因有二,1. 后面章节不如前面精心,有错别字出现2. 例子有点少,如果能以动手例子启发理解就完美了,现在还是陈述式灌输
  •   这本书最令我满意的地方就是:字符驱动那一章,比linux device driver那本书详细。
  •   对驱动开发中涉及到的许多内核底层的机制进行比较好的阐述,看了该书,许多困扰已久的问题都得到很好的解答,该书适合一定内核与操作系统基础的朋友阅读。
  •   整体感觉还不错,挺好的
  •   以前就看过,买这本书为了珍藏,怕以后 又找不到了
  •   看了,明白了些驱动的内核机制,对我还是有些帮助
  •   我喜欢深入Linux设备驱动程序内核机制
  •   这是一本很好的书,对内核讲的很透彻,
  •   当我看到这本书的目录时的第一反应是:“莫非这本书是翻译的Linux Device Drivers?”而看到“陈学松著”几个字之后的第二反应是:“莫非这本书涉嫌抄袭!”首先声明我没读这本书的内容,但我发现这本书的目录跟O'Reilly 2005年出版的Linux Device... 阅读更多
  •   写的思路很清晰,少有的国人写的好书。顶一个,,,
  •   国人就喜欢分析个源码什么的,这个说是没弄太多源码,其实也不少----这本书其实更像ULK和PLKA,只不过是专讲驱动部分,范围上大概和情景分析的第二本差不多,只不过内核版本更新就是了---感觉上要从入门学linux驱动的话,还是LDD3吧
  •   拿来扩展学习挺好的,看作者自述在amd进行图形驱动的开发。不知道以后会不会成为linux桌面系统普及的一个 催化剂?
  •   这本书挺好的,希望作者能继续出书
  •   设备驱动程序技术内幕
  •   学习驱动买的,感觉还不错
  •   对于LInux驱动讲解很深入
  •   瑕不掩瑜,大作
  •   买来还没看,据说不错
  •   国内少有的技术书籍
 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7