大家好,我是仲一。
做 BSP 也有几年了,经常有同行问我这条路该怎么往后走。
先说一句:我不觉得每个人都要成为架构师。有些人一辈子写驱动也很快乐,而且写得好的驱动工程师在任何公司都是稀缺资源。但如果你想把这条路走得更远,想理解更大的图景,这篇文章可以给你一些参考。
我在芯片公司做 Linux 驱动,这几年最大的体会是:从 BSP 到架构师,中间差的不是代码量,是视野。
初级阶段:把手弄脏
任何一个 BSP 工程师的起点都是"把手弄脏"。这个阶段的核心就一件事:让硬件跑起来。
你拿到一块新板子,原理图、芯片手册、参考代码扔给你。你要做的是把 U-Boot 移植上去,把内核跑起来,把基本的外设调通。这个阶段你会遇到各种奇怪的问题——DDR 参数配置不对、时钟树配错了、某个 GPIO 的复用功能跟 datasheet 写得不一样。
没什么捷径。就是看手册、写代码、试错。每解决一个问题,你就比昨天多懂一点。
如果你刚开始走这条路,我的建议是找一个参考平台走通全流程。买一块 i.MX6ULL 或者 STM32MP1 的开发板,从 SD 卡启动 U-Boot 开始,到内核编译、设备树配置、根文件系统制作、驱动加载,完整走一遍。一套流程走下来,你对嵌入式 Linux 系统的理解会比读半年书都深。
中级阶段:建立体系
当你能搞定单板 Bringup 和基本驱动之后,下一个阶段是建立体系。这时候你不再只盯着某个模块,而是开始理解整个系统怎么组织起来的。
这个阶段有几个标志性的事情。
开始理解内核的架构。 不再只是某个驱动框架里填回调函数,而是去理解为什么 Linux 要这样设计——设备模型为什么分 bus、device、driver 三层,为什么要有 platform 总线,中断子系统上下半部是怎么设计的。这些问题的答案,决定了你能不能在碰到新平台时快速上手。
开始关注性能和稳定性。 你的驱动跑通了,但性能是否最优?中断延迟能不能再降?内存占用能不能优化?多核并发下有没有竞态?这些问题,才是区分普通工程师和资深工程师的分水岭。
开始形成自己的调试方法论。 经验丰富的 BSP 工程师碰到问题,不会盲目猜测,而是有一套完整的排查链路——从系统日志到内核 trace 到硬件信号,每个环节用什么工具、怎么看输出、怎么缩小范围,心里有数。这套方法论靠前面几年一个一个坑踩出来的。
老话说驱动工程师三年才算入门,说的就是这个阶段。不是三年才开始写驱动,是三年后才能写出靠谱的驱动,出了问题能自己定位。
高级阶段:跳出驱动看系统
到了第三阶段,你的关注点不再只是"这个设备能不能工作",而是"这个系统能不能稳定高效地运行"。
这个转变很重要。一个 BSP 工程师和一个系统架构师之间最大的区别,不是代码能力,而是抽象能力。
架构师要考虑的是:这个产品需要什么样的硬件平台?内存和存储怎么规划?用哪个内核版本?实时性要求怎么满足?安全启动怎么做?OTA 升级方案怎么设计?功耗怎么优化?量产后的可维护性怎么保证?
这些问题没有一个能在单一驱动层面回答。你需要对整个系统的运作有全局理解,要能跟硬件工程师讨论方案选型,跟产品经理讨论需求边界,跟测试讨论验证策略。
一个检验自己是否到了这个阶段的方法:给你一个新项目,你能不能从头开始设计它的软件架构?从芯片选型开始,到系统分区、驱动框架、应用接口、升级方案,每一步能给出选择理由和备选方案?
如果你能,那你已经在做架构师的事了。
架构师不是终点
最后想说的是,嵌入式这个行业很大,容纳得了不同方向的人。
有人喜欢钻底层,成了内核专家,哪里出了问题都能在代码层面给出解释。有人喜欢贴近硬件,成了芯片公司的应用工程师,帮客户解决各种稀奇古怪的问题。有人喜欢带团队,成了技术经理,把一群人的能力放大。
这些方向没有高下之分。核心是你得知道自己在哪个阶段,以及下一阶段想去哪。
我的建议是:把自己当成一个产品来迭代。 每个阶段关注的核心能力不同——前三年把手弄脏,中间三年建立体系,再往后看系统和做决策。
我是这么给自己规划的,不一定适合所有人,但至少有个参照物。如果这篇文章能给你一些启发,那就够了。
你现在在哪个阶段?下一步想往哪个方向走?留言区聊聊。
仲一做嵌入式已经六七年了,现在在某头部芯片公司做驱动开发,之前带过团队、也面试招过人。简历看多了,面试也面多了,所以职业怎么走、简历哪里不对、面试卡在哪儿,这些事我算是有点发言权。
这些年陆陆续续有读者找过来,问方向、问简历,也拉我做过不少模拟面试。带过的师弟师妹有大二进小米海康的,也有四个月拿到大疆、oppo、华为 offer 的,简历前前后后改过两千多份。
就一个要求:建议你得真去做。不然别来找我,浪费彼此时间。
职业方向、简历、面试,哪块有疑惑都可以找我聊聊。想聊的,公众号后台回复「咨询」。
end
238