跳转至

裸烧及非裸烧升级 使用手册

前言

概述

本文档用于指导调试裸烧及非裸烧升级。

读者对象

本文档(本指南)主要适用于以下工程师:

  • 技术支持工程师
  • 软件开发工程师

修改记录

文档版本

发布日期

修改说明

00B01

2026-03-15

第1次临时版本发布。

裸烧使用说明

操作准备

操作准备如下:

  • 编译镜像,如表1所示;
  • 制作升级包;
  • 存储介质准备(FAT32格式的SD卡)。

表 1 升级所需的镜像

启动方案

镜像

快速启动

u-boot-ss928v100.bin、uImage_ss928v100(kernel)、rootfs

非安全启动

boot_image.bin、uImage_ss928v100(kernel)、rootfs

Non-TEE安全启动

TEE安全启动

boot_image.bin、uImage_ss928v100(kernel)、rootfs、tee_image.bin

裸烧流程

裸烧流程如图1所示。

图 1 裸烧流程图

操作过程

操作过程如下:

  1. 根据表1编译镜像,非安全启动和安全启动镜像的编译方法请参考《SS928V100/SS927V100 安全启动使用指南》,有如下注意事项。

    • 编译u-boot镜像时,需进入u-boot源码目录下,执行 make menuconfig

      根据实际情况使用的介质,开启sd卡或者usb的更新:

      Product --->

      [*] Auto update

      [*] Auto sd update

      [ ] Auto usb update

    • 编译GSL时,需进入gsl源码目录,在文件boot/ss928v100/main.c中打开SD升级宏开关,并关闭USB烧写宏开关(快速启动镜像不需要编译gsl):

      #define CONFIG_AUTO_SD_UPDATE     1
      #define CONFIG_TOOLPLATFORM_USB_UPDATE  0
      
  2. 根据使用的启动方案制作升级包。

    • 快速启动、非安全启动和Non-TEE安全启动升级包制作方法

      创建config文本文件,并把和镜像匹配的bootargs和bootcmd拷贝至其中,格式如下:

      • SPI NOR Flash

        setenv bootargs 'mem=128M console=ttyAMA0,115200 clk_ignore_unused rw root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=sfc:1M(u-boot.bin),12M(kernel),18M(rootfs.jffs2)';sa
        setenv bootcmd 'sf probe 0;sf read 0x42000000 0x100000 0xc00000;bootm 0x42000000';sa
        
      • SPI NAND Flash:

        setenv bootargs 'mem=128M console=ttyAMA0,115200 clk_ignore_unused ubi.mtd=2 root=ubi0:ubifs rootfstype=ubifs rw mtdparts=nand:1M(u-boot.bin),12M(kernel),32M(rootfs.ubifs)';sa
        setenv bootcmd 'nand read 0x42000000 0x100000 0xc00000;bootm 0x42000000';sa
        
      • eMMC:

        setenv bootargs 'mem=128M console=ttyAMA0,115200 clk_ignore_unused rw rootwait root=/dev/mmcblk0p3 rootfstype=ext4 blkdevparts=mmcblk0:1M(u-boot.bin),12M(kernel),96M(rootfs.ext4)';sa
        setenv bootcmd 'mmc read 0 0x42000000 0x800 0x6000; bootm 0x42000000';sa
        

      升级包参考如下:

      • kernel为ATF + Linux Kernel镜像;
      • 对于快速启动,u-boot.bin为单独编译的u-boot-ss928v100.bin镜像;
      • 对于非安全启动和Non-TEE安全启动,u-boot.bin为image_map脚本生成的boot_image.bin镜像。
    • TEE安全启动升级包制作方法

      创建config文本文件,并把和镜像匹配的bootargs和bootcmd拷贝至其中,格式如下:

      • SPI NOR Flash

        setenv bootargs 'mem=128M console=ttyAMA0,115200 tee_enable root=/dev/mtdblock2 rw rootfstype=jffs2 mtdparts=sfc:1M(u-boot.bin),12M(kernel),18M(rootfs.jffs2),1M(tee.bin)';sa
        setenv bootcmd 'sf probe 0;sf read 0x42000000 0x100000 0xc00000;sf read 0x43000000 0x1f00000 0x100000;bootm 0x42000000 0x43000000';sa
        
      • SPI NAND Flash:

        setenv bootargs 'mem=128M console=ttyAMA0,115200 tee_enable clk_ignore_unused ubi.mtd=2 root=ubi0:ubifs rootfstype=ubifs rw mtdparts=nand:1M(u-boot.bin),12M(kernel),32M(rootfs.ubifs),1M(tee.bin)';sa
        setenv bootcmd 'nand read 0x42000000 0x100000 0xc00000;nand read 0x43000000 0x2d00000 0x100000;bootm 0x42000000 0x43000000';sa
        
      • eMMC:

        setenv bootargs 'mem=128M console=ttyAMA0,115200 tee_enable clk_ignore_unused rw rootwait root=/dev/mmcblk0p3 rootfstype=ext4 blkdevparts=mmcblk0:1M(u-boot.bin),12M(kernel),96M(rootfs.ext4),1M(tee.bin)';sa
        setenv bootcmd 'mmc read 0 0x42000000 0x800 0x6000; mmc read 0 0x43000000 0x36800 0x800; bootm 0x42000000 0x43000000';sa
        

      升级包参考如下:

      • kernel为Linux Kernel镜像;
      • u-boot.bin为image_map脚本生成的boot_image.bin镜像;
      • tee.bin为image_map脚本生成的tee_image.bin镜像。
  3. 插入存放有升级包的FAT32格式的SD卡至SDIO0卡槽,按住UPDATE按键,启动单板。

    说明:

    • Vendor作为TEE Owner的情况下不支持SD卡升级。
    • 把升级包放置在SD卡前,请先把SD卡进行格式化操作。
    • 升级包里的u-boot或boot_image镜像名必须为u-boot.bin,镜像名必须和config中的bootargs一致,如10M(sample.bin),则kernel的镜像名应为sample.bin;
    • 可烧写多个文件系统镜像;
    • ubifs文件系统镜像的文件名中必须包含ubifs字符串,其他镜像的文件名中必须不能包含ubifs字符串。
    • ext4文件系统镜像的文件名中必须包含ext4字符串,其他镜像的文件名中必须不能包含ext4字符串。
    • 由于LiteOS 启动bootcmd设置与Linux不同处,可参考如下命令设置:
    SPI NOR Flash: setenv bootcmd 'sf probe 0;sf read 0x44000000 0x1f00000 0x100000;go_riscv 0x44000000; sf read 0x50000000 0x100000 0xc00000;bootm 0x50000000;sa
    SPI NAND Flash: setenv bootcmd 'nand read 0x44000000 0x2d00000 0x100000;go_riscv 0x44000000; nand read 0x50000000 0x100000 0xc00000;bootm 0x50000000;sa。
    eMMC: setenv bootcmd ' mmc read 0 0x44000000 0x36000 0x800;go_riscv 0x44000000;mmc read 0 0x50000000 0x800 0x6000; bootm 50000000';sa
    

操作示例

裸烧示例

  • 格式化SD卡为FAT32格式;
  • 将操作过程中制作的升级包拷贝到格式化好的SD卡中。格式化SD卡具体方法请参考《外围设备驱动 操作指南》附录;
  • 裸烧打印以及打印说明如下(以SPI NOR Flash非安全启动举例):

    //bootrom读取u-boot.bin至内存并执行此u-boot
    //读取升级配置文件
    [0]=u-boot.bin       start=0x00000000 end=0x000fffff size=0x00100000
    [1]=kernel           start=0x00100000 end=0x00cfffff size=0x00c00000
    [2]=rootfs.jffs2     start=0x00d00000 end=0x01efffff size=0x01200000
    //读取并烧写u-boot.bin
    spinor erase...
    spinor write...
    //读取并烧写kernel
    spinor erase...
    spinor write...
    //读取并烧写rootfs.jffs2
    spinor erase...
    spinor write...
    //保存环境变量
    Saving Environment to SPI Flash... Erasing SPI flash...Writing to SPI flash...done
    OK
    //接下来将自动启动新系统
    

操作中需要注意的问题

  • SD卡必须格式化成FAT32格式;
  • 若SD卡有多个分区时,升级包必须放在第一个分区,否则扫描不到升级包;
  • u-boot或boot_image镜像名称必须为u-boot.bin;
  • 裸烧会自动保存config中的bootargs和bootcmd环境变量;
  • 没有config文件时,仅会烧写bootrom读取的u-boot.bin镜像。

设置eMMC扩展CSD寄存器

如果用SD卡裸烧的方式烧写,u-boot会利用自带的eMMC驱动对eMMC扩展CSD寄存器进行设置,不需要额外设置。但如果使用烧录器方式进行烧写,则需要烧录器配置eMMC扩展CSD寄存器。此部分主要说明在烧录器操作界面上,需要配置 eMMC 的哪些寄存器及寄存器的值。

eMMC 器件包含有BOOT1、BOOT2和 USER DATA分区,同时支持 n_RST 管脚和下电复位。boot 从 USER DATA区启动,所有镜像数据都烧录到 USER DATA分区,同时只支持 n_RST 管脚复位器件,因此,烧录器必须按下表配置寄存器的值,否则单板无法启动。

寄存器编号

寄存器值

说明

179

0x38

此寄存器用于配置 boot分区,默认从 USER DATA区开始配置。

177

0x2

此寄存器用于配置 eMMC 在 boot 模式下的总线宽度。用户需要根据硬件设计使用的总线宽度进行设置(0x1:4-bit 0x2:8-bit)。

167

0x1f

此寄存器用于配置 eMMC 器件的写可靠性。该寄存器需配置成 0x1f。

162

0x1

此寄存器用于配置 eMMC 器件的 n_RST 管脚是否有效。默认使用 n_RST 管脚,该寄存器必须配置成 0x1。

177寄存器配置如表1所示。

表 1 177寄存器配置说明

寄存器域

寄存器域说明

配置值

Bit[4:3]

BOOT_MODE(nonvolatile)

00:单沿 DS模式;

01:单沿 HS模式;

10:双沿boot模式;

11:保留。

0x0

Bit[2]

RESET_BOOT_BUS_CONDITIONS(nonvolatile)

0:boot之后,复位BOOT_BUS_WIDTH为x1,单沿,DS模式;

1:boot之后,保留BOOT_BUS_WIDTH。

默认值:0;

必须配置为默认值

Bit[1:0]

BOOT_BUS_WIDTH

00:x1 (单沿) or x4 (双沿)总线boot;

01:x4 (单沿/双沿)总线boot;

10:x8 (单沿/双沿)总线boot;

11:保留。

用户需要根据硬件设计使用的总线宽度进行设置:

单板4线:0x1

单板8线:0x2

说明:

  • 必须在烧录之前完成eMMC 扩展寄存器的配置。
  • 部分烧录器可能不支持设置扩展CSD寄存器的功能,需烧录器厂家支持。

具体的设置由于各厂家的eMMC烧录器不同而存在差异,请参考烧录器手册来配置。

非裸烧升级使用说明

操作准备

升级操作准备如下:

  • 编译镜像,参考表1;
  • 制作升级包;
  • 存储介质准备(FAT32格式的SD卡或U盘);

升级流程

升级流程如图1所示。

图 1 升级流程图

操作过程

操作过程如下:

  1. 根据表1编译镜像,非安全启动和安全启动镜像的编译方法请参考《SS928V100/SS927V100 安全启动使用指南》,有如下注意事项。

    • 编译u-boot镜像时,需进入u-boot源码目录下,执行 make menuconfig

      根据实际情况使用的介质,开启sd卡或者usb的更新:

      Product --->

      [*] Auto update

      [*] Auto sd update

      [ ] Auto usb update

    • 编译GSL时,需进入gsl源码目录,在文件boot/ss928v100/main.c中打开SD升级宏开关,并关闭USB烧写宏开关(快速启动镜像不需要编译gsl):

      #define CONFIG_AUTO_SD_UPDATE     1
      #define CONFIG_TOOLPLATFORM_USB_UPDATE  0
      
  2. 根据使用的启动方案制作升级包。

    • 快速启动、非安全启动和Non-TEE安全启动升级包制作方法。

      创建config文本文件,并把和镜像匹配的bootargs和bootcmd拷贝至其中,格式如下:

      • SPI NOR Flash

        setenv bootargs 'mem=128M console=ttyAMA0,115200 clk_ignore_unused rw root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=sfc:1M(u-boot.bin),12M(kernel),18M(rootfs.jffs2)';sa
        setenv bootcmd 'sf probe 0;sf read 0x42000000 0x100000 0xc00000;bootm 0x42000000';sa
        
      • SPI NAND Flash

        setenv bootargs 'mem=128M console=ttyAMA0,115200 clk_ignore_unused ubi.mtd=2 root=ubi0:ubifs rootfstype=ubifs rw mtdparts=nand:1M(u-boot.bin),12M(kernel),32M(rootfs.ubifs)';sa
        setenv bootcmd 'nand read 0x42000000 0x100000 0xc00000;bootm 0x42000000';sa
        
      • eMMC

        setenv bootargs 'mem=128M console=ttyAMA0,115200 clk_ignore_unused rw rootwait root=/dev/mmcblk0p3 rootfstype=ext4 blkdevparts=mmcblk0:1M(u-boot.bin),12M(kernel),96M(rootfs.ext4)';sa
        setenv bootcmd 'mmc read 0 0x42000000 0x800 0x6000; bootm 0x42000000';sa
        

      升级包参考如下:

      • kernel为ATF + Linux Kernel镜像;
      • 对于快速启动,u-boot.bin为单独编译的u-boot-ss928v100.bin镜像;
      • 对于非安全启动和Non-TEE安全启动,u-boot.bin为image_map脚本生成的boot_image.bin镜像。
    • TEE安全启动升级包制作方法

      创建config文本文件,并把和镜像匹配的bootargs和bootcmd拷贝至其中,格式如下:

      • SPI NOR Flash

        setenv bootargs 'mem=128M console=ttyAMA0,115200 tee_enable root=/dev/mtdblock2 rw rootfstype=jffs2 mtdparts=sfc:1M(u-boot.bin),12M(kernel),18M(rootfs.jffs2),1M(tee.bin)';sa
        setenv bootcmd 'sf probe 0;sf read 0x42000000 0x100000 0xc00000;sf read 0x43000000 0x1f00000 0x100000;bootm 0x42000000 0x43000000';sa
        
      • SPI NAND Flash

        setenv bootargs 'mem=128M console=ttyAMA0,115200 tee_enable clk_ignore_unused ubi.mtd=2 root=ubi0:ubifs rootfstype=ubifs rw mtdparts=nand:1M(u-boot.bin),12M(kernel),32M(rootfs.ubifs),1M(tee.bin)';sa
        setenv bootcmd 'nand read 0x42000000 0x100000 0xc00000;nand read 0x43000000 0x2d00000 0x100000;bootm 0x42000000 0x43000000';sa
        
      • eMMC

        setenv bootargs 'mem=128M console=ttyAMA0,115200 tee_enable clk_ignore_unused rw rootwait root=/dev/mmcblk0p3 rootfstype=ext4 blkdevparts=mmcblk0:1M(u-boot.bin),12M(kernel),96M(rootfs.ext4),1M(tee.bin)';sa
        setenv bootcmd 'mmc read 0 0x42000000 0x800 0x6000; mmc read 0 0x43000000 0x36800 0x800; bootm 0x42000000 0x43000000';sa
        

      升级包参考如下:

      • kernel为Linux Kernel镜像;
      • u-boot.bin为image_map脚本生成的boot_image.bin镜像;
      • tee.bin为image_map脚本生成的tee_image.bin镜像。
  3. 插入存放有升级包的FAT32格式的SD卡(SDIO0)或U盘,按住UPDATE按键,启动单板,升级系统。

    说明:

    • Vendor作为TEE Owner的情况下不支持SD卡升级。
    • 把升级包放置在SD卡或U盘前,请先把SD卡或U盘进行格式化操作。
    • 升级包里的镜像名必须和bootargs一致,如9M(sample.bin),则kernel的镜像名应为sample.bin;
    • 如果镜像文件不存在则不升级对应项;
    • 支持升级多个文件系统镜像;
    • 如果想继续使用u-boot中的环境变量bootargs和bootcmd,则不需要准备config文件;
    • ubifs文件系统镜像的文件名中必须包含ubifs字符串,其他镜像的文件名中必须不能包含ubifs字符串。
    • ext4文件系统镜像的文件名中必须包含ext4字符串,其他镜像的文件名中必须不能包含ext4字符串。
    • 由于LiteOS 启动bootcmd设置与Linux不同处,可参考如下命令设置:
    SPI NOR Flash: setenv bootcmd 'sf probe 0;sf read 0x44000000 0x1f00000 0x100000;go_riscv 0x44000000; sf read 0x50000000 0x100000 0xc00000;bootm 0x50000000;sa
    SPI NAND Flash: setenv bootcmd 'nand read 0x44000000 0x2d00000 0x100000;go_riscv 0x44000000; nand read 0x50000000 0x100000 0xc00000;bootm 0x50000000;sa。
    eMMC: setenv bootcmd ' mmc read 0 0x44000000 0x36000 0x800;go_riscv 0x44000000;mmc read 0 0x50000000 0x800 0x6000; bootm 50000000';sa
    

操作示例

分段升级

分段升级适用于低内存芯片平台,当内存较小且升级的文件系统较大时可考虑打开此选项,打开此选项时只需要使用16M大小的内存 buffer,反之升级文件将占用文件大小的内存。

操作过程如下:

  1. 打开分段升级宏(CONFIG_VENDOR_UPGRADE_BY_SEGMENT)

    vendor_setup     --->
    [*] Upgrade by segment write
    
  2. 在代码中打开升级开关,如图1所示。

    图 1 打开升级宏操作

    备注:其他操作和 操作过程章节一致,在此不作赘述。

升级示例

  • 将u-boot镜像烧写到flash(spinor或nand)中或直接下载到内存中运行;
  • 格式化SD卡或U盘为FAT格式;
  • 将操作过程中制作的升级包拷贝到格式化好的SD卡或U盘中。格式化SD卡或U盘具体方法请参考《外围设备驱动 操作指南》附录;
  • 开发板上电,u-boot启动,开始自动升级。
  • 升级打印以及打印说明如下(以SPI NOR Flash非安全启动举例):

    //读取升级配置文件
    [0]=u-boot.bin       start=0x00000000 end=0x000fffff size=0x00100000
    [1]=kernel           start=0x00100000 end=0x00cfffff size=0x00c00000
    [2]=rootfs.jffs2     start=0x00d00000 end=0x01efffff size=0x01200000
    //读取并烧写u-boot.bin
    spinor erase...
    spinor write...
    //读取并烧写kernel
    spinor erase...
    spinor write...
    //读取并烧写rootfs.jffs2
    spinor erase...
    spinor write...
    //保存环境变量
    Saving Environment to SPI Flash... Erasing SPI flash...Writing to SPI flash...done
    OK
    //接下来将自动启动新系统
    

操作中需要注意的问题

  • SD卡或U盘必须格式化成FAT格式;
  • 若SD卡或U盘有多个分区时,升级包必须放在第一个分区,否则扫描不到升级包;
  • 升级u-boot会自动保存config中的bootargs和bootcmd环境变量。