上一篇简单记录了MCU和linux开发的区别,最近简单梳理了一下整个项目的固件编译过程,一个项目的固件部分只需要SDK便可以完成。

一、核心结论

  1. SDK是什么:SDK(Software Development Kit,软件开发工具包)是厂商为特定硬件提供的“一站式开发工具箱”,打包了开发所需的源码、工具、文档,目的是让开发者不用从零搭建环境、适配硬件,直接基于SDK快速开发系统和应用。
  2. 厂商SDK的核心内容:以嵌入式硬件(如RK3506)为例,SDK包含“源码+工具+驱动+文档”四大类核心资源,覆盖从系统编译到应用开发的全流程。
  3. 交叉编译后的产物:最终会得到可烧录到开发板的完整固件,核心包括U-Boot镜像、Linux内核镜像、根文件系统镜像,部分SDK还会生成设备树二进制文件(.dtb)、应用程序可执行文件等。

二、厂商SDK的详细组成(以瑞芯微RK3506 SDK为例)

厂商提供的嵌入式SDK(尤其SoC/开发板SDK)会围绕“硬件适配”和“开发效率”打包资源,核心模块如下:

1. 核心源码包(开发的基础)

  • Linux内核源码:适配该硬件的定制化内核(如5.10版本),已集成硬件所需的驱动(如RK3506的I2C、IIS、GPIO控制器驱动)、设备树模板(.dts/.dtsi),无需你从内核官网下载后重新适配。
  • U-Boot源码:适配开发板的引导程序源码,已配置好启动参数(如内核加载地址、文件系统类型)、硬件初始化(如DDR内存、串口),编译后生成u-boot.bin
  • 根文件系统模板:最小化的根文件系统骨架(如基于BusyBox),包含基础命令(ls、cd)、系统配置文件(/etc/init.d),可基于此添加自己的工具(如Python、音频工具)。
  • 驱动源码包:硬件专属驱动(如开发板自带的WiFi/蓝牙驱动、音频CODEC驱动),若内核主线未集成,厂商会单独提供驱动源码和编译脚本。
  • 应用示例源码:简单的硬件测试程序(如GPIO闪烁、I2C传感器读取、音频播放示例),可直接编译运行,验证硬件是否正常。

2. 工具链(编译的核心工具)

  • 交叉编译器:如aarch64-none-linux-gnu-gcc(适配ARM64架构),用于在x86主机上编译ARM架构的内核、驱动、应用程序(这就是“交叉编译”的核心工具)。
  • 编译脚本:一键编译脚本(如build.sh),自动完成“内核编译→文件系统打包→固件整合”,无需手动执行make menuconfigmake等一系列命令。
  • 烧录工具:将编译产物烧录到开发板的工具(如瑞芯微的RKDevToolupgrade_tool),支持SD卡烧录、USB烧录。
  • 调试工具:串口调试工具、JTAG调试脚本、内核调试工具(如gdb交叉调试版本),用于排查系统启动、驱动运行中的问题。

3. 文档与配置文件(指导开发)

  • 硬件手册:开发板原理图(如引脚定义、外设连接关系)、芯片 datasheet(如RK3506的寄存器地址),是编写设备树、驱动的核心参考。
  • SDK使用手册:详细的编译步骤、烧录教程、配置说明(如如何启用WiFi、修改串口波特率),新手可按手册一步步操作。
  • 驱动开发指南:针对厂商专属驱动的开发文档(如如何添加自定义外设驱动、修改现有驱动参数)。
  • 配置文件模板:内核配置文件(.config)、Buildroot配置文件(若SDK集成Buildroot)、设备树配置模板(如rk3506-evb.dts),可直接基于模板修改,无需从零配置。

4. 可选扩展资源(按需提供)

  • 第三方库:预编译的嵌入式库(如音频处理库、图形库、机器学习库),可直接链接到自己的应用程序(如ASR/TTS模型所需的libtensorflow-lite.so)。
  • 操作系统镜像:厂商预编译好的完整固件(.img格式),可直接烧录到开发板快速测试,适合前期验证硬件。
  • 应用开发框架:若开发板支持特定应用场景(如智能音箱、物联网网关),SDK会提供对应的应用框架(如语音唤醒框架、MQTT通信框架)。

三、交叉编译后的产物:不止内核和文件系统,是“完整可烧录固件”

通过SDK交叉编译后得到的是开发板可直接运行的完整固件,核心产物包括:

产物名称 作用 对应烧录分区
u-boot.bin 引导程序,负责初始化硬件、加载内核 uboot分区
Image/zImage Linux内核镜像(压缩或未压缩) kernel分区
rootfs.ext4 根文件系统镜像(包含基础命令、应用、库) rootfs分区
rk3506-myboard.dtb 设备树二进制文件(编译后的设备树) 通常与内核同分区
app.exe(示例) 你自己编写的应用程序(如ASR/TTS程序) 根文件系统中(/root/)

简单说:交叉编译的本质是“用主机的工具,编译出目标硬件(ARM架构)能运行的文件”,最终整合为“U-Boot+内核+文件系统”的完整固件,烧录到开发板后,上电即可启动系统并运行应用。

四、总结

  1. SDK是“开发工具箱”:厂商打包了适配硬件的源码、工具、文档,让你不用从零搭建环境,聚焦核心开发(如驱动调试、应用编写)。
  2. 交叉编译产物是“完整固件”:核心是U-Boot、内核、根文件系统,烧录后开发板可直接运行,你的ASR/TTS模型、音频驱动都将集成在这个固件中。
    比如用RK3506 SDK,只需:① 解压SDK → ② 修改设备树(添加TLV320AIC3254节点) → ③ 配置内核(启用ALSA驱动) → ④ 运行编译脚本 → ⑤ 烧录固件,即可得到集成音频驱动、Python环境的完整系统。

后续的内容主要属于上层应用层面的开发,有空更新