《Linux设备驱动开发详解(基于最新4.0内核)》前言

Linux从未停歇脚步。Linus Torvalds,世界上最伟大的程序员之一,Linux内核的创始人,Git的缔造者,仍然在没日没夜的合并补丁,升级内核。做技术,从来没有终南捷径,拼的就是坐冷板凳的傻劲。

这是一个连阅读都被碎片化的时代,在这样一个时代,人们趋向于激进、浮躁。内心的不安宁使我们极难静下心来研究什么。我见过许许多多的Linux工程师,他们的简历书写着“精通”Linux内核,有多年的工作经验,而他们的“精通”却只是把某个寄存器从0改成1,从1改成0的不断重复;我见过许许多多的Linux工程师,他们终日埋头苦干,敲打着自己的机器和电路板,却从未冷静下来思考,并不断重构和升华自己的知识体系。

这是要把牢底坐穿的程序员。这样“忙忙碌碌”的程序员,从来都不是什么好程序员。

优秀的程序员,最优秀的品质是能够内心宁静地学习与思考问题,透析代码背后的架构、原理和设计思想。没有思想的代码是垃圾代码,没有思想的程序员,只是在完成低水平重复建设的体力活。很多程序员,连自己写的代码最后在机器里面怎么跑都从不过问,很多事情莫名其妙地发生了,很多bug莫名其妙地消失了……永远都是得过且过。

由此,衍生出《Linux设备驱动开发详解》新版的第一个出发点,那就是带给读者更多关于Linux开发背后思想的讲解,奠定根基。《Linux设备驱动开发详解(基于4.0内核)》呈现给读者的,更多的是一种思考,而不是知识点的简单罗列。

这次更新更进一步加强了对驱动编程所涉及Linux内核最底层机理的讲解,并对前2版的基础理论部分进行了大篇幅地重写,实例代码也被大面积重构。大幅度修改的内容包括中断、定时器、进程生命周期、uevent、并发、编译乱序、执行乱序、等待队列、I/O模型、内存管理等。这些知识点是如此重要,是真正证明程序员对Linux理解的部分,只有打好根基,才能游刃有余。

新版删除了《Linux设备驱动开发详解》第一版、第二版大量描述各种具体具体驱动类型的章节比如Sound、PCI、MTD、TTY等,而将更多焦点转移到了驱动编程背后的内核原理, 并试图从Linux内核上百个驱动子系统中寻找出内部的规律,以培养读者举一反三的能力。

Linux内核有上百个驱动子系统,这一点从内核的drivers子目录就可以看出来:

好吧,傻子才会一个目录一个目录地去看,一个目录一个目录地从头学起。我们势必要寻找各种驱动子系统的共性,摸索规律。本次更新,我们将更多看到各驱动子系统的类比,以及驱动子系统的层次化设计。

技术工作,从来都不是一劳永逸。这世界变化太快,当前技术革新的速度数倍于我们父辈祖辈祖祖辈经过的任何时代。证明你是真球迷还是伪球迷的时候到了。这是伪程序员的地狱,也是真程序员痛苦中的狂欢。

从浩如烟海的知识体系中、不断更新的软件版本中终生学习,不断攻克一个个挑战,获取新的养分,寻找新的灵感,这实在是黑暗码农生涯中不断闪现的璀璨光芒。

自本书第一版、第二版发布后,内核版本不断刷新,3.0、3.1、3.2…3.19、4.0、4.1,变化的是软件的架构,不变的是Linus的热情。

这无疑是本次升级的第二个出发点,更新Linux驱动编程的知识体系以符合最新的时代。所以,本次更新大量新增了关于Device Tree、ARM Linux移植、Linux电源管理、GPIO、clock、timer、pinmux、DMA等的内容。我们的操作平台,也转移到了QEMU模拟的4核Cortex-A9电路板,书中的实例,基本都转移到了市面流行的新芯片。

最近两三年,老是听到许多程序员抱怨,缺乏讲新内核的资料、缺乏从头到尾讲Device Tree的资料,但是我想说,这实在不是什么难点。难点仍然是本书第一个出发点要解决的问题,如果有好的基础,以优秀程序员极强的学习能力,应该很快就可以掌握这些新知识。机制没有变,变化的是只是策略。

所以学习能力,也是优秀程序员的又一品质。没有人生下来就是天才,良好学习能力的培训,本身也是通过不断学习来获取的。可以说,学的越多的人,学新东西一定越快,学习能力也变得越强。因为,知识的共通性实在太多。

读者阅读本书的思路,不应该是企图把它当成一本工具书、查API的书,而是一本梳理完整理论体系、开发思想、软件架构的书。唯如此,我们才能适应未来新的变化。

不知不觉中,离本书的第一次出版已经过去了七个年头。而自本次更新开始实施至今,也经过了一轮寒暑更替。岁月如歌,七载而下,我已非当年的意气青年。本书一版,二版,再版,这实非当初的预料。回首过去,我们惊奇地发现,这七年,正好是Linux由弱而盛,节节胜利的七年。也是许多如我一般的码农成家立业、结婚生子的七年。未来七年的Linux会是什么样子,我们无从预料。本书是否会有更进一步的新版,我们也无法预知,一如Linux没有路线图。社区和生态就是最好的Roadmap,万事随缘,而唯一不变的只是激情。

时代的滚滚车轮,推动着Linux内核的版本不断向前,也推动着每个人的人生。红尘滚滚,

         我不去想是否能够成功,

         既然选择了远方,

         便只顾风雨兼程。

最后,本书能得以出版,要感谢带领我向前的人生导师和我的众多小伙伴,他们或者在我人生的关键时刻改变了我,或者带给了我黑暗程序生涯中无尽的快乐和动力。我的小伙伴,他们力挺我,鼓励我,也辱骂我,奚落我,这些,就是真挚的友情。

谨以此书,致以对杨平先生、何昭然、方毅伟、李华毅、宋志吾、杜向龙、叶祥振、刘昊、王榕、何烨、曾过、刘永生、段炳华、章君义、王文琪、卢鹏、刘涛、徐西宁、吴赫、任桥伟、秦龙廷、胡良兵、张家旺、王雷、Bryan Wu、Eric Miao、Qipan Li、Guoying Zhang、Jiansong Chen、应荣军、Haoyu Zhong、刘洪涛、季久峰、邴杰、孙志忠、吴国举、Bob Liu、赵小吾、贺亚锋、刘仕杰、Hao Yin等老师和小伙伴的深深感激;谨以此书,致以对我的父母大人、老婆大人、兄长和姐姐、伟大丈母娘的深深感激,本书新版的写作时间超过一年,其过程是一种巨大的肉体和精神折磨,没有他们的默默支持和不断鞭策,是不可能完成的;谨以此书,致以对为本书做出巨大贡献的编辑、策划老师们,尤其是张国强老师深深的感激!

由于篇幅的关系,我没有办法一一列举所有我要感激的人入感谢名单。但是,我这些年从你们那里获得的,远远大于我付出的。所以,内心深处,唯有怀着对小伙伴深深的感恩,不断前行。岁月如歌,吾歌狂行。

宋宝华

2015年4月于上海浦东

时间: 2024-10-13 01:09:02

《Linux设备驱动开发详解(基于最新4.0内核)》前言的相关文章

《App后台开发运维和架构实践》推荐序

软件开发工具的成长速度远远超过开发人员的成长速度,这是现实. 每个月,甚至每天,我们都可以见到新的类库.框架.工具.语言.它们或者极大地降低了开发的成本,或者极大地提升了开发的效率. 随之而来的问题就是,如何让开发人员妥善地运用好这些工具? 曾经有好几个做开发的同事跟我说:"写软件谁不会?从网上找些开源的类和项目来改改就是了".目前也确实充斥着这种"改改就是"的工作思维.介绍某个类库和项目如何安装和调用的文章俯拾皆是. 但是每种工具究竟有什么优缺点?适合用来解决什么

《App后台开发运维和架构实践》前言

笔者在2012年从开发电子商务网站转向了开发App后台,当时在一家做社交App的创业公司里工作,笔者和搭档都没有任何从事移动互联网开发的经验,不清楚App后台怎么架构,只能摸着石头过河,那时网络上只有一些零散的资料,当遇到问题时只能不断地摸索和思考,来找到解决问题的方法. 在从事开发App后台接近4年的时间中,笔者参与了两款社交App的开发,现在就职于bmob,从事云后台服务的研发工作,慢慢地对App后台的架构有了一些体会. 从2013年年底开始,笔者把工作笔记发表在CSDN博客专栏"App后端

《App 后台开发运维和架构实践》目录

ps:由于书的目录太长了,各大网店(京东,当当,亚马逊)都显示不完整,所以这里列出目录的完整版. 第1章 App后台入门 16 1.1 App后台的功能 16 1.2 App后台架构 17 1.3 App和App后台的通信 19 1.4 App后台和Web后端的区别 22 1.5 选择服务器 23 1.6 选择编程语言 24 1.7 快速入门新技术 25 1.7.1 思维模式 25 1.7.2 4种快速入门新技术的方法 25 1.8 App是怎样炼成的 26 1.8.1 项目启动阶段 26 1.

App 后台架构设计方案 设计思想与最佳实践

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/53933096 做App做的久了,就想研究一下与之相关的App后台,发现也是蛮有趣的.App后台的两个重要作用就是 远程存储数据 和 消息中转.这里面的知识体系也是相当复杂,做好一个App后台也是需要长期锤炼的.本篇文章从 App 后台架构 的角度介绍.好了,下面进入正题: 说起架构,我们先看一下何为架构,百度百科是这样说的:架构,又名软件架构,是有关软件整体结构与组件的抽象描述,

基于 Docker 的微服务架构实践

本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Docker 的技术体系的快速发展.本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结.希望给在创业初期探索如何布局服务架构体系的 DevOps,或者想初步了解企业级架构的同学们一些参考. Microservice 和 Docker 对于创业公司的技术布局,很多声

Django开发运维后台(二):建立模型与更新数据

上一篇文章我已经新建了一个SaAdmin的APP,现在开始在这APP下面来code 1.修改setting.py的数据库连接: DATABASES = {     'default': {         'ENGINE':'django.db.backends.mysql',         'NAME': 'QjshAdmin',         'USER': 'root',         'PASSWORD': 'lihuipeng',         'HOST': 'localho

空格App亿元A轮融资背后:云上多场景技术架构实践与经验

直播视频: (点击图片观看) 幻灯片下载地址:https://oss.aliyuncs.com/yqfiles/382bc642fc0b621a9368138a74d8fd36.pdf 3月16日云栖社区在线实时分享顺利结束,本次由空格APP技术合伙人刘博分享了空格利用阿里云服务在搜索.推荐和数据挖掘业务场景下的探索实践.本次视频直播的整理文章.视频整理完毕,如下内容. 阿里云在空格 图一 空格服务端整体架构 在空格初始创业阶段,人员十分缺乏,但依靠着阿里云,空格两周便实现APP上线.空格服务端

现货!《PHP7实践指南:o2o网站与App后台开发》京东天猫有售

终于发售了,啥也不想说了,喜欢的或需要的就点击 链接 进去购买吧. 另外此书将作为 2017 PHP全球开发者大会 现场活动用书 天猫购书包邮 PHP7实践指南:O2O网站与App后台开发 数据库设计 PHP开发工程 适合作为企业内部培训.培训机构和大专院校的教学参考书 京东购书PHP7实践指南:O2O网站与App后台开发 陈小龙 PHP7语言编程教程书籍 php7 PHP全球开发者大会 2017 PHP 全球开发者大会 -百格活动 作者简介陈小龙,奇虎360软件工程师,是国内较早研究微信开发和

APP后台架构20191205

1.架构,架构与业务紧密相关,是有业务驱动的. 2.APP后台演进原则. App后台的架构是由业务规模驱动而演进的,App后台是为业务服务的,App后台的价值在于能为业务提供其所需要的功能,不应过度设计. 从项目的角度,当App访问量不大时,应该快速搭建App后台,让App尽快上线给用户提供服务,验证商业模式的正确性,同时快速迭代产品. 当App访问量不断上升,这时要在保证快速迭代的前提下,同时兼顾高性能和高可用. 当App访问量达到一定阶段后,增长曲线就会放缓,但业务变得更加复杂,对高性能和高

构建高并发高可用的电商平台架构实践

从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流. 转载请声明出处:http://blog.csdn.net/yangbutao/article/details/12242441 作者:杨步涛 关注分布式架构.大数据.搜索.开源技术 QQ:306591368 技术Blog:http://blog.csdn.net/yangbutao 一. 设计理念 1.      空间换时间 1)      多级缓存,静态化 客户端页面缓存(http header中包