点击↑深色口袋物联,选择关注公众号,获取更多内容,不迷路
Linux驱动开发,在实际的场景中,更多的是linux BSP开发
正如电子信息工程专业 ,与通信工程、自动化等专业类似,看上去它们侧重点不同,但在很多时候,它们的就业场景都是嵌入式开发。
个人认为,除了原厂,在搞linux驱动开发,其他的单位都是在搞BSP开发,因为Linux BSP 工程师的核心工作,就是让一块新板子跑起来,并给上层应用提供稳定、可维护的软件环境,典型内容包括:Bootloader(U‑Boot )移植、Linux 内核裁剪与移植、各类驱动移植与维护、rootfs系统构建与工具链维护、性能与稳定性调优、产线与生产支持等。
到具体的公司,bsp工程师的职责又略有不同,如芯片公司强调的是芯片(或soc)、第三方公司强调的核心板(或底板)、产品公司强调的自己的硬件板。从宏观上看,他们间的侧重点如下图所示:
一、Linux BSP 工程师通用工作内容
不管是哪一类公司,Linux BSP 工程师的主要任务,都是把 Linux 系统在一块硬件上跑起来、跑稳、跑好,并给上层应用 / 驱动铺路。通用的工作内容如下,
- • 根据硬件原理图,移植u-boot/kernel/rootfs,让系统跑起来,俗称“点亮板子/板级支持包开发”
- • 移植、裁剪、维护 U‑Boot,支持多种启动方式(如SD启动,eMMC启动,网络启动,usb启动等)
- • 根据板子资源裁剪内核配置(驱动、文件系统、调度策略等)。
- • 移植内核到新平台,处理内核 panic、驱动异常等问题
- • 常见外设:UART、I2C、SPI、USB、phy、eMMC/SD、drm、Camera、Audio、Wi‑Fi/蓝牙、传感器等
- • 根据芯片手册 + 内核子系统(如 input、IIO、V4L2、DRM、alsa 等)实现驱动。
- • 编译系统、Yocto/Buildroot 配置、补丁管理、版本发布
- • 提供产线烧录工具、测试程序,支持量产升级、故障诊断等。
- • 编写 BSP 使用指南、移植手册、驱动文档,对内对客户提供技术支持
二、芯片公司
典型代表: NXP、TI、瑞芯微、全志等。
1. 核心定位
- • 面向“多客户、多产品线”提供芯片级 BSP/SDK。
- • 工程师既要懂芯片内部 IP,又要会对外提供稳定、可维护的参考 BSP。
2. 主要工作内容
- 1. IP 驱动与 Pre‑silicon / Post‑silicon 验证
- • 在仿真平台或真实样片上,验证各 IP(PCIe、USB、Display、Camera、Storage 等)的驱动功能,和芯片设计团队一起定位芯片问题
- • 很多 JD 写得很明确:
“负责芯片的 bring‑up,各模块的驱动验证;与芯片设计工程师一起定位芯片存在的问题,并作清晰的技术决定”
- • 多核启动(AMP/SMP)、安全启动(Secure Boot)、TrustZone、TEE 等。
- • 维护 BootROM、U‑Boot、内核启动流程,支持不同启动介质。
- • 基于芯片设计文档,做第一版 Linux + U-Boot 适配
- • 为官方评估板提供完整 BSP:U‑Boot + 内核 + 文件系统 + 示例驱动。
- • 发布版本管理、补丁管理、升级策略,保证客户能平滑升级内核版本。
- • 帮客户解决在我家 Demo 上没问题,在你家板子上不工作的问题。
- • 针对车规、工业、安全等标准做功能安全、性能、可靠性认证支持。
- • 对内核关键子系统(内存管理、调度、电源管理等)做深入优化。
3. 典型技能/经验要求(对应 JD)
- • 熟悉 ARM/RISC‑V 体系结构,多核启动、MMU、缓存等
- • 有 SoC 原厂 BSP 团队经验,对特定 IP(PCIe、USB、Display、Camera、Storage 等)有深入驱动经验
- • 能看懂芯片规格书、原理图,配合硬件/验证团队定位芯片问题。
4. 工程师感受
- • 优点:接触到底层 IP 和 SoC 架构,技术深度大,行业认可度高。
- • 挑战:工作成果更多体现在“平台 SDK”上,离最终产品业务较远;很多时候是“给别的公司做嫁衣”。
三、第三方公司
典型代表:嵌入式方案公司、开发板核心板公司、做模块/模组/网关的 ODM/外包团队。
1. 核心定位
- • “按项目交付”:为多个客户、多个行业提供嵌入式 Linux 解决方案。
- • 拿原厂芯片 → 做成公板 / 公版方案 → 卖给产品公司
- • BSP 工程师既要“快速适配新平台”,又要“保证项目质量”。
2. 主要工作内容
- • 在不同 SoC 平台(如 RK、海思、MTK、NXP 等)之间切换,快速移植 U‑Boot、内核、驱动。
- • 同一套 BSP 要适配多个客户板,管理好差异配置。
- • 根据客户需求集成各类外设:Wi‑Fi/蓝牙模组、4G/5G 模组、屏幕、Camera、传感器等。
- • 集成第三方中间件:多媒体框架、图形库、云接入 SDK 等。
- • 开机 Logo、开机动画、rootfs 裁剪、产品功能配置
- • 基于原厂 SDK 做二次开发,不从头造轮子,而是在原厂 BSP 上改
- • 从样机调试、试产到量产,全程参与,经常需要出差现场调试。
- • 对客户做技术支持,解决系统级问题(死机、重启、兼容性等)。
- • 在有限成本和时间内,尽可能复用已有 BSP 模块,降低新项目开发成本。
- • 经常要“多项目并行”,项目管理能力和沟通能力很重要。
3. 典型 JD 描述
- • “负责 Linux 嵌入式平台 BSP 开发,包含驱动调试、文件系统制作、第三方软件移植等;对应用软件提供底层 BSP 支持,协助硬件对目标板进行测试验证”。
- • 这类岗位往往强调“熟悉常用总线协议”“能独立阅读英文文档”“有多平台经验”。
4. 工程师感受
- • 优点:接触行业和场景多(工业、安防、消费、车载等),实战机会多,综合能力成长快。
- • 挑战:项目节奏紧,有时要“赶工期”;技术积累容易被项目割裂,需要自己有意识沉淀公共模块。
四、产品公司
典型代表:做智能硬件、终端设备、工业设备、车载终端、医疗设备等的产品公司。
1. 核心定位
- • 面向“单一或少数几条产品线”,围绕产品做深度 BSP 开发与长期维护。
- • 目标是“产品稳定、好量产、易升级”,而不是“让很多客户都能用这个 BSP”。
2. 主要工作内容
- • 针对具体产品做深度优化:启动时间、功耗、发热、存储寿命等
- • 根据业务需求裁剪内核、文件系统,减少不必要的组件。
- • 长期跟踪产品在用户现场的稳定性问题:死机、重启、内存泄漏、存储异常等
- • 提供产线测试工具、老化测试程序,协助工厂解决生产中的软件问题。
- • 协助售后分析返修板问题,通过日志、Dump 定位软硬件故障。
- • 与硬件、应用团队一起评估新器件、新功能,参与硬件选型
- • BSP 层面对应用层暴露稳定、易用的接口,配合业务需求做扩展。
- • 解决独有的硬件问题,自家结构、自家 PCB、自家外设带来的独有 BUG
- • 与结构 / 硬件 / APP / 测试紧密配合,给 APP 提供 HAL 接口、JNI、系统服务
- • 版本维护、迭代、OTA,维护一整个产品生命周期(1~3 年甚至更久)
3. 典型 JD 描述
- • 如“负责物联网终端产品的外设驱动开发、维护,低功耗和电源管理开发维护,协助硬件工程师进行器件选型、测试、故障定位,负责系统裁剪及优化、稳定性问题解决”
4. 工程师感受
- • 优点:对产品和业务理解深,能从系统层面设计软件架构,长期维护一个产品,有“成就感”。
- • 挑战:如果公司产品迭代慢,可能长期只维护一个平台,技术广度不如原厂/方案公司;需要自己主动拓展新技术。
写在最后,大多数情况,linux bsp工程师干的活儿,第1步,bringup,让系统先跑起来,第2步,根据硬件设计,适配对应的驱动,如串口,usb,显示,音频,i2c,摄像头,led,input等驱动,让硬件模块跑起来,第3步,根据应用和硬件反馈,做系统/性能优化,第4步,就是后续的迭代,升级,维护等