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

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



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



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


嵌入式和PC的概念也越来越模糊了,英特尔已经推出X86架构的CPU和嵌入式产品了,比如平板. ARM也开始进军服务器和笔记本领域了。无论什么CPU架构,手臂,X86, MIPS、PowerPC、还有最近火热的物联网芯片,无论是做嵌入式产品,还是PC,服务器,他们的底层本质其实都没有变,都是计算机原理和系统架构,都是冯诺依曼的计算机架构,图灵原型机的各种实现。


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


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






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


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

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


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

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