嵌入式软件开发-书籍推荐

时间:2024-03-16 08:58:19

作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux

关注下方公众号,回复【书籍】,获取 Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章( PDF 格式)。

最近,有同事问我:如果从零开始学嵌入式软件开发,有哪些好书值得推荐。

于是就花点时间,把我认为不错的一些好书整理了一下,在这里分享给大家!

马上春节了,购买书籍的电商都在打折促销,趁此机会多拿下几本,毕竟阅读纸质的书籍是电子版本不可比拟的。

如果您口袋中的银子不多,也可以参考文末的PDF 电子版下载链接

计算机系统

第 1 本《深入理解计算机系统》

9.8分!

编程人员应该人手一本的五星好书

如果想全面、深入的了解计算机系统,不要再找其他书籍了,这一本就够了

最后,表扬一下出版社:纸张用的非常好,而且是彩色印刷,对于这种大部头书籍,阅读起来很友好!

第 2 本《NULL》

把第一本书再看几遍!

Linux 系统

Linux系统相关的书籍就多如牛毛,而且有很多的细分领域。

对于嵌入式开发来说,需要按照自己的需求来选择相应的细分领域和深度的书籍来系统学习。

如果是从零开始,想对Linux有一个循序渐进、由浅入深的学习,下面这5本书足矣,千万不要贪多!

如果是内核开发、驱动开发、网络开发等,那么后面有几本书也是很不错的。

第 1 本:《鸟哥的Linux私房菜》

相信很多小伙伴在刚入门Linux的时候,都会选择鸟哥的 Linux 系列书籍,因为内容讲解的真的是通俗易懂,完全就是站在小白的角度来讲解的,保姆级的粒度、全面而详细地介绍了Linux操作系统。

从安装操作系统开始,介绍文件系统、文件、目录与磁盘的管理;shell脚本;文字编辑器vim;账号的管理,系统与程序的管理等等,所有基础内容一网打尽!

各种功能和命令的介绍,都配以大量的实例操作和详尽的解析,是初学者学习Linux不可多得的一本入门好书。

第 2 本:《UNIX环境高级编程(第3版)》or《Linux/UNIX系统编程手册》

这明明是两本书,为什么要放在一起推荐?

因为这两本书的定位是一样的,都是以Linux应用层的开发为主,可以分别翻阅一下目录或部分章节,然后根据自己的需要和习惯来选择其中的一本就可以了。

这本书被誉为 UNIX 编程“圣经”,我以前学习的时候看的是第二版本(浅蓝色封面)。

书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了众多应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。

本书的最大特点就是深度和全面,适合所有层次 UNIX/Linux程序员,可以作为手边的参考书。

这本书分为上下两册,主要以Linux应用层开发为主,Linux系统编程中的关键概念讲解特别透彻!

内容包括:高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用posix线程技术编写多线程程序,创建和使用共享库,运用管道、消息队列、共享内存和信号量技术来进行进程间通信,以及运用套接字API编写网络应用等内容。

在阅读的过程中,如果遇到与计算机平台相关的内容不理解时,可以查阅《深入了解计算机系统》这本书。

第 3 本:《现代操作系统:原理与实现》

这是2020年初版的“新书”,也就意味着书中的内容是跟得上时代的。

这本书并不是专门针对Linux操作系统的,而是着眼于各种不同的操作系统设计,把每一个操作系统都要解决的共性问题进行抽象,来讲解常见的设计思路。

例如:操作系统结构、内存管理、进程与线程、操作系统调度、进程间通信、同步原语、文件系统与存储、设备管理和系统虚拟化

读这本书不要指望能获得具体的编程技能,个人觉得真本书最大的收获就是:站在一个更高的层次,以全局的角度来理解一个操作系统包括哪些模块,每一个模块的常见解决方案是什么。

对操作系统的这些结构化模块有了更清晰的认识之后,再去看Linux内核相关的书籍,就会有侧重点,知道自己该去看什么、怎么看。

第 4 本:《深入理解LINUX内核》

Linux内核相关的书籍,如果只推荐一本的话,那就是它了,Linux kernel居家旅行必备!

Linux内核的讲解十分的细致,从代码的角度来理解操作系统,初学者不建议直接看此书。

Linux应用层的编程有了一定的经验之后,再来学习这本书,收获会更大。

缺点:内核的版本有点老,跟今天常用的Linux内核源码有很多不同。

这就要回到阅读这本书的目的了,正因为版本比较老,所以代码量也更少一些,对于学习Linux内核反而是有好处的。

掌握了低版本的内核代码,再反过来阅读最新的Linux内核代码,学习效率肯定是不一样的。

另外,如果看这本书感觉难度太大,可以选择 《linux内核设计与实现》这本书作为中间过渡一下。

第 5 本:《程序员的自我修养》

个人觉得:这本书的豆瓣打分有点偏低了,怎么着也应该9分以上

这本书主要介绍系统软件的运行机制和原理,包括WindowsLinux两个系统平台上。

一个应用程序在编译、链接和运行时刻所发生的各种事项。

包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。

书中对装载、链接和库进行了深入浅出的剖析,如果你需要研究动态链接库,那么这本书肯定是跳不过去的,一定要读一下,强烈推荐

第 6 本:《Linux设备驱动程序》

不多说,这也是一本经典书籍,对于从事Linux驱动开发的小伙伴来说,是必备书籍!

第 7 本:《深入理解LINUX网络内幕》

系统地阐述了网络的基本概念,并指导你如何用C语言实现。

同时描述了Linux网络的全貌,解释了Linux代码是如何工作的,主要网络特性的目的,网络通信的主要问题,以及在不同解决方案间是如何抉择的。

同时,本书还包含了大量的流程图和其他图表以帮助读者理解。

C 语言

第 1 本:《啊哈C语言》入门级别

一本非常有趣的编程启蒙书,生动活泼的漫画和风趣幽默的文字,配合超萌的编程软件,由浅入深地讲述编程的思维。

对于C语言入门的小伙伴非常友好,至少不会让你的学习过程感到很枯燥。

第 2 本:《C语言程序设计-现代设计方法》中级

如果只推荐一本C语言书籍,我会推荐这一本!

这本书最大的特点就是:兼容了全面性,并且有一定的深度。

每一个章节从语言层面开始,一直深入到系统调用层面,由浅入深的讲解每一个知识点。

在比较深入的部分,会提出一些非常有启发性的问题来引导读者进行思考

我认为这本书,无论对于刚进入C语言编程的初学者,或者对于工作多年的大牛,都是值得一读的,可以对C语言的知识进行全面的梳理。

如果您的工作是Linux应用层开发,那么这本书就是你研究 C库、研究系统调用的前哨。

第 3 本:《C Primer Plus》中级

我个人觉得,这本书与《C语言程序设计-现代设计方法》相比,少了一些理论,多了一些实践操作。

从难度上来说,也稍微低那么一点点,因此也更适合刚入门C语言的初学者。

可以作为辅助教材,和上一本书结合起来看,不需要从头到尾看一遍。

第 4 本:《C陷阱与缺陷》中高级

这本书出版的年份比较早,但是既然在今天依然收到欢迎,就说明它是一本经典书籍

这本书不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍

分别从词法分析、语法语义、连接、库函数、预处理器、可移植性缺陷等几个方面分析了C编程中可能遇到的问题。

在项目开发过程中,如果能遵守书中给出的一些忠告,那么在领导、同事的眼中,你一定是一个逻辑严谨、思维缜密、编程造诣很深的编程高手

C++ 语言

C++语言博大精深,也很恐怖。

Linus曾说过:“C++是一门很恐怖的语言,而比它更恐怖的是很多不合格的程序员在使用着它”

如果你是C++初学者,千万不能抱着速成的心态去学,不然就陷入一知半解状态,这个状态是很危险的,写出的代码就是在给自己下套。

为了成为一个合格的C++程序员,需要在错误中总结经验教训,通过阅读 C++ 经典好书和优秀的开源代码来磨练自己。

结合我自己的开发经历,我只推荐下面这6本书:

注意:选书的时候,一定要选择按照C++11之后的标准来讲解的。如果是按照之前的旧标准来讲解,那么很可能一本书学习结束之后才发现:白看了!

第 1 本:《C++ Primer Plus 第6版中文版》(入门级)

这本书主要是针对C++初学者来讲解的,如果说存在缺点的话,就是讲得太细了,很锻炼一个人的耐心!

每一章都会标注出重点,并且对习题做了详细解答。

如果是初学者,有理解不了的地方,千万不要恋战,直接放过去。

学习完之后,只要对C++有整体的概念即可,要把主要经历放在下面的第 2 本书上,那才是真正的权威之作。

当然了,理解难度也会上一个台阶,Plus这本书只是开胃菜。

第 2 本:《C++ Primer》(中高级)

如果只能推荐一本书,绝对是这一本!

看看翻译和审校的阵容就知道这书值得拥有,这本书在C++领域的权威地位也是不可动摇的!

C++大师Stanley B. Lippman的丰富实践经验,C++标准委员会原负责人Josée LajoieC++标准的深入理解,以及C++先驱Barbara E. MooC++教学方面的真知灼见外,更是基于全新的 C++11标准进行了全面而彻底的内容更新。

另外,这本书不是读了一遍就可以的,而是要边读边做笔记,放在手边作为参考书籍。

遇到不懂、模糊的概念,随时翻阅一下。三遍之后,C++功力倍增!

如果英文不错的话,也可以阅读英文原版。

第 3、4 本:《C++ Primer》,《More Effective C++(中文版)》(高级)

先看一下译者:侯捷老师,这可是大名鼎鼎的C++书籍翻译大师,在B站上,C++相关教学视频最好的就是侯捷老师了(不接收反驳)。

他的视频含金量特别高,会穿插很多个人对C++语言、标准的个人思考。

再回到这两本书,有个颇有名气的段子:C++程序员可以分为两类,读过Effective C++的和没读过的

这两本书按照不同的主题来透彻的讲解一个知识点,有理论、有示例,对于一个中级C++开发者,很多地方看不懂是很正常的。

对于初学者,还是要把上面的两本书啃完之后,再来学习Effective系列会更有信心一些!

另外,这不是读完一遍就可以束之高阁的快餐读物,也不是用以解决手边问题的参考手册,而是需要你去反复阅读揣摩的。

第 5 本:《深度探索 C++对象模型》(高级)

学习任何一门编程语言,心中一定要有内存模型这个概念,也就是一个对象(包括基础类型)在内存中是如何布局的(也就是在内存中是如何存放的)。

理解了C++的对象模型,就会对一些晦涩的知识点,例如:虚表、多态等机制的底层实现会有更深入的理解。

这本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。

这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。

如果你对C++底层机制感兴趣,这本书一定会让你大呼过瘾!

第 6 本:《C++标准库(第2版)》(初、中、高级)

也是侯捷老师翻译的大作!

这本书详细讲解了每一标准库组件,包括其设计目的和方法、复杂概念的剖析、实用而高效的编程细节、存在的陷阱、重要的类和函数,又辅以大量用C++11标准实现的实用代码范例。

面对这本大部头,就不要指望从头到尾系统学习了,把它当做一本字典,作为参考书是最好不过了,因为它真的太厚了!

汇编语言

首先要明确:学习汇编语言的目的是什么!

学习目的不同,选择的书籍和需要掌握的程度也就不同。

对于嵌入式开发来说,汇编语言一般用在这几个场合:系统引导代码、驱动程序、应用程序调优

如果是是这个学习目标的话,下面这3本书就足够了。

第 1 本:《汇编语言(第4版)》(王爽)

如果是从零开始学汇编,一定要把这本书作为第一学习教材!经典中的经典

这是一本讲解8086 CPU汇编语言的入门书,内容安排得很好,小白也能很好上手。

循序渐进、通俗易懂,每一个示例程序都是经过精心设计的。

采用了全新的结构对课程的内容进行组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索。

深入本质的层面上对汇编语言进行讲解;对关键环节进行深入的剖析。

第 2 本:《x86汇编语言-从实模式到保护模式》(李忠 / 王晓波 / 余洁)

如果说第一本书是以学习汇编语言为主的话,那么这一本就是把汇编语言与x86平台紧密结合的经典书籍

虽然x86架构博大精深,但是跟着作者的思路一路学习下来,一点都不会觉得枯燥无味。

如果完整的学习了这本书,不仅仅是对汇编语言有很深入的掌握,也会对x86系统的一些概念、原理、机制有更深入的理解,这对以后学习Linux操作系统会有非常大的帮助。

第 3 本:《汇编语言程序设计》(Richard Blum)

市面上很少有讲 GNU gcc汇编(AT&T)的书,这是为数不多的最好的AT&T ASM入门书籍,无论是实例和原理的阐述都非常简洁、实用。

书中特别是对内联汇编部分,从简单到复杂,引人入胜,基本上把所有可能的嵌入汇编代码方式都描述的清清楚楚。

另外,这本书是结合C语言来讲解的,所以对于有C语言基础的小伙伴会更容易一些。

嵌入式书籍

第 1 本:《嵌入式系统开发之道》

用平易朴实的语言,以一个完整的嵌入式系统的开发流程为架构,通过一位“菜鸟”工程师与项目经理的诙谐对话,故事性地带出嵌入式系统概念及开发要素。

并点出要成为一名称职的嵌入式系统工程师,在实际工作中所必须具备的各项知识及技能。

第 2 本:《嵌入式C语言自我修养》

这是一本专门为嵌入式读者打造的C语言进阶学习图书。

本书的学习重点不再是C语言的基本语法,而是和嵌入式、C语言相关的一系列知识。

作者以` C 语言为切入点,分别探讨了嵌入式开发所需要的诸多核心理论和技能,力图帮助读者从零搭建嵌入式开发所需要的完整知识体系和技能树。

有些读者认为这本书面面俱到,但是又面面不深入。我感觉这本书追求的就是以广度为主,涵盖了嵌入式软件开发所需要的知识体系地图,涉及到具体的知识点时,还需要结合其他的书籍。

第 3 本:《嵌入式Linux基础教程(第2版)》

全面深入而又简明地阐述了构建嵌入式Linux系统的精髓。

书中不仅剖析了嵌入式Linux系统,而且讲述了处理器、内核、引导加载程序、设备驱动程序、文件系统等关键组件,介绍了嵌入式Linux系统的开发工具、调试技术

第 4 本:《测试驱动的嵌入式C语言开发》

深入介绍如何把测试驱动的开发方法应用于嵌入式C语言开发。

包括:测试框架,与系统中其他模块进行交互的代码的测试技术,如测试替身、仿制对象等,设计与持续改进代码,如写出更好代码的一些重要原则,建立可测并灵活设计的高级技术,改进已有代码的实践方法。

第 5 本:《实时嵌入式系统 设计原则与工程实践》

这本书豆瓣上目前没有评分,可能是因为它使用的场景不是那么普遍吧。

如果你的项目或产品,对于系统的实时性要求比较高,那么这本书里的很多设计思路就非常的有帮助!

在嵌入式实时系统的领域,大多是依靠实时操作系统来达到实时性的目的的。

但是在X86平台上,对于应用层如何进行实时性任务的设计,市面上的书籍真的不多。

这本书就是从这个角度来量化,如何对应用层的任务(线程)进行调度,以达到产品设计要求。

电子-版本PDF下载

在学习过程中,道哥积累了部分经典的电子书籍,大家根据学习需要自取。

在公众号【IOT物联网小镇】后台回复关键字:220120,即可获取下载地址

如果可以的话,还是尽量购买纸质书籍,支持作者!

原创不易,请支持一下道哥,把文章分享给更多的嵌入式小伙伴,谢谢!


------ End ------

推荐阅读

【1】《Linux 从头学》系列文章

【2】C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻

【3】原来gdb的底层调试原理这么简单

【4】内联汇编很可怕吗?看完这篇文章,终结它!

其他系列专辑:精选文章应用程序设计物联网C语言

星标公众号,第一时间看文章!