SSD_EMMC升级方案

1. 概述

eMMC upgrade方案是在UBOOT下,键入emmcstar命令后从eMMC flash中获取upgrade image,烧录进对应的boot flash中。

为了支持upgrade,eMMC在UDA分区中需要划分一块区域用于保存升级数据,又因为在kernel下要支持读写该区域数据,因此该区域需要使用能被kernel识别的emmc partition,分区设计如下:

图1 eMMC upgrade方案分区设计

upgrade分区必须是emmc partition中的第一个分区,这是uboot下识别emmc partiition的code逻辑决定的,当upgrade时,将其他所有分区全被删除掉,upgrade分区不被影响所以只能是第一个分区。


2. 使能eMMC upgrade

编译project,制作eMMC upgrade包:

cd project
make dispcam_p3_emmc-nor.glibc-9.1.0-ext4fs.s01a.64.qfn128_defconfig
make menuconfig
# Image -->
#              (emmc.ext4fs.partition.config) Image Partition Config
#              [*] eMMC boot linux 
#              (nor) boot.bin burn in which flash(nor/spinand) when emmc boot
#              (0xC800000) eMMC upgrade partition size(byte) when linux boot from eMMC
#  /*上面这一项设定的是upgrade分区的size,我们需要根据实际image包的size进行设定,需要不小于
images包,以block为单位,这里设定值为0xC800000(200M)。保存并退出。*/

make clean; make image-nocheck -j32
# 制作支持emmc upgrade的image_upgrade包-o选项是可选的,若使用-o选项其值必须设为1,否则使用的是其他的打包方案。

sh make_emmc_upgrade_sigmastar.sh
# 根据需要升级的文件选择Y或N,默认是Yimage/output/images/SigmastarUpgradeEMMC.bin为最终生成的eMMC upgrade image

3. eMMC upgrade方法

  1. 首先通过网络或USB或母片烧录的方法将上一步制作的image烧录到对应的flash中,成功启动到linux。此时eMMC的分区结构如图1所示。

  2. upgrade分区在kernel下被识别为/dev/mmcblk0p1。接下来可以将升级数据(如上一步制作的SigmastarUpgradeEMMC.bin)以二进制数据烧录到mmcblk0p1的0地址处。我这里使用的是dd命令。这样,升级数据就准备完成了。

  3. reboot到uboot,在uboot命令行下键入emmcstar 1即可从eMMC flash中的upgrade分区里,将升级数据更新至flash中。完成升级后,需要手动reset重启新系统。

    注意:emmcstar命令后必须带一个非零参数,否则均不会使用这套upgrade方案。