嵌入式工程师的自我迭代之路
作者按
笔者本科和研究生都是芯片专业,从研究生开始接触嵌入式软件,从学习linux到学习arm架构,再到学习Linux发行版,一步一步从工程师,架构师到项目经理。身边既有不少朋友从偏硬件的专业(电子信息,自动化,微电子等等)转入做嵌入式,也有朋友是计算机科班出身做嵌入式。从不同人的经历对比中可以更清楚的看到嵌入式开发的进阶之路。这篇文章想结合自己和朋友们的经历,分享一下我眼中嵌入式工程师的发展机会和路径。先听听这四个小故事。
很多做嵌入式开发的小伙伴,多少都做过驱动开发。驱动的经验对我们的意义是什么?仅仅是机械性的对着硬件接口写代码么?
小A硕士毕业一年之后进入了一家公司做嵌入式系统开发,他原本希望做Linux系统移植,可惜不论上一份工作还是这一份工作,都不是完全匹配。这份新工作吸引力是老板承诺未来有Linux移植的机会。
小A入职不久,老板给他分配了SD卡驱动的适配工作。这个工作与他之前想做的Linux移植的工作没有关系。老板的说法是先熟悉一下工作环境,了解整个系统。
接到这个工作,小A心里面是不太愿意的,虽然是驱动,但不是Linux驱动,是另一个操作系统nucleus的驱动。
画外音:对于当时的硬件性能来说,很多时候用Linux太重了,不少公司使用rtos(实时操作系统),例如nucleus,ecos等等,目前在部分嵌入式场景仍然有很多产品基于rtos,感兴趣的小伙伴可以搜索下rt-thread。
暂停键:大家有没有关注老板为何分配这项工作给你?不清楚原因时,会不会主动沟通?
画面拉回小A。小A想既然是老板分配的工作,就先认真做。他认真看了协议和已有的驱动代码。这是他第1次看复杂的协议。之前只看过uart等简单的串口协议。他一边看规范一边记了笔记。小A笔记中涉及到的与之前他所学习的协议的相关性和不同,同时小A还有注意到的协议中对于系统硬件连接以及电源管理等方面的描述。
和小A差不多一同入职的还有一个同学小B,他分配到的工作是另一个驱动(usb device)。他负责的模块还没有驱动支持,为了能够在公司的软件系统中使用这个硬件,他和老板讨论后决定把Linux的驱动移植到公司操作系统nucleus中。移植过程使他更深入的理解了Linux驱动如何实现协议。
看到这两个故事,你是小A还是小B呢?聊完两个驱动的故事,咱们再聊一聊嵌入式开发中经常涉及到另外一个方面:开发环境搭建和维护。
由于主控芯片和外设的差别,每个项目或多或少涉及到环境的搭建和维护。在芯片公司还涉及到与芯片团队的沟通。这是一个繁琐且有不少突发工作的事情,可能造成精力分散。
小C在一家芯片公司入职1年半了,在一个新的芯片项目上负债环境工作。这个项目使用了新的CPU,整个芯片也经过了全新的设计。
小C原本是芯片专业,遇到新CPU,自己提出从新的CPU配置可配置的部分入手,再看新CPU对已有验证环境使用的操作系统的影响。同时他通过阅读芯片设计文档,理解芯片的设计。
对于环境工作,小C在一步一步学习中渐渐的支持大家的工作。在工作中他注意到同事们会问很多重复的问题。于是在每次和同事讨论中。对于新出现的问题,小C先截屏或列出大纲,问题反复出现过程中逐步增加内容,大家提问时逐渐引导大家通过阅读文档解决问题。从文档的学习实践到文档的输出。小C对于整个芯片系统开发有了清楚的理解。
另一个同事小D,是刚毕业的硕士。基于小D的工作,在另一个平台上负责环境工作。小D对这块儿没有知识积累,工作中忙着忙着解决大着曝出的问题。没有时间做总结。
看了上面四个小故事,大家有什么感想?
首选,每种经历有每种经历的价值。例如,小A的优势是除了完成工作,还认真记录和总结,这对他未来持续迭代自己很重要。小B的优势是借助项目更深入理解Linux驱动,对于他跳出具体硬件,站在更高的子系统层次理解系统很有帮助。
第二,除了技术,还可以项目角度看工作。小C所在的项目是该公司第2代芯片,重点是占领市场。这样的项目有更多机会看到项目量产之后的反馈。根据量产的反馈总结先前的开发经验会很多不同的发现。
第三,工作日志非常重要。前面小A的笔记对她很有帮助。这些内容和其他经验一起,日后成了他三个可迁移的技术技能:阅读技术文档的能力,从软硬结合点入手了解系统和电源管理视角看系统。
嵌入式是EE专业做软件很好的切入点,在扎实基础,有系统观念的同时,关注操作系统的发展,可能抓住一些快速成长的机会。举几个????:
2008年开始的安卓系统,kernel, hal, framework二者或三者的结合,后来这部分人有些抓住做人工智能发展的机会,利用自己垂直技术栈的积累,参与搭建人工智能技术栈。
2010年开始的Linux内核ARM子系统的标准化,内核社区增加了不少maintainer。2013年开始的ARM服务器开发,Linaro,Huawei等组织和公司通过标准提案,改进开源软件,一起推动了ARM服务器的发展,同时扩大了自己的影响力。与具体芯片共同迭代的经验现在又可以用在risc-v上。
很多小伙伴说我做了嵌入式,想转互联网没有机会。其实跳出嵌入式,看看互联网也是一样的道理。互联网数据中心分计算、存储、网络三部分,软硬件协同演化中也可以看到嵌入式经验的用武之地。例如,从虚拟化到容器再到裸金属服务;从hdd到sdd再到nvme的演进对于文件系统,数据库的影响;再比如RDMA对编程模型的影响。
跳出嵌入式和互联网,看看行业趋势:最近两三年火热的人工智能,自研的处理器上面需要操作系统,人工智能框架以下的技术栈需要大量工作:涉及到内存管理,调度等操作系统话题;人工智能中间件等等。
机会永远有。做了充分准备的人,才可能抓住机会。我是张健,我就是前面的小A和小C,通过很好的完成那两项任务,我有机会深度学习ARM CPU架构以及系统bring up经验。这与研究生的Linux系统开发经验相连,帮助我深入理解了ARM CPU为核心的系统。以此经验为基础,我又在世界第二大Linux发行版公司(SUSE)工作深入积累了企业级Linux系统的经验。也因为我在ARM架构和ARM Linux的深入积累,我在阅码场开设了ARM Linux课程,欢迎大家点击本文左下角阅读原文报名。
作者简介:张健。12年工作经验的软件工程师,精通ARM架构和Linux发行版。前华为任架构师,前星际比特任技术合伙人,目前在寒武纪转型做项目经理ing。日常分享包括技术趋势,工程师成长等话题。公众号:inrealworld
(END)
您的鼓励是我们前行的动力
本文地址:https://blog.csdn.net/21cnbao/article/details/106610656
上一篇: linux及内核体系结构
下一篇: 原生ajax请求的步骤