嵌入式Linux有哪些好书推荐? | 您所在的位置:网站首页 › codewarrior代码示例 › 嵌入式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典藏大系 ![]() 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 学习资料大全」,免费共享给大家! ![]() 据说有小伙伴靠这份攻略顺利进入 BAT 哦,所以一定要好好学习这份资料! 几乎覆盖了 Linux 基础学习的方方面面,非常适合初学者入门! 资料也按目录进行编排,每一章下面都有更具体的内容,具体如下: ✔ Linux 常用命令汇总 ![]() ✔ Linux 经典入门书籍 ![]() ✔ Linux 网络编程教程 ![]() ✔ Linux 成神学习线图 ![]() ✔ 22 份 BAT 面经 pdf 合集 ![]() 另外我还组建了一个「Linux 编程交流群」,群里每天大家都互相交流 Linux 学习心得,也有我们热心肠的小江美女程序媛给大家答疑。 ![]() 如果你是 Linux 新手,那我相信你可以迅速融入到这里面来,同时认识更多的编程大佬。 同样你可以靠着「10G Linux 学习资料大全」迅速度过新手阶段,让你上手 Linux 更加轻松。 大家想要上面「10G Linux 学习资料大全 + 进入编程交流群」,可以点击下方⬇️的卡片扫码进群免费领取。 ![]() |
CopyRight 2018-2019 实验室设备网 版权所有 |