本篇主要提供深入Linux设备驱动程序内核机制电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com
这不是一本单纯的关于Linux设备驱动程序入门的书。它是给有一定的Linux设备驱动程序编写经验并且对众多Linux底层设备驱动内幕机制感兴趣的读者量身定制的。与市面上已经出版的Linux相关方面的图书的不同之处在于,本书并不着重于全面描述Linux内核,也不只是简单地告诉你如何去写一个Linux下的设备驱动程序。它是从设备驱动程序的视角出发,深入到Linux内核去剖析那些和驱动程序实现机制密切相关的技术内幕。比如让你理解为什么在这个地方驱动程序应该使用work queue而不是tasklet,为什么在中断处理例程里应该使用spin_lock而不是mutex_lock……因为只有当你对驱动程序中使用的各种内核实现有了清晰的认识,你才能在日常的工作当中随心所欲地驾驭它们,写出更高性能更安全的代码。知其然,更知其所以然,对于沉迷于技术领域的人而言,这种不断探索的好奇心是对技术工作能长期保持热情的一个基本特质。相对于市面上已经出版的相关书籍而言,本书具有以下两个鲜明的特色:
细节揭秘
目前市场上已经出版的Linux内核和驱动程序方面的书籍,大体上可分为两种。一种是侧重于内核本身,鉴于目前Linux的内核源码已经十分庞大,这些讲解内核的书有些本身非常全面,作者的写作态度也非常严谨,比如Deep Understanding Linux Kernel,还有新近出版的Professional Linux Kernel Architecture,后者几乎涵盖了新版Linux内核中绝大部分重要的构件,但也正因如此,这样的书籍就不可能在与驱动程序相关的机制上留下太多笔墨。另外还有一种是专门讲解Linux驱动方面的书籍,典型的有Linux Device Driver和Essential Linux Device Driver。这些书着重于介绍Linux驱动的基本概念和架构,但是对于想了解更多幕后的技术细节的读者来说,《深入Linux设备驱动程序内核机制》一书可提供更详细的资源和帮助。通常当你想深入理解一些一般书籍没有描述的机制时,你可能会采用在线搜索或查看源码的方式,但有时这不仅费时也未必能得到满意的答案。本书提供了另一途径让你更系统、有效地理解这些内核机制。我相信对于广大忙于在校学习、职场深造或课题攻关的读者来说,本书可提供很多有益的帮助。
图片说理
这本书另外一个很大的特点是,作者大量使用其精心设计的图片来帮助你清晰地理解一些复杂的概念、流程和架构。这在中文版原创的图书中是很难能可贵的,相对而言外文书在这方面做得就要好很多。形象直观的图片胜过大量的文字,也能节省读者大量的时间。可以看到,本书的作者在这一方面做了很大的努力去加以完善,在我看来,这是一个非常好的尝试。本书作者当前正在AMD上海研发中心从事Linux显卡驱动等系统软件方面的研发工作,能在繁忙的工作之余,通过对自己学习和实践经验的总结写下这样一本书,对增进国内读者的 Linux 系统开发能力将起到很大的作用。我相信,如果作者有足够的时间与精力的话,这本书还可以进一步完善,包括在某些技术方面可以有更精细的描述。
《深入Linux设备驱动程序内核机制》是一本系统阐述Linux设备驱动程序技术内幕的专业书籍,它的侧重点不是讨论如何在Linux系统下编写设备驱动程序,而是要告诉读者隐藏在这些设备驱动程序背后的那些内核机制及原理。作者通过对Linux内核源码抽丝剥茧般的解读,再辅之以精心设计的大量图片,使读者在阅读完本书后对驱动程序前台所展现出来的那些行为特点变得豁然开朗。
本书涵盖了编写设备驱动程序所需要的几乎所有的内核设施,比如内核模块、中断处理、互斥与同步、内存分配、延迟操作、时间管理,以及新设备驱动模型等内容。为了避免读者迷失在某一技术细节的讨论当中,本书在一个比较高的层面上进行展开,以一种先框架再细节的结构安排极大地简化了读者的阅读与学习。
陈学松,曾任职于Intel,Marvell等半导体公司,9年以上Linux内核、设备驱动程序、嵌入式LinuxBSP等领域的开发经验。专注于Linux系统内核、BIOS、文件系统及软件虚拟化等技术,曾模仿Linux内核编写过微型操作系统。工作之余喜欢以文章的形式将自己的学习心得进行总结,善于运用图形等元素将复杂概念具体化,梳理脉络而不拘于细节。05年在IBMLinux开发者论坛所发表的《解析Linux中的VFS文件系统机制》则堪称作者这一写作特色的代表之作,该文发表后曾被多家技术网站、论坛及个人博客所转载。喜欢游泳,四肢发达,胸无城府。古文功底颇深,少时涉猎甚广,现在则主要阅读一些历史题材类的书籍,熟读《三国志》。目前任职于AMD上海研发中心,主要从事Linux显卡驱动等领域的研发工作。
模块最大的好处是可以动态扩展应用程序的功能而无须重新编译链接生成一个新的应用程序映像,这种广义上的模块概念其实并非Linux系统所特有,在微软的Windows系统上动态链接库DLL(Dynamic Link Library)便是模块概念的一个典型应用场景,对应到Linux系统上这种模块以所谓的共享库so(shared object)文件的形式存在。
本章要讨论的主题-Linux内核模块,在概念及原理方面与上面提到的DLL和so模块类似,但又有其独特的一面,内核模块可以在系统运行期间动态扩展系统功能而无须重新肩动系统2,更无须为这些新增的功能重新编译一个新的系统内核映像。内核模块的这个特性为内核开发者开发验证新的功能提供了极大的便利,因为像Linux这么庞大的系统,编译一个新内核并重新启动将浪费开发者大量的时间。虽然设备驱动程序并不一定要以内核模块的形式存在,并且内核模块也不一定就代表着一个设备驱动程序,但是内核模块的这种特性似乎注定是为设备驱动程序而生。Linux系统下的设备驱动程序员在开发一个新的设备驱动的过程中,使用的最多的工具之一是insmod,这就是一个简单的向系统动态加载内核模块的命令。
很难想象,如果没有insmod这样的机制,在Linux底下调试一个设备驱动会是怎样的一件让人痛苦抓狂的事情!笔者相信,任何一个在Linux上面有过实际的驱动程序开发经历的人都会有类似的感受。Linux系统虽然为内核模块机制提供了完善的支持,使得其下的内核模块是如此强大,然而现实中事情往往并非如预想的那样一帆风顺,如果对其幕后的机制不甚了解,在实际的开发过程之中,除了驱动程序自身要实现的功能可能会遇到麻烦以外,在利用Linux中的内核模块机制时,也会遇到各种各样的问题,比如在用insmod命令加载一个模块时,就很可能会碰到类似下面的错误信息。
……