MFGTool V2 UCL 用户指南

概述

Mfg Tool 提供灵活的方式让用户自定义烧录操作。使用 XML 脚本文件(ucl2.xml)配置用户操作。一个 XML 文件通常包含多个任务,只需运行一次制造工具即可执行。

UTP 模式操作

全局配置(Global Configuration)

Mfg Tool 使用全局配置来识别用户想要烧录的设备。示例:

<CFG>
  <STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0054"/>
  <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
</CFG>
  • BootStrap 阶段:设备名为 MX6Q,USB PID=0054,VID=15A2
  • Updater 阶段:设备名为 MSC,USB PID=37FF,VID=066F

i.MX6 系列有效 dev 值:

  • BootStrap 阶段:MX6Q、MX6D、MX6SL
  • Updater 阶段:MSC

支持多实例,主机可根据 USB vid/pid 自动选择 dev 类型。

更新命令列表(Update Command List)

UCL 包含针对不同用例的独立列表。每个列表包含一组命令元素,具有命令类型、主体和有效载荷属性。

每个 UCL 以 <LIST name="xx", desc="xxx"> 开始,以 </LIST> 结束。

命令类型

主机特定命令(Host Specific Commands):由主机工具解析和执行

命令类型Body参数描述
loadfileaddress, loadSection, setSection, HasFlashHeader下载镜像到 RAM
jump--通知 ROM 代码跳转到 RAM 镜像运行
bootRecovery/Fileif恢复模式下载镜像到 RAM

固件特定命令(Firmware Specific Commands):由目标设备上的固件解析和执行,命令类型为 “push”

命令参数描述
?None请求发送设备身份信息(XML 格式)
!integer启动重启(3=重启,其他值=强制关机)
$string执行 shell 命令
flushNone等待所有数据传输完成
ffsNone分区 SD 卡并烧录启动流
mknoddevice_class,device_item,node_to_create,type创建设备节点
readstring读取文件并发送到主机
sendNone从主机接收文件
selftestNone执行自检
savestring保存 send 命令接收的文件
pipestring (需 file 属性)执行 shell 命令并从 stdio 管道读取数据
wrfNONE (需 file 属性)使用 ubi 镜像格式化 NAND
wrssd分区数 (需 file 属性)将 rootfs 镜像写入 SD 卡
frfNone同 flush
frsNone同 flush

OTP Bits 编程示例

<CMD state="Updater" type="push" body="$ ls /sys/fsl_otp">Showing HW_OCOTP fuse bank</CMD>
<CMD state="Updater" type="push" body="$ echo 0x11223344 > /sys/fsl_otp/HW_OCOTP_MAC0">write fuse</CMD>
<CMD state="Updater" type="push" body="$ cat /sys/fsl_otp/HW_OCOTP_MAC0">Read fuse value</CMD>

条件执行

可通过 ifdev 参数跳过命令。例如:

<CMD state="BootStrap" type="load" file="firmware/uImage" address="0x12000000" 
     loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6D">
     Loading Kernel.</CMD>

仅当连接的芯片匹配 ifdev 值时才执行。

变量使用

UCL 支持静态变量,格式为 %name%:

<CMD state="BootStrap" type="boot" body="BootStrap" 
     file="firmware/u-boot-imx6q%board%_sd.imx" ifdev="MX6Q">
     Loading U-boot</CMD>

设置变量的两种方式:

  1. 在 cfg.ini 中:
[variable]
board = sabresd
mmc = 0
  1. 命令行启动时:
mfgtool2.exe -s "board=sabresd" -s "mmc=0"

限制:

  • XML 文件在软件打开时只解析一次,修改 ucl.xml 后需要关闭再重新打开
  • ucl.xml 中声明的所有文件都必须存在,即使命令可能被 ifdev 跳过

相关文档