开发流程:

- 需求立项:定义产品形态、硬件平台、系统能力、成本、功耗、认证、量产目标。
- 平台选型:选择 SoC、内存、Flash、无线模块、外设、Linux BSP、供应商支持能力。
- 硬件开发:原理图、PCB、EVT/DVT/PVT 打样验证。
- BSP 开发:Bootloader、Kernel、Device Tree、驱动、RootFS、文件系统。
- 系统集成:中间件、业务服务、应用程序、升级、安全、日志、诊断。
- 测试验证:功能、稳定性、性能、功耗、兼容性、老化、异常恢复。
- 量产导入:烧录、校准、工厂测试、序列号、密钥注入、产测工具。
- 发布维护:OTA、问题回溯、版本管理、安全补丁、客户现场支持。
一、需求阶段
大公司通常不会一上来就写代码,而是先做需求拆解。
- 主要输入:
产品定义:设备用途、用户场景、目标市场
硬件约束:CPU、内存、Flash、功耗、温度范围、接口数量
软件能力:启动时间、联网能力、UI、音视频、AI、边缘计算、数据采集等
可靠性要求:7x24 小时运行、掉电保护、看门狗、异常自恢复
安全要求:Secure Boot、固件签名、加密存储、权限隔离
量产要求:产测、烧录、校准、SN/MAC/证书写入
合规认证:CE/FCC/SRRC/CCC/ROHS/医疗/车规/工业认证等
-典型产物:
PRD:产品需求文档
SRS:软件需求规格
系统架构设计
风险清单
项目排期
版本里程碑计划
二、平台选型(关键)
- 常见评估点:
SoC 性能:CPU/GPU/NPU/DSP/ISP/编解码能力
Linux BSP 成熟度:内核版本、驱动完整度、Yocto/Buildroot 支持
供应商支持:FAE 响应速度、源码质量、长期维护能力
成本:芯片价格、外围器件成本、授权费用
生命周期:芯片供货周期是否满足 3~5 年甚至更久
安全能力:TrustZone、OTP/eFuse、Crypto Engine、Secure Boot
量产能力:烧录工具、校准工具、产测方案是否成熟
- 常见做法:
先拿 EVB 开发板验证关键功能
跑性能、功耗、温度、启动时间测试
评审供应商 BSP 代码质量
做芯片替代风险评估
建立平台基线,而不是每个产品从零开始
三、硬件开发阶段
硬件通常分为几个阶段。
EVT:工程验证测试
验证原理图是否正确
验证电源、时钟、DDR、Flash、接口
软件团队开始 Bring-up
问题较多,主要目标是“能跑起来”
DVT:设计验证测试
硬件设计趋于稳定
验证功能、性能、EMC、温升、功耗
软件进入系统集成和稳定性阶段
PVT:生产验证测试
接近量产状态
验证生产流程、产测夹具、烧录效率、良率
软件版本进入 Release Candidate
MP:Mass Production
正式量产
软件版本冻结
只接受严重 Bug、安全问题、客户关键问题修复
四、BSP 开发流程
BSP 是嵌入式 Linux 设备的底座,通常由平台团队负责。
1. Bootloader 常见使用 U-Boot,也有厂商自研 Bootloader。
- 主要工作:
- 特别关注:
2. Kernel Linux Kernel 是设备核心。
- 主要工作:
移植厂商 BSP
裁剪内核配置
适配 Device Tree
编写或修改驱动
调试电源管理
调试中断、DMA、时钟、Pinmux
优化启动时间
合入安全补丁
维护内核分支
- 常见驱动类型:
GPIO
I2C/SPI/UART
USB
PCIe
Ethernet
Wi-Fi/Bluetooth
LCD/HDMI/MIPI
Camera
Audio
Touch
Sensor
RTC
Watchdog
PWM
ADC
NAND/eMMC/SD
Thermal
Power Management
3. Device Tree Device Tree 用来描述硬件资源。
- 主要内容:
CPU、内存
GPIO 分配
I2C/SPI 设备
时钟
中断
Regulator
Pinmux
Display
Camera
Audio
Flash 分区
外设 enable/disable
- 通常会做:
Device Tree 分层管理
SoC 公共 DTS
板级 DTS
产品差异 DTS
避免硬编码进驱动
4. RootFS RootFS 是用户空间文件系统
- 常见构建系统:
Buildroot:简单、轻量,适合中小型设备
Yocto:复杂但强大,适合大公司、多产品线、长期维护
OpenWrt:网络设备常见
Debian/Ubuntu Base:网关、边缘计算设备常见
Android/Linux Hybrid:智能屏、车载、消费类设备常见
- RootFS 包含:
C 库:glibc、musl、uclibc
BusyBox/systemd
网络工具
日志系统
设备管理
应用服务
升级模块
诊断工具
配置文件
安全策略
工厂测试程序
五、系统软件开发
BSP 之上是系统服务和中间件。
- 常见模块:
六、应用层开发
应用层和产品形态强相关。
- 例如:
- 常见语言:
C/C++:性能敏感、系统服务、驱动接口。
Rust:安全要求高的新项目逐渐采用。
Go:网关、边缘计算、网络服务。
Python:调试、产测、原型工具。
Shell:启动脚本、维护脚本。
Java/Kotlin:Android 系设备。
Qt/QML:带 UI 的 Linux 设备。
七、版本管理与分支策略
大公司非常重视版本可追溯,当前首选当然是Git了,开发可以参考如下Git使用指南。

八、构建系统与 CI/CD
大公司通常会搭建自动化构建平台。
- 构建内容:
Bootloader、Kernel、Device Tree、Kernel modules、RootFS、应用程序、配置文件、升级包、量产烧录包、Debug 符号包、SBOM 软件物料清单。
- CI 常见检查:
编译检查、静态扫描、单元测试、代码风格检查、镜像大小检查、依赖漏洞扫描、License 合规检查、自动生成版本号、自动归档构建产物、发布产物
- 完整烧录镜像:
OTA 差分包/全量包、Debug 符号文件、Release Note、版本 Manifest、校验 hash、签名文件、工厂生产包。
九、测试体系
嵌入式 Linux 测试比普通软件更复杂,因为涉及硬件。
1. 单元测试
测试函数级逻辑。
常用于业务模块、协议解析、配置管理。
可在 PC 上跑,也可交叉编译到设备上跑。
2. 集成测试
3. 系统测试
从用户视角测试完整功能。
包括开机、联网、业务流程、异常恢复。
4. 硬件接口测试
GPIO
UART
I2C
SPI
USB
Ethernet
Wi-Fi
Bluetooth
Camera
Display
Audio
Sensor
Storage
5. 稳定性测试
7x24 小时运行
高低温运行
断网恢复
反复重启
反复 OTA
反复插拔外设
内存泄漏检测
文件系统压力测试
6. 异常测试
升级中断电
写 Flash 时断电
网络抖动
服务器异常
配置损坏
分区损坏
进程崩溃
内存不足
存储满
时间跳变
7. 性能测试
启动时间
CPU 占用
内存占用
Flash 读写速度
网络吞吐
音视频延迟
UI 响应速度
功耗
温升
十、OTA 升级设计
OTA 是量产设备的生命线。
- 常见方案:
单分区升级:简单,但风险高
A/B 分区升级:可靠性好,适合大公司量产设备
Recovery 分区升级:失败后进入恢复系统
差分升级:节省流量,但复杂度高
全量升级:简单可靠,但包大
- 完整 OTA 流程:
设备检查版本 -> 下载升级包 -> 校验 hash -> 校验签名 -> 检查电量/电源/网络 -> 写入备用分区 -> 设置启动标志 -> 重启进入新系统 -> 新系统健康检查 -> 成功后确认版本 -> 失败自动回滚
- 必须考虑:
断电保护
回滚
防降级
固件签名
灰度发布
分批升级
失败率统计
远程止损
十一、安全体系
大公司通常会把安全当作系统工程,而不是后期补丁。
- 启动安全:
ROM Code 验证 Bootloader
Bootloader 验证 Kernel
Kernel 验证 RootFS
RootFS 验证应用或升级包
形成完整 Chain of Trust
- 固件安全:
固件签名
固件加密
防回滚
Secure Boot
Debug 口关闭
JTAG/SWD 管控
敏感密钥写入 OTP/eFuse/安全芯片
- 系统安全:
最小权限运行
只读 RootFS
关键分区加密
防止命令注入
防止默认弱密码
SSH/Telnet 管控
防火墙规则
SELinux/AppArmor/seccomp
定期 CVE 修复
- 生产安全:
工厂密钥注入
证书唯一化
SN/MAC 防重复
生产日志留档
防止固件泄露
工装权限控制
十二、量产与工厂流程
量产阶段是嵌入式项目和普通软件项目差异最大的地方。
- 常见工厂流程:
板卡上电。
烧录 Bootloader/系统镜像。
写入 SN/MAC/证书/密钥。
校准 Wi-Fi/BT/射频/传感器。
执行产测。
记录测试结果。
上传 MES 系统。
打标签。
包装入库。
- 产测内容
电源电压。
DDR。
Flash。
网口。
Wi-Fi。
蓝牙。
USB。
串口。
按键。
LED。
屏幕。
触摸。
摄像头。
麦克风。
喇叭。
传感器。
RTC。
充电。
电池。
RF 指标。
- 大公司重点关注
测试节拍
一次通过率
不良品追踪
工厂误操作防护
版本防呆
数据可追溯
工装自动化
十三、问题定位流程
嵌入式 Linux 设备出问题时,定位通常分层进行。
- 启动问题:
看串口日志
检查 Bootloader 输出
检查 Kernel panic
检查 Device Tree
检查 rootfs 挂载
检查 init/systemd 服务
- 驱动问题:
dmesg
/proc/interrupts
/sys/kernel/debug
i2cdetect
devmem
trace-cmd
ftrace
示波器/逻辑分析仪
- 性能问题:
top
htop
vmstat
iostat
perf
strace
lsof
free
slabtop
- 内存问题:
Valgrind
AddressSanitizer
LeakSanitizer
kmemleak
pmap
smaps
OOM 日志
- 系统稳定性问题:
watchdog 日志
panic dump
core dump
journald/syslog
远程日志
崩溃前状态快照
十五、典型项目节奏
一个中等复杂度嵌入式 Linux 项目流程:
- 第 0 阶段:预研
- 第 1 阶段:EVT
硬件 Bring-up。
Bootloader 启动。
Kernel 跑通。
基础外设可用。
初版 RootFS。
- 第 2 阶段:DVT
主要功能完成。
驱动稳定。
OTA 跑通。
产测工具初版。
开始压力测试。
- 第 3 阶段:PVT
修复高优先级问题。
工厂流程验证。
认证测试。
版本冻结。
小批量试产。
- 第 4 阶段:MP
十六、大公司与小团队的主要区别
- 流程更严格:
- 平台化程度更高:
- 质量要求更高:
自动化测试更多。
稳定性测试周期更长。
问题必须可追溯。
- 安全和合规更重:
- 量产意识更强:
大公司的嵌入式 Linux 开发不是单纯“写驱动”或“移植系统”,而是一整套围绕硬件、系统、应用、测试、生产、安全和长期维护的工程体系。