⼯程师最爱读的10本经典嵌⼊式书籍,看完爱不释⼿
最近在学习⾥跟学员交流,发现很多的初学者只有单⽚机基础,或者是没有学过单⽚机,想重新学习嵌⼊式,学习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体系架构与编程
发布评论