Skip to content

# 4.1. J6X 支持的存储介质

J6X支持的存储介质包括：emmc、Nor flash和ufs。

## 4.1.1. 存储介质共存情况

emmc和ufs可以同时接入到同一个板子中，但是刷写时，不能同时刷写。

# 4.2. 硬件环境检查

## 4.2.1. 串口环境检查

J6X 使用uart作为控制/启动串口，刷写前需要首先确认uart 已经以正确的方式连接到了电脑。

## 4.2.2. 网络环境检查

网络环境的配置请根据 J6X 的实际的网络拓扑结构，再参考 网络设置 章节内容来完成 IP 设置以及检查。

# 4.3. 刷写方法

## 4.3.1. Fastboot

以上的所有存储介质都可以通过 fastboot 命令来刷写。

### 4.3.1.1. 进入fastboot模式

重启开发板，在uboot倒计时结束前，ENTER打断，进入uboot命令行，执行fastboot命令：

    Hobot$ fastboot xxx

### 4.3.1.2. Fastboot版本

备注

早期版本的 fastboot 版本对 udp 的支持比较差，需要使用高版本的fastboot。

建议版本：29.0.6 以及之后的版本

fastboot version 29.0.6-6198805

### 4.3.1.3. 切换刷写介质

J6X fastboot 支持同时刷写emmc/ufs和nor flash，可以在服务器端通过如下命令来切换：

    # emmc/ufs
    fastboot oem interface:blk
    # nor flash
    fastboot oem interface:mtd

刷写ufs时，Matrix6 E/M需要额外焊电阻，把R1712上的电阻焊接到R1711上：

### 4.3.1.4. 单分区刷写命令

服务器端执行：

    fastboot flash boot_a ${image_base}/boot.img

### 4.3.1.5. 全部刷写

J6X源码参考 Build与生成镜像 整编之后，会在$HR_TOP_DIR/out/debug-gcc_12.2-64/target/product/img_packages目录下产生所有 fastboot 刷写所需要的文件，以及刷写脚本。

当板子进入刷写模式之后即可开始刷写。

服务器端执行：

    ./flash_all.sh

### 4.3.1.6. 刷写方式

#### 4.3.1.6.1. Fastboot udp

此方式通过网络刷写镜像，需要开发板连接的网络支持dhcp且uboot中已经配置好IP地址、网络掩码、网关地址等信息。

刷写前，服务器端执行如下命令：

    export ANDROID_SERIAL=udp:xx.xx.xx.xx:5554 #其中xx.xx.xx.xx更换为板子所配ip

板端uboot：

    Hobot$ fastboot udp

随后进行刷写。

#### 4.3.1.6.2. Fastboot USB

此方法适用于U-Boot网络不通的场景，通过USB烧写，详情可参考 Fastboot(usb)。

## 4.3.2. 使用mtd命令刷写

此方法也可适用于bringup时uboot下网络不通的场景，通常优先使用上述的fastboot 0方式，而不需要使用这个方法。

uboot下执行mtd list命令可查看系统当前分区信息，由于分区表后续可能调整，因此不在此展示该命令的执行结果。

mtd的用法用户可自行学习，不在此赘述。

    Hobot$ mtd --help
    mtd - MTD utils

    Usage:
    mtd - generic operations on memory technology devices

    mtd list
    mtd read[.raw][.oob]                  <name> <addr> [<off> [<size>]]
    mtd dump[.raw][.oob]                  <name>        [<off> [<size>]]
    mtd write[.raw][.oob][.dontskipff]    <name> <addr> [<off> [<size>]]
    mtd erase[.dontskipbad]               <name>        [<off> [<size>]]

    Specific functions:
    mtd bad                               <name>

    With:
       <name>: NAND partition/chip name (or corresponding DM device name or OF path)
       <addr>: user address from/to which data will be retrieved/stored
       <off>: offset in <name> in bytes (default: start of the part)
          * must be block-aligned for erase
          * must be page-aligned otherwise
       <size>: length of the operation in bytes (default: the entire device)
          * must be a multiple of a block for erase
          * must be a multiple of a page otherwise (special case: default is a page with dump)

    The .dontskipff option forces writing empty pages, don't use it if unsure.

## 4.3.3. 使用dd命令刷写

进入kernel命令行

1. 先将分区镜像文件下载到文件系统中，如放在/userdata/image.img。

2. 查看分区信息 ls /dev/block/platform/by-name/ 找到对应设备节点。

    root@hobot:~# ls /dev/block/platform/by-name/
    acore_cfg_a     boot_a         HSM_FW_bak        MCU_Cluster1_a    r52stl_a    system_cur
    acore_cfg_b     boot_b         HSM_RCA_a         MCU_Cluster1_b    r52stl_b    system_verity_a
    acore_cfg_cur   boot_cur       HSM_RCA_b         MCU_Cluster1_cur  r52stl_cur  system_verity_b
    app_a           ddrc_a         HSM_RCA_cur       MCU_Cluster2_a    recovery    system_verity_cur
    app_b           ddrc_b         keyimage_a        MCU_Cluster2_b    SBL_a       uboot_a
    app_cur         ddrc_cur       keyimage_b        MCU_Cluster2_cur  SBL_b       uboot_b
    app_param       ddrp_a         keyimage_cur      middleware_a      SBL_cur     uboot_cur
    backhaul        ddrp_b         log               middleware_b      scp_a       ubootenv
    basesystem_a    ddrp_cur       map               middleware_cur    scp_b       userdata
    basesystem_b    ddr_quickboot  mcu_cfg_a         minidump          scp_cur     vbmeta_a
    basesystem_cur  flashcmd       mcu_cfg_b         misc              spl_a       vbmeta_b
    bl31_a          fpt            mcu_cfg_cur       optee_a           spl_b       vbmeta_cur
    bl31_b          HB_APDP        MCU_Cluster0_a    optee_b           spl_cur     veeprom
    bl31_cur        hb_vspiflash   MCU_Cluster0_b    optee_cur         system_a
    blk             HSM_FW         MCU_Cluster0_cur  ota               system_b

1. 用dd命令将image.img写到app_a分区。

    dd if=app.img of=/dev/block/platform/by-name/app_a oflag=direct bs=1M

如果要烧写完整disk镜像，kernel下dd写/dev/mmcblk0设备节点即可。

    dd if=emmc_disk.img of=/dev/mmcblk0 oflag=direct bs=1M

# 4.4. 版本号获取

所有镜像版本号获取，在内核命令行执行命令：hb_version。

指定镜像版本号获取，在内核命令行执行以下命令：

    Release版本：cat /etc/version
    HSM版本：cat /proc/version_hsm
    SBL版本：cat /sys/class/remoteproc/remoteproc0/sbl_version
    DDR版本：cat /proc/ddr_version/version
    MCU版本：cat /sys/class/remoteproc/remoteproc0/mcu_version
    SCP版本：strings /dev/block/platform/by-name/scp_cur | grep "SCP: Built"
    SPL版本：strings /dev/block/platform/by-name/spl_cur | grep "U-Boot SPL"
    BL31版本：cat /proc/bl31_debug/version
    OPTEE版本：cat /proc/version_optee
    UBOOT版本：cat /proc/bootloader_log | grep U-Boot | head -n 1
    LINUX版本：cat /proc/version
    BPU版本：cat /sys/devices/system/bpu/bpu0/fw_version
    VDSP版本，启动VDSP后查看版本：cat /sys/class/remoteproc/remoteproc1/version