嵌入式做驱动好,还是做应用好?

很多新人工作个一两年,从入门到入厅,反而可能会更加迷茫:自己当前的工作感觉没啥技术含量,做得比较杂,感觉自己很水,没学到啥东西,开始思考自己的职业方向,选一个方向深入学习,是选驱动好呢,还是应用好呢?

一方的观点是:选应用。驱动和BSP已经很成熟了,留给驱动开发工程师发挥的空间已经不多了。现在很多成熟的开发板、SDK、方案demo,根本就不用碰底层,稍微修改写配置,修改下设备树文件,拿来改一改,把主要精力放在应用业务开发上,打造出优秀的产品才是王道。

一方的观点是:做驱动。驱动技术含量高,门槛高,稳定,收入高,越老越吃香,随着芯片厂商越来越多,RISC-V架构的流行,很多底层开发的岗位将会释放出来,对做底层驱动的人来说也是一种利好。

到底选应用还是驱动呢?个人的建议是:做全栈吧!把手头上的项目做好,业务时间保持持续学习,从底层到上层,都要有所涉猎。

技术发展日新月异,行业动态起伏,在充分竞争的嵌入式行业,计划赶不上变化,要想不失业,也许保持持续学习,跟上技术的节点才是唯一选择。而对于个人来说,嵌入式行业又分为上游、下游,不同的公司,不同的职位,其实对嵌入式的技术栈要求是不一样的。

对于小公司来说,工程师可能比较少,甚至就你和老板两个人,分工一般不会这么细:移植、驱动、应用、算法、测试可能都要你做。你不需要特别精通,每一层都能玩转起来才是性价比最高的,最合适的。你的目标是快速做出产品,抢占某个细分市场,项目成功了KTV飙歌,失败了就可能提桶跑路了,所以,生存环境决定技术需求,适者生存,根本不太可能留给你太多的时间去打磨技术,一般都是使用现成的demo或者SDK来开发产品,主要核心在应用业务的开发。

对于大公司而言,分工比较细,一个人可能只负责某个模块。但如果你只会某一层,或者某个模块,只关注自己的一亩三分地,没有大局观,也不可能做好自己负责某一层或某个模块。你的目标是打磨好自己的模块,系统出问题时,不要让bug定位到你的模块里,让你来背锅。

芯片原厂,可能做驱动比较好,但驱动一般都是一个复杂的子系统了,从底层驱动,到中间层framework,再到上层的库、应用、测试,都要掌握。你的目标是输出稳定的BSP、SDK,给客户使用。客户有问题时,需要及时帮他们解决,需要从芯片、内核驱动、中间层全方位去思考和排查问题,快速定位并解决。

不同的公司,不同的厂家,处于行业上游或者下游,对嵌入式工程师技术栈的要求是不一样的,工作内容和环境虽然都差不多,但工作输出和KPI考核是不一样的。只有了解了这些,了解了规则,也许会让你更清楚地知道,该如何干活,该如何最大化创造价值了。

一线原厂驱动开发经验,专门为嵌入式精心打造的嵌入式进阶视频教程,详情请点击:王利涛老师个人店