转:学习linux驱动经典书籍

Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为《linux_device_driver 3rd Edition》,这是一本很经典的书,无奈Linux的东东还是过于庞大,这本侧重于实战的书籍也只能停留在基本的接口介绍上,更深入的东东只能靠我们自己摸索了。但万事总有一个开头,没有对Linux驱动整体框架的把握是很难做一个优秀的驱动开发者的。除了这本Jonathan Corbet, Greg Kroah-Hartman, Alessandro Rubini合著的经典大作外,另一本理论实践并重的书就是《Linux Kernel Development,2nd Edition》有著名的内核专家Robert Love所著,通过Robert Love的娓娓道来,相信你会感到自己功力的不断提升,但学习驱动,最本质的东西还是操作系统的一些基本的理论了,《Understanding The Linux Kernel, 3rd ed 2005》更加关注这一点,作为一个注重理论的经典之作,则是Linux驱动研发人员内功的根基。

但很遗憾的是,以上几本书都更侧重于编程者内功的修养,对于初学者而言,往往有过于深奥之感,关乎国内的书,也似乎只懂得copy些代码做些粗浅的讲解,花拳绣腿的态势又过于明显。

成为一名精通 Linux 程序设计的高级程序员一直是不少朋友孜孜以求的目标。根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍、Java 程序员的 2.6 倍, Linux 程序员年终奖金平均为 Windows 程序员的 2.9 倍。同时数据显示,随着工作经验的增长, Linux 程序员与 Windows 程序员的收入差距还有扩大的趋势。Denis 认为,要学好 Linux 环境下的编程,关键是要看对、选对、学会正确的书籍。可以说,如果你选对了 Linux编程的经典书籍,配合你在程序设计工作中的刻苦钻研,成为一名精通 Linux 程序设计的高级程序员并非一件可望不可及的事情。但如果各位程序员朋友没有选对正确的书籍,则你的职业生涯之路就可能面临坎坷。今天,水煮鱼向各位朋友推荐的这些书,有的是资深老前辈们当初向水煮鱼的推荐,还有的是 IBM 的内部培训指定参考书,它们都很值得各位朋友抽空认真一读。

为什么要学习 Linux 环境下的编程

Linux 是一个开放、灵活、跨平台的操作系统,上至庞大的数据中心,下至可放于掌心中的嵌入式设备,无处没有 Linux 的身影。更为重要的是, Linux 是一个与 Unix 既一脉相承又与时俱进的系统。可以说,上世纪70年代学习的 Unix 知识和技巧,在今天仍然大有用武之地,这与 Windows 平台的开发形成了鲜明的对比。程序员不用担心今天微软出一个 .net,明天又出一个 F#,使得自己过去学习的成果付之东流。

上个星期,水煮鱼与一位 Linux 项目经理聊天过程中,这位 Linux 项目经理告诉水煮鱼,他们项目的利润非常高,急需具备一定 Linux 编程知识的程序员。他说:“其实我们对程序员的编程技巧要求也并非很高,这是可以在工作中培训和提高的,关键是很多程序员连基本的 Linux 编程思想都不了解,我怎么聘用他们呢?我们去大学招聘的时候,给本科应届生开出 8000 元的月薪,但是就是很难招到人。我拿一些经典书籍中一些经典例子来考他们,他们基本上都是一问三不知。其实,如果他们能回答上一半的问题,我还是很愿意考虑是否聘用他们的。而对于项目相关部分的专业知识,我们有专业的内部培训,并不担心这个问题,关键是看应聘者是否具备 Linux 编程的基本思想。”

水煮鱼认为,这位项目经理朋友提到的问题还是很有代表性的。其实很多程序员朋友,只要能掌握这些书中的基础知识,是很容易脱颖而出的。事实上,项目经理他们也都很忙,并没有空去自己设计高难度的面试题目,而是直接采用经典书籍中的经典例子。

《UNIX环境高级编程》(第2版),史蒂文斯著

《UNIX环境高级编程》,推荐指数:★★★★★

《UNIX环境高级编程》是 Unix/ Linux 程序员案头必备的一本书籍。可以说,Linux 程序员如果没有读过这本书,就好像基督教徒没有读过圣经一样,是很难让人理解的。这本书概括了 Linux 编程所需的一切理论框架、主要系统函数、多进程编程、乃至 Linux 网络通信。对于初学者,如果你能将《操作系统》这门课程结合着这本书来学习,试着用 Linux 程序实践《操作系统》这门书中讲的进程间通信、进程调度、进程同步等内容,相信这将是一个一举两得的事情。哦,忘了告诉大家,上次 CNN 采访 Google 总裁佩林的时候,水煮鱼看到佩林的书架上就有这本书的英文版,可见它真的是一本全球开发者必备的一本书。

《深入理解 Linux 内核》(第三版) ,博韦等著

《深入理解 Linux 内核》,推荐指数:★★★★

学习 Linux ,就要学习 Linux 的精华。而 Linux 的精华,则在于 Linux 的内核。《深入理解 Linux 内核》就是一本辅助学习 Linux 内核的经典书籍。有的初学者,在没有人指导的情况下,就钻入 Linux Kernel代码的海洋中埋头苦学,结果学了半天仍然是一头雾水。当然了,在大师指导下学习就不一样了。本书以最新的 Linux 2.6 版架构为基础,分门别类地向初学者介绍了 Linux 内核的架构、编程思想、以及功能模块。相信你在本书的指导下学习,对于你读懂 Linux 操作系统的精华部分,会取得事半功倍的效果。事实上,不少知名公司招聘的题目里面,很多就出自这本书,可见它真的是论述 Linux 内核的经典书籍。

《Linux 设备驱动程序》,科波特著

《Linux 设备驱动程序》,推荐指数:★★★

程序开发,高薪在 Linux ; Linux 程序员,高薪在驱动开发。可以说,水煮鱼见过的 Linux 驱动程序员,薪水在万元以下的,一个都没有。普遍观点认为, Linux 驱动开发很难学,这并不正确。初学者认为 Linux 驱动开发很难学,关键在于其没有选对正确的入门书籍。《 Linux 设备驱动程序》这本书,过去已经有多位 Linux 项目经理向水煮鱼推荐过,你要想学MOD编程,想挑战高薪职位,这本书读一读是很有必要的。当然,这本书不是一本针对初学者的书籍,初学者应首先学习前面提到的《UNIX环境高级编程》再看这本书,你才能真正的学懂学好 Linux 驱动开发。

《嵌入式 Linux 应用开发完全手册》,韦东山著

《嵌入式 Linux 应用开发完全手册》,推荐指数:★★★

要说 Linux 应用最广泛的地方,那一定是无处不在的嵌入式设备了,《嵌入式 Linux 应用开发完全手册》就是一本教会您怎样开发 Linux 嵌入式系统软件的一本好书。水煮鱼与本书作者韦东山老师曾有过一面之缘,当时韦老师正在写作这本书。这本书综合了常见的嵌入式开发经验技巧,以及常见的嵌入式系统应用,系统移植,调试及异常处理等,内容非常丰富,是中文 Linux 领域难得的一本好书。嵌入式处理器种类繁多,韦老师着重讲了目前国内最常用的ARM系统,实用性很强,是国内嵌入式程序员不容错过的一本工具书。

《人月神话》(32周年中文纪念版),布鲁克斯著

《人月神话》,推荐指数:★★★★★

水煮鱼上面为大家推荐了几本 Linux 编程经典书籍,但要问编程的最终目的是什么,那一定还是要应用到实际项目中。做项目,那就一定离不开《人月神话》这本书。《人月神话》的作者布鲁克斯,是水煮鱼所在公司的超级大牛人,也是图灵奖的获得者。去年,他到中国访问的时候曾经表示,《人月神话》这本书,浓缩了项目实践中的正反两方面经验,是项目经理和系统分析师必读的一本书。水煮鱼认为,各位年轻的朋友,最终还是会要管项目的,与其你临时再学习,还不如早点接触这方面的知识比较好。可以说,Linux 的项目,对开发者的要求都很高,大家不要去跟 Windows 程序员学一些不好的习惯,特别是项目实施方面的一些不好的习惯,而应该深入体会大师的书籍。目前,《人月神话》的32周年纪念版已经上市了,有志于成为项目经理和产品经理的人,不应该错过这本做项目的圣经。

总结

古人云:“生而知之者,上也;学而知之者,次也;困而学之,又其次也;困而不学,民斯为下矣。”水煮鱼认为,正如古人所言,对于成功的 Linux 程序员,勤奋苦读的结果,将为您的 Linux 学习之路锦上添花。对于还没有入门的投资者,尽快熟读一两本入门的 Linux 书籍,对于你少走弯路是很重要的。对于已经进入项目,但还不能熟练掌握 Linux 开发的程序员,越早补习自己缺乏的东西,您将越早受益。对于基础薄弱,又拒绝学习的程序员,或许“民斯为下矣”就将是您惨淡的结局。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhanghaooy/archive/2009/04/03/4031614.aspx

原文地址:https://www.cnblogs.com/jacklong-yin/p/9642192.html

时间: 2024-10-13 16:13:15

转:学习linux驱动经典书籍的相关文章

Linux驱动经典面试题目

1.  linux驱动分类 2.  信号量与自旋锁 3.  platform总线设备及总线设备如何编写 4.  kmalloc和vmalloc的区别 5.  module_init的级别 6.  添加驱动 7.  IIC原理,总线框架,设备编写方法,i2c_msg 8.  kernel panic 9.  USB总线,USB传输种类,urb等 10.android boot 流程 11.android init解析init.rcLinux驱动经典面试题目,布布扣,bubuko.com

Linux内核(17) - 高效学习Linux驱动开发

这本<Linux内核修炼之道>已经开卖(网上的链接为: 卓越.当当.china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到写上去的每段话能够让读者产生什么疑惑,然后也都会紧接着尽量的去进行解释清楚,中间的很多概念也有反复纠结过怎么解释能够更容易的理解,力求即使对于初学者也可以有很少阻碍的一气读完.同时我也把书中一部分自己的感悟抽出来整理了精华版,share出来.当然水平有限,错漏之处有发现而修订时遗漏的,也有尚没有发现的.这本书

Linux一些经典书籍

一.linux之路,路漫漫其修远兮,吾将上下而求索!先上经典书籍! 1.入门篇 <LINUX权威指南>书不错,写的很全面也比较广,涉及的不深,做为入门书籍不错,可以比较全面的了解linux .另外比较热门的也可以看看<鸟哥的私房菜>等书,偏管理类的书.如果想做server方向的可以找来看看. 2.驱动篇 <LINUX设备驱动程序 >就是网上说的“LDD”,经典之作,必备书籍.国产经典<Linux驱动详细解>也是一本非常不错的书,很实用,书中源代码 分析比较多

Linux内核经典书籍

1.<Linux内核设计与实现> 本书重在原理.适合入门的最佳图书.作者是为2.6内核加入了抢占的人,对调度部分非常精通,而调度是整个系统的核心,因此本书是很权威的. 2.<深入理解Linux内核> 此书比上一本多了些细节.是Linux内核黑客在推荐图书时的首选.写的比较简单易懂,适合刚刚接触LINUX内核的.此书图表很多,形象地给出了关键数据结构的定义,与<Linux内核源代码情景分析>相比,本书内容紧凑,不会一个问题讲解动辄上百页,有提纲挈领的功用,但是深度上要逊于

学习C++的经典书籍

C++ 是一门难学易用的语言!一旦学成,妙用无穷. 相关书籍之多,人人都想找到一份学习的辟邪剑谱. 在这里,由浅入深的罗列出C++的相关书籍,可以根据你的需要去选择自己需要的书籍. 跟随本书单打好基础.开阔视野学好C++吧! 根据个人经验,简单将这些书籍分成三类:入门.提高.拓展,建议按顺序看. 入门 <C++ Primer 第 5 版> C++ 的入门书,我最推荐这一本,必看!!!目前已经更新到第 5 版,包含 C++11 的内容,不要再看第四版了. 无论初学或老手既可用来理解C++11规则

一步一步学习Linux驱动之自动创建设备节点

<span style="font-size:12px;">extern struct device *device_create(struct class *cls, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...) __attribute__((format(printf, 5, 6)));</span> 函数功能: 函数device_create()用于动态的建立

一步一步学习Linux驱动之驱动模块MakeFile解析

make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序. 一.使用条件判断 下面的例子,判断$(CC)变量是否"gcc",如果是的话,则使用GNU函数编译目标. libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects) $(no

【转】linux驱动开发的经典书籍

原文网址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为<linux_device_driver 3rd Edition>,这是一本很经典的书,无奈Linux的东东还是过于庞大,这本侧重于实战的书籍也只能停留在基本的接口介绍上,更深入的东东只能靠我们自己摸索了.但万事总有一个开头,没有对Linux驱动整体框架的把握是很难做一个优秀的驱动开发者的.除了

Linux驱动学习步骤(转载)

1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出. 5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现. 在ioctl里完成从用户空间向内核空间传递结构体的实现. 6. 写一bl