最近,在知乎看到一个问题,“嵌入式Linux有哪些好书推荐”。我读研期间也喜欢收藏一些书籍,每次看到京东有活动,总是忍不住想买一些书籍回来。
随着时间越来越久,我买的书越来越多,但是都看完不太现实。后来发现书不在于多,而在于经典。
买了书搬家是个麻烦事,我从网上搜集了一套计算机电子书,从中筛选了我看过的好书分享给大家。
在这里我推荐我看过的比较好的书,从入门到进阶。
这是我上学期间买过的一些书,其中的很大一部分还没看完:
我整理的这些书大家可以在这里免费白嫖,都是嵌入式领域的经典书籍,从入门到深入理解,整理全了!
推荐一个 github仓库,上面放了上百本经典的嵌入式,计算机书籍,可以star一下,下次找书直接在上面搜索就可以了:
推荐一个 github仓库,上面放了上百本经典的嵌入式,计算机书籍,可以star一下,下次找书直接在上面搜索就可以了:
github 书籍宝藏仓库
github访问不了可以访问这个:gitee 书籍宝藏仓库
@[toc]
编程语言
C
《C primer plus》
这本书几乎囊括了C语言所有的知识点,并且书中对于每一个语法细节都有很多生动简单的例子,同时给出了程序的运行结果,学起来会很舒服,不会那么枯燥。
一直认为,能把printf函数讲清楚的书一定是好书。从本书对printf函数的讲解的篇幅之大,就可以看出它的专业性。
600多页的书,算是第一本认真读完的C语言类书籍。如果不是因为它的趣味而且专业、详细但不是手册类型的书籍,我肯定是读不下去的。
总是觉得厚书通常废话多,但是这本书却值得细细品读。经常性的,书中所提到的问题恰好是困扰了你很久的问题,读下之后,有想抱着作者亲一口的冲动!!
总的来说,前面的比较基础,后面的稍有难度。前面虽然简单,但是也有很多比其他书出彩的地方,后面虽然难了点,但是并非虎头蛇尾,而且这一部分通常很有趣。
强烈建议想好好学C语言的人,一定要读这本书。如果你还会点汇编知识,并且有探究的精神,那么这本书真的会让你很有成就感和共鸣感!
新手学习的时候一定要自己动手敲每一个例子,这样才能学得好,代码能看懂跟能写出来差距还是挺大的。
《C和指针》
学会C的基本理论后,想要从初级水平进阶到中级水平,该书无疑是最好的一本参考书。指针可以说是C语言的灵魂,随便看一下linux kernel源码,就能发现里面到处都有指针的身影,很多让人眼前一亮的技巧都是通过指针实现的。
这里需要提醒一点,虽然本书书名是《C和指针》,但是其它的C语法都有详细介绍,只不过书中对指针的介绍比较多。
《C陷阱与缺陷》
这本书是Andrew Koenig大神以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展而成的。作者写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。
相比较那些大部头的计算机图书,这本只有100多页的小册子会让你有读下去的欲望,本书的内容是短小精悍。
全书分为8章,分别从词法分析、语法语义、连接、库函数、预处理器、可移植性缺陷等几个方面分析了C编程中可能遇到的问题。
读过这本书之后,当自己写代码时,要时刻回想书中的内容,防止自己犯同样的错误!
《C专家编程》
这本书与展示了最优秀的C程序员所使用的编码技巧,并专门开辟了一章对C++的基础知识进行了介绍。
书中C的历史、语言特性、声明、数组、指针、链接、运行时、内存以及如何进一步学习C++等问题进行了细致的讲解和深入的分析。全书撷取几十个实例进行讲解,对C程序员具有非常高的实用价值。
C++
《C++ Primer》
这本书完全是从一个专业开发者的角度去写的,把基础知识讲的很的深入和很透彻,让你理解什么是c++开发思想,讲解了很多在实际开发中的用法,问题,注意点等。
你可以感受到作者的水平之高,态度之认真,学完这本书,会让你对整个c++语言有个比较清晰的认识,对代码的规范化,对内存管理机制,对效率问题都会有不少提升。
《Effective C++ 》
这是一本C的入门书籍,Lippman之所以写这本书就是因为《C Primer》对于初学者来说太笨重了,而这本书却是从不同的方面——C++的本质和组织结构对语言进行阐释,可以帮助初学者对这门语言有一个大致的了解。
对于初学者而言,不要在最开始就陷入到C的细节之中,否则会有“不识庐山真面目,只缘身在此山中”的感觉,C的语法实在太多了。。。
《STL 源码剖析》
对这本经典的书我已经无法用简单的词语来形容了。我只能说,学C/C++的人如果没有看过这本书,实在是可惜。
这本书,侯捷老师对 STL 中的各个组件进行了剖析,对 STL 的用法给出了一些示例,另外把 STL 中几乎所有功能都讲了一遍,在容器部分对其中用到的数据结构进行了细致的讲解。
尤其值得一提的是,书中有大量的插图,对于读者理解数据结构和算法能够起到事半功倍的效果,可见侯捷老师是下了大量功夫的。 C++程序员都应该读读这本书。
数据结构与算法
《大话数据结构》
如果你跟我一样不是计算机科班出身,又想自学数据结构以及初步了解算法,那么就从这样的书籍开始吧。
非常棒的一本入门数据结构的书,每一章节都会有一个场景举例帮助理解数据结构,书中代码也可以边调试边学习。
《数据结构与算法分析-C语言描述》
在学习过C语言后,不要拖太久了,就看它,书很好,讲解透彻简明,虽然范围有点广,但是比国内大部分已经好很多了,建议刷完后面的题目,做有意见挑战性的锻炼能力的题目。
这本讲算法的虽然只有300多页,比不上算法导论那样的大部头,不过讲了许多的算法设计技术,整本书的信息量很大,好好研读,一定会有较大收获。
ARM体系与架构
《ARM体系结构与编程》
这本书可以看作是对ARM参考手册的中文摘译版,看ARM英文手册有难度的,可以参考下这本书。
《嵌入式Linux应用开发完全手册》
韦老师写的完全手册,很全面。从裸机到驱动再到嵌入式应用。 结合着开发板和视频食用效果更好。
操作系统
《现代操作系统》
介绍计算机操作系统很不错的一本书,看的时候有种膜拜感啊,入门操作系统必读的一本书。
从各个层面上进行介绍,够广也够深,最后一章的各方面综合介绍也好有意思,末尾的相关书籍推荐也大赞。这也是我觉得写操作系统原理写的最好的书,很适合初学者入门操作系统阅读,可以全方面了解操作系统原理。
缺点:中文翻译版不给力,个别地方可能会影响理解,但基本意思是不会有明显出入的。如果你时间精力允许,建议慢慢啃原版;如果实在没那么多精力,翻译版也还凑合。
《操作系统——精髓与设计原理》
这本书和《现代操作系统》类似,两本书看一本就好了,另一本可以用来当作工具书查阅。
《操作系统真相还原》
力荐此书,但建议先读完操作系统原理教材再看,你会发现阅读教材的过程中产生的很多疑问都被这本书解答了。
教材为了将操作系统原理讲得具有普适性,会故意将很多原理抽象化,避免其中的细节,所以读起来经常感觉云里雾里,似懂非懂。而且为了显得权威,语言会比较生硬,晦涩难懂。
这本书会把那些由于知识局限性导致的难以描述清楚的疑惑都回答了,让你对操作系统有更清晰更全面的认识。
我曾经对操作系统的很多实现细节产生过疑问,但 google 半天也找不到满意的回答,由于是很细节的东西,关键词少了犹如大海捞针,关键词多了结果往往寥寥无几,而且还答非所问,即使能搜到很多都是带着讲一下,并没有深入探讨。
总之,这本书非常适合那些对操作系统有很强兴趣的同学,读后绝对受益匪浅。
推荐一个 github仓库,上面放了上百本经典的嵌入式,计算机书籍,可以star一下,下次找书直接在上面搜索就可以了:
github 书籍宝藏仓库
github访问不了可以访问这个:gitee 书籍宝藏仓库
计算机组成原理
《程序是怎样跑起来的》
计算机的本质本没有那么复杂,都被专家教授的一大堆外星语搞得没人想学。
这本书用人类可以理解的语言配合示例简要的介绍了cpu,内存,硬盘,操作系统等基本概念,及他们是如何演变成现在这样的。将一个概念讲出来不难,但将一个概念给别人讲懂了才难。
读完这本书,印象最深的是它当中对于补码的描述。 “将二进制数的各数位的数值全部取反,然后再将结果加1”,这种描述与我看过的教材很不一样。
我看过的教材都是说“除第一位的其他位取反”,这促使我上网进一步了解了一下,才终于明白了为什么当初我老是记不明白补码的计算方法。。。因为原本教材给出的方法就是很不自然且很生硬的做法。。。。
《编码-隐匿在计算机软硬件背后的语言》
作为电子专业的学生,看到这本书觉得很亲切,电路+数电+微机原理的科普版本。里面涉及了模拟电路,数字电路,组成原理,汇编语言,操作系统,高级编程语言等计算机专业课程。特别偏重模拟电路和数字电路。
如果在我大二的时候看到这本书,我的数电、计算机原理乃至整个大学生涯的理科知识结构都会有翻天覆地的变化。
作者用丰富的想象和清晰的笔墨将看似繁杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。更重要的是,你会因此而获得对计算机工作原理较深刻的理解。这种理解不是抽象层面上的,而是具有一定深度的。 深入浅出!从逻辑门到操作系统!
《深入理解计算机系统》
CSAPP yyds,被誉为计算机科学中的圣经。学习这本书,一定要做一下官方的实验课,如果只看书,大概能学到四成,看书+ 做lab 才可能学到七八成。
所以大家一定要去完成lab,而且这些lab都是非常有趣的,比如拆炸弹、缓冲区溢出攻击、代理服务器等。
lab链接:http://csapp.cs.cmu.edu/3e/labs.html
视频教程:https://www.bilibili.com/video/BV1iW411d7hd?from=search&seid=5426872011034560301&spm_id_from=333.337.0.0
看完你会对计算机底层机制有一个overview式的理解,清楚地知道一个"hello world"程序从编写,编译,链接,最后实际运行的全过程。
作者在开篇提到,"如果你全心投身学习本书中的概念,完全理解底层计算机系统以及它对应用程序的理解,你会步上成为为数不多的大牛之路"。
没错,是"步上","逐渐成为"大牛。CSAPP是一本很基础的书,糅合了计算机组成原理,操作系统,体系结构,网络编程,并行程序设计原理等课程的基础知识。
除第一章外,每一章甚至是一小节都可以扩展成一本书来讲授。对于刚接触编程,或者像我这种非CS专业出身的人来说,这是一本方向性的书,它会告诉你,要想成为一个优秀的程序员,你应当重点理解哪些计算机底层原理,告诉你应该在以后的自学过程中,应该重点学习哪些课程。
不了解底层,永远不可能写出好的C程序,也不可能写出高效的程序。计算机没有那么智能,不会思考,只会按照数字逻辑模式去判断问题,这就需要程序员对计算机原理有一定了解。
计算机网络
《网络是怎样连接的》
将一个又大又硬的核桃 砸破,掰开,揉碎,喂给你吃,夫复何求?读起来真的十分畅快,少有些晦涩的字词句需要反复咀嚼,多的是基本简单易懂的解释和说明。
开局就给出整本书的整体建筑架构,章章开头分析咱到第几层了,还有几层,又点明几个重点,段落间还有些小总结,重要的是插图做的太好了,抽象变具体图起到了极大的作用。读着能让我觉得有种自己学到了,赚到了的感觉,真的棒。
《计算机网络:自顶向下方法》
一本很适合自学的书,讲解细致而富有条理,同时略去了很多细枝末节的信息,从而不至于让初学者无所适从。可以说是学计算机网络最好的图书,没有之一。
无论是对每一层的解释,还是整个计算机网络的总体描述都通俗易懂由浅入深,第七版还更新了sdn等比较新的内容与时俱进,唯一的缺点就是翻译在一些地方不够认真,有能力还是看原版比较好。
《TCP/IP 详解》
计算机网络入门书籍,全面度还是不错的,虽然举例上有点老。想对网络协议有较全面了解的可以一看,但卷一关注的是协议部分。
推荐一个 github仓库,上面放了上百本经典的嵌入式,计算机书籍,可以star一下,下次找书直接在上面搜索就可以了:
github 书籍宝藏仓库
github访问不了可以访问这个:gitee 书籍宝藏仓库
Linux环境
《鸟哥的LINUX私房菜》
最好的中文Linux入门书,案头必备的工具书,内容很全,基本想知道的都可以在里面找到,适合当作工具书来查阅,不适合通读。
《UNIX环境高级编程》
百科全书式的书籍,思路清晰,借着一圈儿介绍各种系统调用的过程,基本上就顺带把每个 api 后面的实现大概也都讲了。
翻译有些生涩。建议先快速通览,然后用到时再细细翻看所需章节。
《UNIX网络编程》
unix网络编程的宝典,这是一本很厚的书(800页),但是如果学完这本书就以为精通网络编程的话,那就错了。
网络编程水很深,学完这本书只是个开始。 我个人觉得很多章节不用细看,大致了解就行,遇到的时候有能有映像,然后翻出来再详细看看,当手册用。
《Linux命令行与Shell脚本编程大全》
嵌入式开发中,shell脚本偶尔也会用到。这本书既有基础又有进阶。日常工作中很难系统性学习,通过这本书可以查缺补漏。
有些脚本用shell写估计比Python会快一些,前提是对shell要足够熟悉!总的来讲这本书还是不错的!
Linux驱动
《Linux设备驱动开发详解》
这本书当作驱动开发的入门书籍不错。特别是里面讲的device tree以及platform bus部分,解释了之前的一些疑惑。
整体而言这本书尚可,挺实用,可以作为入门,但不适合深入学习。
《Linux设备驱动程序》
对于写Linux驱动的人来说, 这本书应该是教科书级别的!经典的书籍就是一时半会看不懂,建议大家实践之后再回过头来看一看。
虽然现在的linux设备驱动的接口和作者写书时的差别已经很大了,但是其中的主要框架基本没有什么变化。
可以根据自己的兴趣去阅读一个完整的驱动,再通过驱动模型的视角去理解一个驱动如何在模型中表现,就可以把整个驱动的框架了然于心了。剩下的就是去熟悉特定类型驱动的特点和对应接口了。
Linux内核
《Linux内核完全剖析-基于0.12内核》
首先膜拜一下赵博士,通过这本书能感受到他钻研的态度和无私分享成果的肚量。
如果想了解一个操作系统的实现过程,那么这本书就是你的最佳选择,它选择Linux 0.12内核讲解了整个内核代码,一个简单的操作系统就是这样子的!
强烈建议所有欲深究系统编程的同学们通读一遍,一方面对x86系统会有一个比较深刻的理解,另一方面对提高阅读代码能力也有很大的帮助 。
《Linux内核设计与实现》
这本书对于想玩Linux内核开发的人来说,算得上是入门宝典了。基本上涵盖了Linux内核开发需要的知识,虽然有些地方写得不够深入,但我现在每读一次都有新的理解和收获。
《深入理解LINUX内核》
经典无需多言!内核设计里有不少精妙绝伦的设计值得学习和揣摩!
这本书主要内容包括进程管理,内存管理,虚拟文件系统,设备驱动等。读完这本书,对Linux中断的硬件原理,进程调度类型时间片原理,内存缺页中断处理流程这三部分技术内容领悟更加深刻。
唯一的缺点就是翻译的有点生硬, 建议与英文原版对照一起阅读。
《深入Linux内核架构》
讲的很细致,基于 2.6 的源码来讲解,但是几乎所有东西在 5.0 里依然是适用的。此书要和《深入理解内核》结合起来看,简直完美极了。
《Linux内核源代码情景分析》
基于场景跟着作者去阅读内核源码,学习效果还是很好的。作者对各个核心的功能从入口到出口一步步详细的解释,将各个函数根据功能串联起来,形成一条条清晰的主线,形成一个有机的整体。
书本虽然很厚,阅读起来非常畅快,跟看小说一样。书本也不止是剖析代码,而是先把概念讲的很清楚。不必在乎它的源码版本老旧,核心的框架还是一样的。
这本书对相关细节的描述非常清楚,缺点就是在一堆又一堆代码中穿梭找不到森林,很容易迷失掉自我。就好像是用source insight跟踪函数一样,懒得读源代码的朋友,可以先读读这本。
。。。。未完待续,后续会整体得更完善,更加成体系。
我整理的这些书大家可以在这里免费白嫖,都是嵌入式领域的经典书籍,从入门到深入理解,整理全了!
推荐一个 github仓库,上面放了上百本经典的嵌入式,计算机书籍,可以star一下,下次找书直接在上面搜索就可以了:
github 书籍宝藏仓库
github访问不了可以访问这个:gitee 书籍宝藏仓库