imx8 uuu烧录

1. UUU 簡介

UUU 全名為 Universal Update Utility。對 NXP i.MX 系列熟悉的使用者對 MFGTools 一定不會感到陌生,而 UUU 就是從 MFGTools 演進而來的,也稱為 MFGTools v3。至於不熟悉的人也還是得問,這個 UUU(MFGTools)到底是做什麼的?我們不賣關子,它的答案就是進行 Freescale/NXP Chip image 的燒錄。

這個改版的 UUU 有一個重大的改變,在於可運行的環境。原本的 MFGTools 只能提供 Windows 版本,改為 UUU 之後,即可以在 Windows 或是 Linux OS 下進行操作。此外,官方也提供原始碼(https://github.com/NXPmicro/mfgtools/wiki),讓客戶可以基於其核心,自行設計自己的燒錄工具。在這份文件中,會介紹 UUU 的使用方式以及其架構,讓客戶在燒錄時能了解目前燒錄的進度到哪,也有能力在無法燒錄時進行故障排除,進一步可以客製化自己的燒錄工具。

UUU 是一個 command line tools,執行畫面如下圖。

UUU 執行畫面示意圖

1.1 UUU 運行環境

Windows 10, 64bit

Ubuntu 16.14 or above, 64bit

1.2 License

若需要引用原始碼來開發自己的軟體需要注意相關授權的問題。UUU 基本上為 BSD 授權。而其他配套相關的 linked library,使用的授權列舉如下,

bzip2 (BSD license) is from https://github.com/enthought/bzip2-1.0.6

zlib (zlib license) is from https://github.com/madler/zlib.git

libusb (LGPL-2.1) is from https://github.com/libusb/libusb.git

2. UUU 指令介紹

一般而言,UUU 可逐行單獨執行,也可以將其收集寫成一個腳本,或是直接採用內建的腳本。另外,UUU 也可以做同時多塊板子同 image 或是不同 image 的燒錄。後續章節我們將會對這些內容做說明。

2.1 基本單指令

uuu + protocol:可進行溝通,下載或是直接燒錄

2.1.1 SDP protocol:USB SDP(Standard Downstream Port)協定,可下載映像至板端(internal RAM)。適用於 MX6/7/8M
Run DCD from image with ivt header
uuu sdp: dcd -f
Write image to address.
uuu sdp: write -f [-addr 0x000000] [-ivt 0]
Jump to image with ivt header
uuu sdp: jump -f [-ivt 0]
Boot image, include (dcd, write and jump three commands)
uuu sdp: boot -f [-nojump]

2.1.2 SDPS protocol:與 SDP 相同,適用於MX8QXP 和 i.MX8QM。
Send image by sdp command.


uuu sdps: boot -f [-offset 0x0000]

2.1.3 SDPU/SDPV protocol:通常接續在 SDP 之後,指令與 SDP 雷同,在 uboot 執行。
Run DCD from image with ivt header


uuu sdpu: delay 1000


uuu sdpu: write -f flash.bin -offset 0x57c00


uuu sdpu: jump

2.1.4 FB:Android fastboot protocol in uboot

ucmd:

acmd:

Boot linux kernel


uuu FB: ucmd setenv fastboot_buffer ${loadaddr}


uuu FB: download -f Image


uuu FB: ucmd setenv fastboot_buffer ${fdt_addr}


uuu FB: download -f imx8qxp_mek.dtb


uuu FB: acmd booti ${loadaddr} - ${fdt_addr}


 


Extended environment for fastboot


fastboot_buffer             /* Image download address */


fastboot_bytes              /* reflect previous download image byte size */


 


Write image to emmc


uuu FB: flash -raw2sparse all
2.1.5 FBK:Android fastboot protocol in kernel

ucmd:

acmd:

ucp:複製檔案

sync:等待、確保指令結束

複製檔案至指定目的地
uuu FBK: ucp imx8x/flash.bin t:/tmp
使用 kernel 指令 dd 進行燒錄
uuu FBK: ucmd dd if=/tmp/flash.bin of=/dev/mmcblk0 bs=1024 seek=32

2.2 特定單指令燒錄

uuu + bootloader(等同於 uuu + SDP)

2.2.1 下載 bootloader for imx6/imx7/imx8qxp 至 internal RAM
uuu uboot.imx


uuu flash.bin


2.3 使用內建的燒錄腳本

實際內容不外乎就是基本單指令的集合。

2.3.1 emmc 專用腳本
uuu -b emmc bootloader                                         /* 寫入 bootloader 至 emmc */


uuu -b emmc_all bootloader rootfs.sdcard           /* 完整燒錄至 emmc */


uuu -b emmc_all bootloader rootfs.sdcard.bz2/*  /*解壓縮後,完整燒錄 至 emmc */

比如imx8mm的烧录如下

sudo uuu -b emmc_all flash_sd_emmc.bin rootfs.sdcard

imx8qxp编译生成的镜像如下

forlinx@ubuntu:~/work/bin/imx-yocto-bsp/imx8qxpmek_wayland/tmp/deploy/images/imx8qxpmek$

在这里插入图片描述
在这里插入图片描述

2.3.2 sd 專用腳本
uuu -b sd bootloader                                            /* 寫入 bootloader 至 SD 卡 */


uuu -b sd_all bootloader rootfs.sdcard               /* 完整燒錄至 SD 卡 */


uuu -b sd_all bootloader rootfs.sdcard.bz2/*  /*解壓縮後,完整燒錄 至 SD 卡 */
2.3.3 qspi 專用腳本
uuu -b qspi qspi_bootloader


uuu -b qspi qspi_bootloader m4image
2.3.4 spl 專用腳本
uuu -b spl bootloader                                 /* 寫入 spl 和 uboot 至 Internal RAM */

2.4 多塊板子燒錄

2.4.1 燒錄選項〝d〞
Daemon mode(可進行重覆燒錄)


uuu -d uuu.auto
2.4.2 燒錄選項〝m〞

若同時連接兩塊以上的板子,可以看到類似以下畫面。以此為例,板子 1:2 此時停留在 FB mode,而板子 1:1 停留在 SDP mode

在这里插入图片描述

所以在後續使用上,利用 -m 可以針對某個或某些 port 進行燒錄。

2.4.3 綜合〝d〞和〝m〞
綜合上述兩個選項,針對不同的 USB port 連續燒錄不同的板子或是不同的 image 的方法如下,


uuu -d -m 1:1 -m 2:1 boardA_uuu.auto        //monitor port 1:1 and 2:1 for boardsA.


uuu -d -m 1:3 -m 4:1 boardB_uuu.auto        //monitor port 1:3 and 4:1 for boardsB.

3. 相關設定

3.1 UUU 支援的協定

UUU可以支援多種不同的協定,在不同的平台或是不同的階段下,各平台適用的協定以及各協定的 VID/PID 參考如下。另外,在 console 下,可以使用 uuu -lsusb 立即查詢目前板端的狀態。

Pctl Chip Vid Pid BcdVersion

==================================================

SDPS: MX8QXP 0x1fc9 0x012f [0x0002…0xffff]

SDPS: MX8QM 0x1fc9 0x0129 [0x0002…0xffff]

SDP: MX7D 0x15a2 0x0076

SDP: MX6Q 0x15a2 0x0054

SDP: MX6D 0x15a2 0x0061

SDP: MX6SL 0x15a2 0x0063

SDP: MX6SX 0x15a2 0x0071

SDP: MX6UL 0x15a2 0x007d

SDP: MX6ULL 0x15a2 0x0080

SDP: MX6SLL 0x1fc9 0x0128

SDP: MX7ULP 0x1fc9 0x0126

SDP: MXRT106X 0x1fc9 0x0135

SDP: MX8MM 0x1fc9 0x0134

SDP: MX8MQ 0x1fc9 0x012b

SDPU: SPL 0x0525 0xb4a4 [0x0000…0x04ff]

SDPV: SPL1 0x0525 0xb4a4 [0x0500…0xffff]

FBK: 0x066f 0x9afe

FBK: 0x066f 0x9bff

FB: 0x0525 0xa4a5

FB: 0x18d1 0x0d02

在这里插入图片描述

上圖的例子除了可以理解 USB port 的分佈之外,也可以對應前面的 table,看得出來 Path 1:2 目前處在 FB Protocol,且VID 為 0x0525,PID為 0xA4A5;而 Path 1:1 目前則處在 SDP Protocol,且 VID 為 0x1FC9,PID 為 0x012B,是 i.MX8MQ 板子。

3.2 uboot config 需求

為了有效應用 uuu,uboot 需要 enable fastboot,以下是 fastboot 必開選項,而且會在偵測到是 USB 開機的情況下自動執行。

CONFIG_CMD_FASTBOOT=y

CONFIG_USB_FUNCTION_FASTBOOT=y

CONFIG_USB_GADGET=y

CONFIG_USB_GADGET_DOWNLOAD=y

CONFIG_USB_GADGET_MANUFACTURER=“FSL”

CONFIG_USB_GADGET_VENDOR_NUM=0x0525

CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5

#UDC need change according system, some system use CONFIG_USB_DWC3, some use CONFIG_USB_CDNS3

CONFIG_CI_UDC=y

CONFIG_FSL_FASTBOOT=y

CONFIG_FASTBOOT=y

#Address need change according system, generally it can be the same as ${LOADADDR}

CONFIG_FASTBOOT_BUF_ADDR=0x83800000

CONFIG_FASTBOOT_BUF_SIZE=0x40000000

CONFIG_FASTBOOT_FLASH=y

CONFIG_FASTBOOT_FLASH_MMC_DEV=1

CONFIG_EFI_PARTITION=y

CONFIG_ANDROID_BOOT_IMAGE=y

使用 SDP 的話,則需要開啟

CONFIG_SPL_USB_HOST_SUPPORT=y

CONFIG_SPL_USB_GADGET_SUPPORT=y

CONFIG_SPL_USB_SDP_SUPPORT=y

CONFIG_SDP_LOADADDR=0x40400000 #Address need change according system, choose free memory

4. 總結

以軟體而言,將 build 好的 image 燒錄至板端然後開機是最最最基本的功課。而後續要展開各式各樣的應用當然也是基於能開機的前提之下,所以如何進行完整的成功的燒錄非常重要。〝工欲善其事、必先利其器〞,這篇文章介紹了 i.mx 的燒錄 tool – UUU,冀望使用者在讀完之後,進一步的了解整個燒錄的過程,為後續的應用起一個好的開局。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值