嵌入式系统bringup通用流程

文章目录

一、前言

本人作为一个嵌入式工程师,负责过多款新机新的芯片平台的适配,从事过路由器和摄像头方面的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板或者基础机型进行调试。