Skip to content

# 2. 镜像烧写工具使用

## 2.1. 镜像烧写流程介绍

### 2.1.1. 地平线升级工具

#### 2.1.1.1. 简介

目前烧写工具支持windows10 64位系统和ubuntu18.04以上系统。用户需将系统对应的烧写文件压缩包下载并解压，按镜像烧写流程介绍进行操作。

#### 2.1.1.2. Windows版本

解压 j6_tools_*.zip 文件，进入windows_ui后解压navigation-win32-x64.7z。进入navigation-win32-x64后，双击执行目录里的navigation.exe。log文件存放在解压后的resources/app/artifacts/x86_64-win64/hbupdate/log目录中。

推荐修改 resources/app/artifacts/x86_64-win64/hbupdate/data/config.json 中 “mcu_bin”, “mcu_img”两个字段为要烧录的mcu文件名。

#### 2.1.1.3. Linux版本

解压 j6_tools_*.zip 文件，ubuntu_ui中是图形界面，ubuntu_cmd中是命令行接口。解压对应的*.tar获得对应工具。

##### 2.1.1.3.1. 图形界面

    cd navigation-linux-x64
    sudo ./navigation --no-sandbox

log文件存放在解压后的resources/app/artifacts/x86_64-linux/hbupdate/log目录。

推荐修改 resources/app/artifacts/x86_64-linux/hbupdate/data/config.json 中 “mcu_bin”, “mcu_img”两个字段为要烧录的mcu文件名。

##### 2.1.1.3.2. 命令行

    cd hbupdate
    sudo ./hbupdate

log文件存放在hbupdate/log目录。

推荐修改 hbupdate/data/config.json 中 “mcu_bin”, “mcu_img”两个字段为要烧录的mcu文件名。

#### 2.1.1.4. 镜像烧写流程

1. 选择产品类型（目前只有一款芯片）;

2. 下载配置；

3. 板端选择（目前只支持单板烧录）；

4. 开始升级

#### 2.1.1.5. 使用建议和常见问题

1. 使用之前请阅读使用手册；

2. 当单板无法启动时，可以使用usb下载模式烧录救砖。

### 2.1.2. DFU

在单板无法正常启动时（无法正常进入U-Boot），可以使用DFU启动到U-Boot下，再使用Fastboot烧录所需镜像。

工具准备：

1. Windows下DFU工具下载路径https://dfu-util.sourceforge.net/ 。

2. Ubuntu安装方式

   >     apt-get install dfu-util

不同的启动方式（secure和non-secure）所需要的镜像和下载方式都不相同，使用DFU启动前请确认板上拨码开关所对应的启动方式。

#### 2.1.2.1. non-secure

下载准备：

1. 检查拨码确认板子处于non-secure烧录模式，下载并解压发布包，启动所需的bin文件在xmodem_tools中

2. 板子上电或者按键reset，当观察到下面的打印时表示板子进入了USB下载模式

   >     I:Bootrom v1.0.8-5211228 (Tue, 02 Jan 2024 14:40:46 +0800)
   >     4442-5353-4d33-484e-474e-4853-4348-5348-4852-4c4f-4e42-444e
   >     usb>>>
   >     high speed config #1: Device Firmware Upgrade Gadget
   >     UUUUUUUUUUUUUUU

3. 按照顺序下载并启动相关镜像

   >     dfu-util -d,3652:6610 -a 0 -D cmd_load_sbl
   >     sleep 1
   >     dfu-util -d,3652:6610 -a 0 -D sbl.pkg
   >     sleep 1
   >     dfu-util -d,3652:6610 -a 0 -D cmd_exit
   >     sleep 5

   >     # 通过MCU串口观察到SBL启动并且打印UUU后可以执行下面的命令
   >     dfu-util -d,3652:6620  -a 0 -D scp.bin -R
   >     sleep 5

   >     dfu-util -d,3652:6620 -a 0 -D ddrc_init_r52.bin -R
   >     # 等待DDR初始化成功（需要根据实际情况判断延时），以MCU串口打印UUU为标志
   >     sleep 5

   >     dfu-util -d,3652:6620 -a 0 -D u-boot-spl.bin -R
   >     sleep 3

   >     # mcu_bin需要根据板子类型进行选择
   >     dfu-util -d,3652:6620 -a 0 -D $mcu_bin -R
   >     sleep 3

   >     # 以下步骤的log会打印到A78AE侧串口
   >     dfu-util -d,3652:6625 -a 0 -D hobot-j6e-bl31.dtb
   >     dfu-util -d,3652:6625 -a 1 -D bl31.bin
   >     dfu-util -d,3652:6625 -a 2 -D tee-pager_v2.bin
   >     dfu-util -d,3652:6625 -a 3 -D u-boot.bin -R

下载脚本：

1. 下载并解压发布包，xmodem_tools下提供了Linux和Windows下载的参考脚本（Linux下注意USB的权限问题）

2. Windows: usb_serial_download.bat，使用方式：usb_serial_download.bat mcu_bin

3. Linux: usb_serial_download.sh，使用方式：usb_serial_download.sh

#### 2.1.2.2. secure

下载准备：

1. 检查拨码确认板子处于secure烧录模式，下载并解压发布包，启动所需的img文件在img_packages目录下，HSM相关文件在xmodem_tools中

2. 板子上电或者按键reset，当观察到下面的打印时表示板子进入了USB下载模式

   >     I:Bootrom v1.0.8-5211228 (Tue, 02 Jan 2024 14:40:46 +0800)
   >     4442-5353-4d33-484e-474e-4853-4348-5348-4852-4c4f-4e42-444e
   >     usb>>>
   >     high speed config #1: Device Firmware Upgrade Gadget
   >     UUUUUUUUUUUUUUU

3. 按照顺序下载并启动相关镜像

   >     # 下面三个文件在xmodem_tools目录下
   >     dfu-util -d,3652:6610 -a 0 -D cmd_load_hsmfw
   >     sleep 1
   >     dfu-util -d,3652:6610 -a 0 -D hsmfw_se.pkg
   >     sleep 1
   >     dfu-util -d,3652:6610 -a 0 -D cmd_exit_hsmfw
   >     sleep 5

   >     # 下面的镜像都在img_packages目录
   >     # 通过HSM串口观察到HSM启动并且打印UUU后可以执行下面的命令
   >     dfu-util -d,3652:6615 -a 0 -D fpt.img -R
   >     sleep 5

   >     dfu-util -d,3652:6615 -a 0 -D keyimage.img -R
   >     sleep 5

   >     # 执行完后可以在MCU串口看到SBL正常启动
   >     dfu-util -d,3652:6615 -a 0 -D SBL.img -R
   >     sleep 3

   >     dfu-util -d,3652:6620 -a 0 -D scp.img -R
   >     sleep 5

   >     dfu-util -d,3652:6620 -a 0 -D ddrc.img -R
   >     # 等待DDR初始化成功（需要根据实际情况判断延时），以MCU串口打印UUU为标志
   >     sleep 5

   >     dfu-util -d,3652:6620 -a 0 -D spl.img -R
   >     sleep 3

   >     # mcu_img需要根据板子类型进行选择
   >     dfu-util -d,3652:6620 -a 0 -D $mcu_img -R
   >     sleep 3

   >     # 以下步骤的log会打印到A78AE侧串口
   >     dfu-util -d,3652:6625 -a 0 -D acore_cfg.img
   >     dfu-util -d,3652:6625 -a 1 -D bl31.img
   >     dfu-util -d,3652:6625 -a 2 -D optee.img
   >     dfu-util -d,3652:6625 -a 3 -D uboot.img -R

下载脚本：

1. 下载并解压发布包，xmodem_tools下提供了Linux和Windows下载的参考脚本（注：需要把所有镜像放在与脚本相同的目录下）

2. Windows: usb_serial_download_secure.bat，使用方式：usb_serial_download_secure.bat mcu_img

3. Linux: usb_serial_download_secure.sh，使用方式（注意USB口的权限）：usb_serial_download_secure.sh

### 2.1.3. UART

在单板无法正常启动时，可以使用uart启动到uboot下，再使用fastboot烧录所需镜像。

烧录准备：

1. 调整板上DIP开关至UART启动模式，波特率921600，具体可参看 快速部署指南 。

2. 下载并解压发布包。

3. 连接MCU、Acore串口。

观察板端的打印，通过xmodem方式传输镜像。具体传输的文件可以参考，上文dfu相关镜像。

### 2.1.4. Fastboot(udp)

#### 2.1.4.1. 进入方式

##### 2.1.4.1.1. Kernel内

    reboot

按回车进入uboot

##### 2.1.4.1.2. UBoot内

    fastboot udp

#### 2.1.4.2. 使用方法

开发板通过上述方法进入Fastboot模式，并通过ethernet连接至PC；使用Fastboot烧写镜像。

#### 2.1.4.3. 单板端命令

#配置单板ip：

    setenv ipaddr xx.xx.xx.xx
    setenv gatewayip xx.xx.xx.xx
    setenv netmask xx.xx.xx.x

#查看mmc分区表：

    mmc part

#查看ufs分区表：

    scsi part

#查看mtd分区表：

    mtd list

#### 2.1.4.4. PC端命令

可以单独操作某一分区。下面命令中的”xx.xx.xx.xx”为板端IP。

#更新norflash相关分区：

    fastboot -s udp:xx.xx.xx.xx:5554 oem interface:mtd

#更新emmc相关分区：

    fastboot -s udp:xx.xx.xx.xx:5554 oem interface:blk
    fastboot -s udp:xx.xx.xx.xx:5554 oem bootdevice:mmc

#更新ufs相关分区：

    fastboot -s udp:xx.xx.xx.xx:5554 oem interface:blk
    fastboot -s udp:xx.xx.xx.xx:5554 oem bootdevice:scsi

#单独烧写分区命令：

    fastboot -s udp:xx.xx.xx.xx:5554 flash [part] [file]

#其中part为分区名，file为要烧录的文件，如下：

    fastboot -s udp:xx.xx.xx.xx:5554 flash system_a system.img

### 2.1.5. Fastboot(USB)

#### 2.1.5.1. 进入方式

##### 2.1.5.1.1. Kernel内

    reboot

按回车进入U-Boot

##### 2.1.5.1.2. U-Boot内

    fastboot 0

#### 2.1.5.2. 使用方法

开发板通过上述方法进入Fastboot模式，并通过USB连接至PC，使用Fastboot烧写镜像。

#### 2.1.5.3. 单板端命令

#查看mmc分区表：

    mmc part

#查看mtd分区表：

    mtd list

#### 2.1.5.4. PC端命令

#查看Fastboot设备（Linux下需要root权限，或者通过udev规则设置USB权限）：

    fastboot devices

可以单独操作某一分区，例如：

#更新Flash相关分区：

    fastboot oem interface:mtd

#更新eMMC相关分区：

    fastboot oem interface:blk
    fastboot oem bootdevice:mmc

#更新UFS相关分区：

    fastboot oem interface:blk
    fastboot oem bootdevice:scsi

#单独烧写分区命令：

    fastboot flash [part] [file]

#其中part为分区名，file为要烧录的文件，如下：

    fastboot flash system_a system.img

### 2.1.6. 使用建议和常见问题

1. 使用之前务必仔细阅读使用手册；

2. 镜像的文件名不支持中文，不能有空格，最好是简单的全英文加下划线；

3. 为了增加镜像下载的速度和成功率，fastboot(udp)模式下板子与PC直连，尤其不要用无线网络与板子通讯；

4. 配置网络的时候要仔细确认板子的网络和pc的网卡地址是在一个子网；

5. 若网络不通，请关闭防火墙再尝试。