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=15A2Updater阶段:设备名为 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 | 参数 | 描述 |
|---|---|---|---|
| load | file | address, loadSection, setSection, HasFlashHeader | 下载镜像到 RAM |
| jump | - | - | 通知 ROM 代码跳转到 RAM 镜像运行 |
| boot | Recovery/File | if | 恢复模式下载镜像到 RAM |
固件特定命令(Firmware Specific Commands):由目标设备上的固件解析和执行,命令类型为 “push”
| 命令 | 参数 | 描述 |
|---|---|---|
| ? | None | 请求发送设备身份信息(XML 格式) |
| ! | integer | 启动重启(3=重启,其他值=强制关机) |
| $ | string | 执行 shell 命令 |
| flush | None | 等待所有数据传输完成 |
| ffs | None | 分区 SD 卡并烧录启动流 |
| mknod | device_class,device_item,node_to_create,type | 创建设备节点 |
| read | string | 读取文件并发送到主机 |
| send | None | 从主机接收文件 |
| selftest | None | 执行自检 |
| save | string | 保存 send 命令接收的文件 |
| pipe | string (需 file 属性) | 执行 shell 命令并从 stdio 管道读取数据 |
| wrf | NONE (需 file 属性) | 使用 ubi 镜像格式化 NAND |
| wrs | sd分区数 (需 file 属性) | 将 rootfs 镜像写入 SD 卡 |
| frf | None | 同 flush |
| frs | None | 同 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>设置变量的两种方式:
- 在 cfg.ini 中:
[variable]
board = sabresd
mmc = 0- 命令行启动时:
mfgtool2.exe -s "board=sabresd" -s "mmc=0"限制:
- XML 文件在软件打开时只解析一次,修改 ucl.xml 后需要关闭再重新打开
- ucl.xml 中声明的所有文件都必须存在,即使命令可能被 ifdev 跳过