后ARM时代,嵌入式工程师的自我修养

1 嵌入式学习的一些概念理解误区

 

不少嵌入式初学者认为,学嵌入式,就是学习ARM,就是学习开发板。买一块开发板,而后在上面“移植”u-boot、Linux内核,再使用busybox制做一个根文件系统,大功告成!以为能够出去找工做了。这实际上是有必定片面性的:首先ARM是个CPU架构,跟PC上的X86架构同样,你见过有人在Windows下面学习C/C++编程、MFC编程、网络编程、互联网编程,说本身学习X86的吗?固然,也不能否认,嵌入式平台的多样性、硬件的可定制性致使咱们在嵌入式平台上开发应用程序、驱动以前,首先要搭建这个平台,就像咱们在Windows下面要装操做系统同样,可是这仅仅是咱们学习嵌入式开发的第一步。android

 

其次,关于系统的“移植”,不少人玩了开发板以后,会在本身的简历上写本身移植过u-boot,Linux内核......其实,这种写法也是有点瑕疵的。真正的移植,往一个新的芯片或开发板上porting一个u-boot或Linux内核,那可不是一我的能干的事情,是一个团队干的事情。时钟、DDR、存储,可能牵涉到各个模块,哪里遇到问题,都须要各个模块的owner去debug,有时候甚至多是芯片的bug,或者硬件开发板的bug,这就须要咱们使用软件去解决、去规避这个坑,这都须要咱们在很短期,甚至一两天的时间去解决这个问题,须要一个团队的各个模块专家协力完成。因此说,咱们所说的“移植”,其实就像是在Windows下面安装操做系统,按照步骤完成装机。固然,经过这个过程,能够加深咱们对嵌入式系统的理解,可是咱们首先要知道的是,咱们“移植”的系统,都是芯片公司团队作好的系统镜像,咱们作的只是配置、编译、安装、甚至升级这些基本的操做。这些环境只是咱们学习嵌入式开发的平台,万里长征才走完了第一步。面试

 

2 学习嵌入式,咱们到底该学些什么?

 

嵌入式愈来愈复杂,一个SOC芯片上集成的模块愈来愈多。以手机为例,典型的嵌入式产品,咱们看看上面集成了多少模块:触摸屏、LCD、USB、WiFi、4G等无线通讯、音视频编解码IP、DDR、存储控制器、3D/2D加速、GPS、指纹识别、NFC、DMA、G-sensor各类传感器.......。能够说,如今一个手机的复杂度和硬件配置,已经超过咱们的桌面PC了。除了不断增长的硬件,软件方面,好比Linux内核,光内核代码就有1000多万行,天天更新的速度超过你学习的进度,你能学得完嵌入式的全部知识和技能吗?编程

 

早期PC时代,咱们知道能作出X86 CPU量产的也没有几家,Intel、AMD和威盛。可是嵌入式时代不同了,ARM的IP受权模式致使不一样的芯片厂商百家齐放,不一样的SOC平台和开发板眼花缭乱,针对不一样行业需求定制的SOC平台雨后春笋:手机芯片、平板芯片、视频安防、物联网、汽车电子、工业控制,甚至人工智能AI芯片....,你到Linux内核的ARCH下面能够看看有多少种CPU架构,再到arch/arm下面看看有多少种开发平台,这还只是加入到内核mainline的平台,算上没有加入Linux内核主线的各类平台,其实数量更多。服务器

 

众多的芯片架构、不一样的开发板平台,咱们该如何去学习?网络

嵌入式和PC的概念也愈来愈模糊了,Intel已经推出X86架构的CPU和嵌入式产品了,好比平板。ARM也开始进军服务器和笔记本领域了。不管什么CPU架构,ARM、X8六、MIPS、PowerPC,还有最近火热的物联网芯片,不管是作嵌入式产品,仍是PC、服务器,他们的底层本质其实都没有变,都是计算机原理和系统架构,都是冯诺依曼的计算机架构,图灵原型机的各类实现。架构

 

不断复杂的软硬件系统,对嵌入式工程师或者学习者来讲是一个挑战。这对咱们自己的知识和技能有一个更新的要求。早期51单片机时代,咱们能够本身使用面包板或者本身画PCB,作一个开发板,而后在上面开发软件。软件、硬件本身全搞。如今不断复杂的SOC平台,再想一我的全搞,软硬通吃,基本不可能,这也致使咱们须要分工协做来完成。首先软硬件的分工,各司其职,各自精通本身的领域,而后进行软硬件整合,协做开发。再次,软件方面,嵌入式软件也愈来愈复杂,Linux内核1000多万行,android源码下载下来就占几个G的空间,本身想全搞,一样不可能,一样须要进行分工。好比android,须要分为BSP工程师、Linux内核工程师、驱动工程师、android中间层开发工程师、APP开发工程师。对于一个Linux内核,也须要分工,各个模块一样进行分工:Linux内核的USB子系统、音频子系统、视频编解码、文件系统......把其中一个模块你搞精通了,工资绝对不是问题。框架

 

对于嵌入式学习者来讲,咱们该学习什么,或者说如何学习?才能提升本身的职场竞争力,或者说对于一个新手来讲,如何经过自学,达到公司的用人标准和技术要求,找到一份本身想要的工做?学习

 

首先,你要学会作减法,从现实出发,要有这样一个意识:我不可能精通全部的嵌入式技术,学会坚持,制定合理现实的小目标。不少人喜欢那种不切实际的广告轰炸营销,击中你心理上的某个软肋,某个G点,一会儿兴奋起来。越熬越浓的心灵鸡汤,并不能解决咱们吃饭的生存现实问题。不少人,包括我,在学习的时候,都喜欢给本身树立各类路线、计划、日程表。制定计划时激情满满,热情高涨,激动得睡不着觉。计划宏伟而饱满,仿佛成功就在眼前。可是每每不切实际,每每在早期,遇到各类困难,各类坑,各类拖延致使没有坚持下来,最后夭折。而后接着制定下一个宏伟的计划,继续夭折,生活周而复始,day after day。观察咱们生活周围,真正作出成绩的都是那些基于现实出发,能一路坚持下来的人,day by day。有时候你会发现,并不以为他们有多聪明。人工智能

 

其次,保持本身的兴趣,说白了就是为了坚持下去。见过不少人想学习嵌入式,花了不少米买一块开发板,激情满满,过一段是过去再看,已经不折腾了。嵌入式开发难,难在哪里呢?主要在于开发环境的搭建,软件调试上,不像在Windows上使用VC开发程序,集成开发环境都帮你弄好了,各类断点、单步、查看堆栈、寄存器、内存窗口。而嵌入式不同,硬件环境搭建会遇到各类各样的问题,各类电脑的兼容问题,各类莫名其妙的问题,有时候着实让人抓狂,时间久了,慢慢地学习的激情殆尽,也就不想学习了。这还不算什么,更严重的是,不少人学习嵌入式遇到挫折,每每会打击人的自信,以为本身能力不行,智商不够,不适合干这行,在心理留下了阴影。对于我的学习者来讲,买了开发板,你不买配套的万用表、示波器等调试设备,遇到硬件问题也是束手无策,没法解决。其实咱们能够彻底使用其它的平台去开展咱们的研究和学习,好比QEMU,一款能够仿真开发板的开源软件,使用这款开源软件,咱们能够在电脑上虚拟一个世面上流行的开发板,而后再在这个仿真的开发板上跑u-boot、Linux内核、挂载根文件系统,使用和开发板同样的源码,运行效果和真实的开发板是同样的。并且,使用QEMU的好处就是,“硬件”永远不会出问题,可让咱们避过硬件的各类坑,腾出更多的精力去研究嵌入式软件的各类架构、编程技能、内核驱动....,这些才是嵌入式工程师的核心竞争力,须要花大量的时间不断地去积累,去磨合,去提升的。把大量的时间耗在一个本该不属于学习范畴的硬件bug上或者硬件环境不兼容上,不划算,由于你之后进公司后,遇到一样的问题,找硬件工程师,半分钟帮你搞定。因此说,选择一个理想的嵌入式学习平台,尤为对于初学者来讲,很重要。操作系统

 

最后,要保持学习的深度,刻意练习。不要让本身永远待在学习的温馨区,要学会挑战本身,不断去扩展本身知识的边界,完善本身的知识体系和技能。不少人买了开饭,按照教程,“移植”了u-boot,Linux内核,制做了根文件系统,而后就陷入了迷茫:接着要干什么?要学习什么?想学习又感受深刻不下去,东一耙子,西一耙子,看看这,看看那,时间不知不觉就过去了。其实,学习嵌入式,基本的嵌入式知识和理论学习仍是必要的,不少人推崇边作边学,到项目中学习,实践出真知。固然这也是一个方法,可是也有弊端,那就是学习的不系统,不少有心人到后来仍是得回来补课,完善本身的知识体系和技能。不少人玩开发板,烧写镜像,玩得贼溜,可是你知道这里面的原理吗?知道JTAG怎么下载的吗?Jlink和JTAG有什么区别?为何PC上要装个JTAG软件而Jlink不用?程序的编译和连接是怎么样的?为何内核镜像要下载内存的某个地址?换个地址行不行?为何咱们编写的程序要在有OS的环境下运行,在ARM开发板裸机环境下,你能写一个跑起来的程序吗?只有对这些问题深刻思考,你才会对嵌入式有一个更深的认识,超越了平台,一通百通。

 

 

3 80%的嵌入式知识和技能,其实跟硬件平台无关

 

嵌入式开发须要的知识体系和技能,80%其实跟硬件平台无没有无关系的。好比计算机系统原理、编程技能、程序的编译连接、你对Linux内核的理解、设备模型、驱动架构、项目管理等等。

 

真正跟硬件平台有关的,好比驱动开发,上面的框架是跟平台无关的,下面跟各个硬件平台的适配部分,可能跟硬件平台就有关系了,寄存器配置、开发板硬件配置等。而对于嵌入式工程师来讲,尤为是驱动开发工程师,等你工做后,你会发现,跟应用开发相比,真正要写的代码量不多,每每只须要改几行代码。可是每每这几行的代码量,须要你深厚的背景知识:硬件知识、通讯协议、对芯片、开发平台资源掌握、对Linux内核架构、设备模型、驱动框架的理解,这些才是嵌入式工程师的核心竞争力。

 

若是你看到不少广告还在以开发板或者平台做为噱头,能拿多少工资做为宣传,这时候你的脑海里要有这种意识,这是一种推广宣传。工资多少是由你本身的水平和市场大行情决定的,虽然在面试时HR会对你自己的水平评估有一些偏差,可是要相信,时间会证实你本身的真实价值,不断提升本身的知识水平和技能才是王道。真正的技术须要本身花时间慢慢吸取、积累、消化,内化为本身的知识体系和技能。外在的心灵鸡汤或高煲老鸭汤,只能让你一时地热情高涨,产生暂时的错觉,并不能真正的提升技能。

相关文章
相关标签/搜索