MFGTool V2 Linux/Android固件开发指南

概述

本文档描述了如何为MFGTool V2配置和生成U-Boot及内核镜像,使烧录工具能够正确工作。这是MFGTool烧录系统开发的核心环节。

核心概念

U-Boot配置

需要创建专用的MFG配置头文件:

  • 文件名需与现有配置文件对齐(如 mx6q_sabresd_mfg.h)
  • 必须定义以下宏:
    • CONFIG_MFG:启用MFG功能
    • CONFIG_CMDLINE_TAG:命令行标签
    • CONFIG_REVISION_TAG:版本标签
    • CONFIG_SETUP_MEMORY_TAGS:内存设置标签
    • CONFIG_INITRD_TAG:initrd标签
    • CONFIG_BOOTDELAY 0:无启动延迟
    • CONFIG_ENV_IS_NOWHERE 1:避免从存储读取U-Boot命令

配置示例:

#define CONFIG_BOOTARGS "console=ttymxc0,115200 "\
                "rdinit=/linuxrc"
#define CONFIG_BOOTCOMMAND  "bootm 0x10800000 0x10c00000"
  • 0x10800000:内核加载地址(需根据平台内存配置调整)
  • 0x10c00000:initrd地址

内核配置

需要创建MFG固件专用配置(如 imx6_updater_defconfig):

必须启用的驱动:

  • USB和存储相关驱动(SD Card等)
  • Mass storage gadget class driver
  • CONFIG_FSL_UTP=y
  • initramfs support
  • Watchdog: CONFIG_WATCHDOG=y, CONFIG_SOFT_WATCHDOG=y

固件生成流程

步骤一:生成U-Boot镜像

  1. 从现有配置复制创建MFG专用配置
  2. 修改宏定义(参见上方)
  3. 编译生成U-Boot bin文件
  4. 复制到 Profiles\\${TARGET_PROFILE_NAME}\\OS Firmware 目录
  5. 重命名为ucl2.xml操作列表中指定的文件名

步骤二:生成内核镜像

  1. 从现有配置复制创建MFG专用内核配置
  2. 启用必要驱动
  3. 编译生成内核镜像
  4. 复制到相同目录
  5. 重命名为操作列表中指定的文件名

UUC应用集成

UUC作用

UUC (Updater Application) 是在目标设备上运行的固件应用,基于UTP/USB协议接收并执行主机侧通过ucl2.xml定义的<CMD>命令。

配置方法

  1. 添加配置文件:在 config\\platform\\imx 下创建新配置(如 mx6q_arm2_mfg_config)
  2. 修改配置文件:
    • 添加 config/platform/imx/imxXX_updater.cf
    • 修改 config/platform/imx/main.lkc,添加PKG_KERNEL_UPDATER定义时的U-Boot新配置
  3. 启用UUC包:在imxXX_updater.cf中添加 CONFIG_PKG_UUC=y
  4. 创建preconfig:在 config/platform/imx/preconfigs.lkc 添加新配置

UUC工作流程

UUC位于 uuc-xxx-version/uu.c,是解码UTP消息并执行的用户程序:

  • 阻塞读取UTP消息
  • 设备驱动收到UTP消息后解除阻塞
  • UUC通过非零值返回错误消息

MFG Linux结构演示

UTP设备驱动

位置:KERNEL_ROOT/drivers/usb/gadget/file_storage.c

  • 实现UTP协议的char设备驱动
  • 与USB mass storage驱动 file_storage 结合
  • 处理UTP消息并提供用户空间读写接口

关键数据结构:

  • utp_context.wq:同步读写UTP消息
  • utp_context.list_full_wq:避免大量未处理的UTP PUT消息

UUC代码结构

入口函数 utp_handle_message:

  • 接收每个UTP命令
  • 定义在 file_storage.c
  • 检查是否需要busy状态(调用 utp_can_busy)

相关文件