嵌入式系统bringup通用流程
文章目录
- 一、前言
- 二、目标
- 三、linux系统核心组件
- 四、bringup流程
- 1. 编译框架适配
- 2. 固件打包
- 3. flash驱动适配
- 4. 启动问题调试
- 5. 业务进程适配
- 6. 关键驱动适配
- 7. 里程碑
- 五、技巧
一、前言
本人作为一个嵌入式工程师,负责过多款新机新的芯片平台的适配,从事过路由器和摄像头方面的bringup工作,以这两个产品为例,总结下嵌入式设备通用的bringup思路。
二、目标
bringup也叫冒烟适配,指新方案初期快速适配核心业务,达到可调试状态,以及解决阻塞点,以便其他同事可并行展开工作。比如
产品类别 | bringup目标 |
---|---|
路由器 | 有线通,无线起来,AP可接入AC。 |
摄像头 | 能够出流,IPC可接入NVR。 |
根据你的产品业务类型,分析你的核心目标。
- 时间要求
bringup通常要求时间非常紧迫,通常要在1周内完成,所以需要提升紧迫感。
三、linux系统核心组件
本文针对linux系统做bringup,所以需要了解一下linux的启动流程和核心组件:
preloader (供应商提供、ATF、BL)、uboot、kernel、rootfs、启动脚本、核心业务进程。
主要分为:
linux启动问题(通用) + 核心业务适配。
linux启动的目标是能够进入linux的串口,可执行调试命令,可具备的调试手段:
1)固件烧录方式调试
2)网络可通,tftp/nfs 通过网络更新进程的方式。
- 核心业务分析
1)路由器:管理进程启动正常、有线驱动正常、无线驱动适配。
2)摄像头:管理进程启动正常,摄像头驱动适配。
四、bringup流程
1. 编译框架适配
供应商sdk合入核心驱动、内核、uboot代码,合入我司的编译框架(通常不会直接使用供应商的sdk编译,那样就是纯turnkey方案了)比如路由器行业通常是openwrt sdk,将供应商的代码copy到我司维护的sdk中进行编译。而其他行业供应商的sdk和目标编译框架往往差的很远,有的公司则是采用内核和uboot使用供应商的sdk进行编译和定制化,然后将产物维护的sdk中,进行打包固件,这样做法的是能够快速bringup,跳过内核等编译的风险和问题解决。
这里注意最小化SDK编译,专注于核心进程,其他进程等可先不编译。
2. 固件打包
编译出uboot、kernel、rootfs后,打包成一个固件,这里通常需要适配机型的配置,如分区划分等处理。这里重点提一下rootfs制作,通常编译框架中是已有的,通常需要适配的是将libc、so等进行copy。
3. flash驱动适配
固件打包完,上板烧录验证前,确认是否能够正常启动,需要先确认flash驱动是否适配。
4. 启动问题调试
- uboot引导内核
主要适配点:
1)读分区表信息。(可先写死)
2)固件校验(可跳过)
4)加载kernel到指定的内存地址
5)使用bootm 跳转到内核。
6)bootargs适配。(确认是否需要传递分区表信息,其他参数一般使用供应商提供的即可)
- 内核启动问题解决
具体问题具体解决了,内核启动都是通用的流程,主要有3点可能出问题
1)flash驱动未适配
2)分区表未适配,找不到rootfs
3)rootfs文件系统格式不对或者打包有问题,导致rootfs mount不上
- 启动脚本处理
启动脚本,一些ko插入、文件系统mount等,具体问题具体分析。可以修改inittab,快速跳过这些脚本处理,进入串口命令行调试。
5. 业务进程适配
解决业务进程启动执行问题,IPC可接入NVR,AP可接入AC等。
6. 关键驱动适配
路由器:有线驱动、无线驱动适配,有线可tftp进行网络调试,无线可接入STA。
IPC:摄像头驱动适配,可出流,可在NVR或者APP上查看采集的视频。
至此bringup工作就完成了,可开展其他业务适配和问题解决了。
7. 里程碑
五、技巧
1)跳过大法,跳过一切可以跳过的。专注于启动与核心业务。
2)最小化编译,最小化sdk编译和处理。
3)卡点分析,哪些是阻塞点,阻塞其他人开展工作的要优先解决。
4)严格的时间计划和目标导向,拆解里程碑,不能有严重的延期,控制在最多2到3天的延期范围。
5)一般硬件较晚回来,使用demo板或者基础机型进行调试。