您的位置首页  家电资讯  新闻

工程师最爱读的10本经典嵌入式书籍,看完爱不释手

  • 来源:互联网
  • |
  • 2020-08-12
  • |
  • 0 条评论
  • |
  • |
  • T小字 T大字

最近在学习群里跟学员交流,发现很多的初学者只有单片机基础,或者是没有学过单片机,想重新学习嵌入式,学习Linux,但是对很多概念都比较陌生,导致不知道要学什么,也不知道学了之后有什么用。所以,今天就抽着自己稍有一些空余时间,给大家简单讲解一下单片机跟嵌入式,两者之间到底有什么区别,还有说说嵌入式具体要怎么学。

单片机和嵌入式Linux区别

所有的电子产品,所用技术都可以认为要么是单片机,要么是Linux;GUI方面主要是QT/Android,它们都是运行于Linux之上的。

迄今为止,使用单片机设备肯定远远超过Linux。很多初学者也是先从单片机开始学起,从单片机进入电子工程师这一行业。

日常生活中,有哪些产品使用单片机、Linux呢?下面举一些例子:

我们设计一个产品时,是使用单片机还是Linux,取决于成本:硬件成本、软件成本、维护成本、升级成本。而不应该根据个人偏好来选择:我喜欢单片机,所以就排斥使用Linux;我喜欢Linux,就排斥使用单片机。为了有更多的选择,我们需要既懂单片机,又懂Linux。

嵌入式Linux系统的组成

下面我们用类比和逻辑推导出嵌入式Linux系统的组成,没错,“推导”。

从上图可以知道:

① 组成:

嵌入式Linux系统 = bootloader + linux内核 + 根文件系统(里面含有APP)。

② bootloader:

它的目的是启动内核,去哪等读内核?读到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash里外设的驱动能力,为了调试方便还会有网络功能。

所以,可以认为 booloader = 裸机集合,它就是一个复杂的单片机程序。

③ Linux内核

Linux内核的最主要目的是去启动APP,APP保存在哪里?保存在“根文件系统”里。“根文件系统”又保存在哪里?在Flash、SD卡等设备里,甚至可能在网络上。所以Linux内核要有这些Flash、SD卡里设备的驱动能力。

不仅如此,Linux内核还有进程调度能力、内存管理等功能。

所以:Linux内核 = 驱动集合 + 进程调度 + 内存管理等。

嵌入式Linux怎么学,需要掌握哪些能力?

曾经我碰到一位学员,他说得很好。学习嵌入式,首先就是要观其广度,再究其深度。在学习过程中,有时候甚至要“不求甚解”,很多时候有疑问就先保持着,一边学习一边寻找问题答案,久而久之,这些疑问就自然解决了。

什么意思呢?举个栗子:就比如嵌入式课程中涉及汇编知识,如果你要彻底弄清楚,你需要去学习《ARM架构与编程》;当你学完这本书,你的同学搞不好已经可以上手工作了。

所以,你需要随时保持做笔录的习惯,并且在项目实践、阅读中积极去寻求答案案,通过应用所学知识来解决实际开发问题,达到学以致用。

说完学习的广度,下面再来说学习方向。

目前, 嵌入式主要分为三个方向。一是系统开发,主要侧重负责嵌入式系统的开发环境搭建、内核原理、交叉编译等工作; 二是嵌入式Linux应用开发,主要专注于Linux应用编程、内核编译、系统调用等方面; 再一个就是底层驱动开发,重点在于对嵌入式系统下的驱动开发、内核的深入分析。

在这里你又要问了,既然嵌入式Linux学习方向这么多,那我该如何入门嵌入式?选择哪一条道路会适合我呢?接下来的这些疑问,我会在学习方法里面讲到。

建议嵌入式Linux学习方法

1)先不要打破砂锅问到底

嵌入式涉及的东西太多太杂了,如果心里没有主线,碰到什么都要去研究个透彻,最终反而忘记自己要学什么了。

嵌入式涉及硬件知识、软件知识,软件里涉及汇编、ARM架构、C语言、Makefile、Shell;又分为bootloader、内核、驱动、基本的APP、GUI。

比如:我们会用到Makefile,了解它的基本规则,会用我们提供的Makefile就可以。

不需要深入研究那些make函数,因为在工作中都有现成的Makefile给你使用,不需要自己去编写一套Makefile。何必花上好几天去深入研究它呢?

比如:我们会用到bootloader,难道又要花上几个月来深入研究u-boot吗?工作中基本不需要改u-boot,会用那几个命令就可以。

甚至有些学员先去买本shell的书来学习shell命令,何必?我们在视频中用到什么命令,你不懂时再去百度一下这些命令就可以了。

不要脱离初学者的主线:应用基础、驱动基础。有了这2个基础后,你想深入研究某部分时,再去花时间吧。

2)思路要清晰,不怕抄代码

视频里的代码,请你一定要自己去写一次、写多次。为什么我现在写驱动那么熟?记得当初我在华清远见上课时,每次上课我都要给学生写一次那些驱动,十几次下来闭着眼睛都知道内核的套路了。

记不住那些函数?我也记不住,我都是去参考同类的驱动程序,这又不是闭卷考试。但是要理清楚思路,你写这个程序要完成什么功能、怎么实现这些功能?这个要弄清楚。

有了思路后再写代码,不知道怎么写?没关系,看看视频,看看示例,然后关闭视频看看能否自己写出来。

3)对自己的方向很了解,我只能带你到这里了

我的专长是操作系统,是快速地带领大家掌握一些项目开发的基础知识。

如果你决定深入研究某方面时,我并不能带你多久。你要去看源码,去看这方面的专业书籍。

比如:想深入钻研内核的内存管理时,它有页表映射(你需要阅读ARM架构的手册)、SLAB分配器、vmalloc/malloc实现、mmap实现、缺页中断、父进程子进程之间的页面管理等等,内容非常多。有时候连书籍都没有,你需要直接啃代码。

当你想从事某个行业时,就需要深入研究行业相关的知识。

比如:CAN总线,它可以写成一本书:CAN协议、CAN报文、Socket CAN、车身网络拓扑结构,CAN应用报文,CAN网络管理报文,CAN诊断报文。

想做物联网网关,需要深入研究MQTT,MQTT协议相对简单,但是MQTT英文原版协议有130多页,中文版有近100页,是一本小书了。

每个行业都有自己的业务逻辑,在掌握基本的编程能力之一,你需要结合具体的业务去深入学习。

为帮助大家尽快掌握学习嵌入式Linux,从看懂硬件工作原理、学会嵌入式软件操作、理解数字电路、微处理器结构、嵌入式Linux系统组成应用,掌握基本的应用基础、驱动基础,再逐步深入学习Linux系统编程、驱动开发和Linux内核分析。编者精选了十本经典的嵌入式Linux系统学习全阶书籍(包含基础入门+设备驱动+系统内核开发),供大家学习参考。

1. Linux从入门到精通——Linux典藏大系

本资料提供10G+配套随书光盘内容、课程PPT讲义、视频教程、嵌入式开发软件、工具安装程序及对应开发环境。

Linux典藏大系:Linux从入门到精通。课程共29章,分为7篇。内容包括Linux概述、Linux安装、Linux基本配置、桌面环境基本操作、Shell基本命令、文件和目录管理、软件包管理、磁盘管理、用户与用户组管理、进程管理、网络配置、浏览网页、收发邮件、文件传输和共享、远程登录、多媒体应用、图像浏览和处理、打印机配置、办公软件的使用、Linux编程工具、Shell编程、服务器基础知识、Apache服务器、vsftpd服务器、Samba服务器、NFS服务器、任务计划、防火墙和网络安全、病毒和木马防范等。

本书籍非常适合广大Linux初中级用户、开源软件爱好者和大专院校学生阅读,同时也非常适合准备从事Linux下开发的各类人员。

2. ARM体系架构与编程

本书共为分14章,对ARM处理器的体系结构、指令系统和开发工具进行了比较全面的介绍。其中包括ARM体系、ARM程序设计模型、ARM汇编语言程序设计、ARM C/C++语言程序设计、ARM连接器的使用、ARM集成开发环境CodeWarrior IDE的介绍及高性能的调试工具ADW的使用。并在此基础上介绍一些典型的基于ARM体系的嵌入式应用系统设计的基本技术。通过阅读本书,可以使读者掌握开发基于ARM的应用系统的各方面的知识。

本书既可作为学习ARM技术的培训材料,也可作为嵌入式系统开发人员的参考手册。

3. 嵌入式Linux应用开发完全手册

书籍全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM汇编指令等),硬件部件的使用及编程(囊括了常见硬件,比如UART、I*IC、LCD等),UBoot、Linux内核的分析、配置和移植,根文件系统的构造(包括移植busybox、glibc、制作映象文件等),内核调试技术(比如添加kgdb补丁、栈回溯等),驱动程序编写及移植(LED、按键、扩展串口、网卡、硬盘、SD卡、LCD和USB等),GUI系统的移植(包含两个GUI系统:基于Qtopia和基于X),应用程序调试技术。

4. Linux就该这么学

本书基于RHEL 7系统编写,面向零基础读者,从Linux基础知识讲起,然后渐进式地提高内容难度,详细讲解Linux系统中各种服务的工作原理和配置方式,以匹配真实生产环境对运维人员的要求,突显内容的实用性。本书每章都带有大量的图、表、命令示例以及课后习题,旨在增强读者的理解能力并巩固所学知识。

5. Linux命令行大全

本书主要介绍Linux命令 行的使用,循序渐进,深入浅出,引导读者全面掌握命令行的使用方法。

书籍共分为四大部分。第一部分开始了对命令行基本语言的学习之旅,包括命令结构、文件系统的导引、命令行的编辑以及关于命令的帮助系统和使用手册。第二部分主要讲述配置文件的编辑,用于计算机操作的命令行控制。第三部分讲述了从命令行开始执行的常规任务。类UNIX操 作系统,比如Linux,包含了很多“经典的”命令行程序,这些程序可以高 效地对数据进行操作。第四部分介绍了shell编程,这是一个**的初级技术,并且容易学习,它可以使很多常见的系统任务自动运行。通过学习 shell编程,读者也可以熟悉其他编程语言的使用。

6. Linux设备驱动开发详解

随书提供2.2G配套全书源程序,及驱动部分源码。

本书介绍了Linux设备驱动开发理论、框架与实例,详细说明了自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和I/O映射以及异步通知、阻塞I/O、非阻塞I/O等Linux设备驱动理论,以及字符设备、块设备、tty设备、I2c设备、LCD设备、音频设备、USB设备、网络设备、PCI设备等Linux设备驱动架构中各个复杂数据结构和函数的关系,并讲解了Linux驱动开发的大量实例,使读者能够独立开发各类Linux设备驱动。

7. Linux内核完全注释

Linux内核完全注释 V3.0对Linux早期操作系统内核(v0.11)全部代码文件,进行了详细全面的注释和说明,旨在使读者能够在尽量短的时间内,对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux系统打下坚实的基础。书中首先以Linux源代码版本的变迁历史为主线,详细介绍了Linux系统的发展历史,着重说明了各个内核版本之间的重要区别和改进方面,给出了选择0.11(0.95)版作为研究的对象的原因。本书依据内核源代码的组织结构,对所有内核程序和文件进行了注释和详细说明。

8. Linux内核情景分析

这本书采取类似于英语教学中行之有效的情景会话的教学方法,全面深入地剖析了Linux最新版本核心源代码,并对Linux核心的独特优点和需要进一步改进的问题作了精辟的评述。上册的内容包括预备知识、存储管理、中断和系统调用、进程和进程调度、文件系统以及传统的Unix进程通讯六章。下册的内容包括设备驱动、多处理器SMP系统结构以及系统引导和初始化四章。

9. Linux设备驱动程序

本书是经典著作《Linux 设备驱动程序》的第三版。该版本已针对 Linux 内核的 2.6.10 彻底更新过了。内核的这个版本针对常见任务完成了合理化设计及相应的简化,比如即插即用,利用sysfs 文件系统和用户空间交互,以及标准总线上的多设备管理等等。本书提供了完整的示例程序,不需要特殊的硬件即可编译和运行这些示例程序。本书还在单独的章节中讲述了 pci、usb 和 tty(终端)子系统。

对期望了解操作系统内部工作原理的读者来讲,本书也深入阐述了地址空间、异步事件以及 i/o 等方面的内容。本书主要介绍:完整的字符、块、tty(终端)及网络驱动程序驱动程序的调试、中断、计时问题、并发、锁定和对称多处理器系统(smp)、内存管理和 dma、驱动程序模型和 sysfs、热插拔设备、对常见总线的描述,包括 scsi、pci、usb 和 ieee1394(火线)

10.UNIX网络编程卷(1+2)

本书分为上下两卷,是UNIX 网络编程的经典之作。第1卷深入地介绍了如何使用套接字API进行网络编程。全书不但介绍了基本编程内容,还涵盖了与套接字编程相关的高级主题,对于客户/服务器程序的各种设计方法也作了完整的探讨,还深入分析了流这种设备驱动机制。

第2卷主要从对Posix IPC 和System V IPC 的内部结构开始讨论,全面深入地介绍了4 种IPC 形式:消息传递(管道、FIFO、消息队列)、同步(互斥锁、条件变量、读写锁、文件与记录锁、信号量)、共享内存(匿名共享内存、具名共享内存)及远程过程调用(Solaris门、Sun RPC)。附录中给出了测量各种IPC 形式性能的方法。

十本嵌入式Linux工程师必读经典全阶学习书籍,资料截图如下:

10G+嵌入式Linux设计从入门到精通学习资料(随书光盘、视频教程、开发软件工具)

2.2G+嵌入式Linux项目源码、驱动源程序代码

如何领取以上全部嵌入式Linux学习资料?

若扫码失败,可联系学院助教小包

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186