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镜像
- 从现有配置复制创建MFG专用配置
- 修改宏定义(参见上方)
- 编译生成U-Boot bin文件
- 复制到
Profiles\\${TARGET_PROFILE_NAME}\\OS Firmware目录 - 重命名为ucl2.xml操作列表中指定的文件名
步骤二:生成内核镜像
- 从现有配置复制创建MFG专用内核配置
- 启用必要驱动
- 编译生成内核镜像
- 复制到相同目录
- 重命名为操作列表中指定的文件名
UUC应用集成
UUC作用
UUC (Updater Application) 是在目标设备上运行的固件应用,基于UTP/USB协议接收并执行主机侧通过ucl2.xml定义的<CMD>命令。
配置方法
- 添加配置文件:在
config\\platform\\imx下创建新配置(如mx6q_arm2_mfg_config) - 修改配置文件:
- 添加
config/platform/imx/imxXX_updater.cf - 修改
config/platform/imx/main.lkc,添加PKG_KERNEL_UPDATER定义时的U-Boot新配置
- 添加
- 启用UUC包:在imxXX_updater.cf中添加
CONFIG_PKG_UUC=y - 创建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)
相关文件
- MFGTool V2 烧录工作流说明 - 烧录工具基本工作流程
- MFGTool V2 UCL 用户指南 - UCL配置文件详解
- MFGTool V2 UTP协议介绍 - UTP协议细节
- MFGTool V2 快速入门指南 - 快速上手指南