SSD_EMMC使用参考
1. Overview¶
SSD22x/SSD21X系列不支持EMMC启动,替代的方案是使用nor/nand+emmc的方式,本文档主要介绍此方案下的使用方法,包含软件配置更改以及烧录方法。
2. 软件配置更改¶
2.1. Project下的config更改¶
-
需要更改: CONFIG_IMAGE_CONFIG="emmc.ext4fs.partition.config"
-
nor+emmc的话,需要添加 CONFIG_ONEBIN_BOOT_FLASH_TYPE="nor"
spinand+emmc的话,需要添加 CONFIG_ONEBIN_BOOT_FLASH_TYPE="spinand"
参考示例:
2.2. Uboot 下的config更改¶
需更改如下配置,注意编译完成后替换project\board\p3\boot\emmc\uboot下的uboot
#Device Drivers --> # [*]Mstar drivers --> # [*]MSTAR emmc # [*]Support eMMC BOOT # [ ]Save environment to eMMC (选择emmc为环境变量存储介质,该项与Save environment to ISP NOR FLASH、Save environment to NAND FLASH互斥,这三者只能选一个) # [ ]MSTAR sdmmc(不要选中)
参考示例:
2.3. Kernel下的config更改¶
需更改如下配置:
#Enable the block layer --> # [*]Support for large (2TB+) block devices and files # [*]Partition Types # [*]EMMC PARTITION table support #Device Drivers --> # [*]MMC/SD/SDIO card support --> # <*>HW reset support for eMMC # <*>Simple HW reset support for MMC # <*>MMC block device driver # [*]SStar SoC platform drivers --> # <*>EMMC driver # [*]UNIFY EMMC DRIVER # [*]SELECT M6 EMMC0 (M6支持,选中代表使用emmc0) # < >SStar SD/MMC Card Interface Support (不要选中) #File systems --> # <*>The Extended 4 (ext4) filesystem(子选项保持默认)
参考示例:
3. 烧录方法¶
3.1. 在UBOOT下使用estar自动烧录¶
-
进入uboot命令行。
-
确认已经设置好了tftp软件路径和ip, 设置好了开发板的ip。
-
在uboot命令行下键入estar,等待烧录完成。 烧录完成后,重启进入uboot,发现能使用emmc命令,在kernel下能识别和读写emmc分区,说明烧录成功。
限制条件: 需要有ethernet网络支持
3.2. USB空片烧录¶
限制条件:
-
需要有PC
-
需要有USB接口(因为只有一路USB,所以此方式不能和USB wifi共存)
3.3. 使用烧录器空片烧录¶
Nor/nand的部分,可以使用ISPTOOL烧录,或者参考SigmaStarDocs -> 开发 -> BSP开发参考 -> SPI NOR/Spinand母片制作。
EMMC的部分,参考如下方式
母片镜像制作:
使用emmcnize工具制作母片镜像,该工具为PC端工具,用于把kernel、rootfs、文件系统、用户数据、环境变量等镜像合并成一个可以直接通过烧录器烧录到空片的镜像。
3.3.1. 环境变量镜像¶
把需要设置的环境变量按照uboot printenv命令打印出来的格式写入到一个txt文件,例如:
#env.txt baudrate=115200 bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw init=/linuxrc cma=64M bootcmd=emmc read.p 0x21000000 kernela 0x1C61E8;bootm 0x21000000; bootdelay=0 ethact=sstar_emac ethaddr=00:30:1b:ba:02:db fileaddr=23b2ef00 filesize=101 stderr=serial stdin=serial stdout=serial
uboot编译后在tool目录下有一个mkenvimage工具,执行./mkenvimage -s 0x1000 -o env.bin env.txt生成环境变量镜像。
3.3.2. 制作分区配置文件¶
emmcnize工具通过读取part.ini配置文件来建立分区表和打包镜像。配置文件格式参考如下:
[kernela-volume] image=kernel vol_id=1 vol_size=0x300000 vol_name=kernel
image=XX,定义分区镜像名,必须与已有镜像名相同。
vol_id=X,定义分区id,目前用于标识而已。
vol_size=XX,定义分区大小(Bytes单位),必须不小于对应镜像大小。
vol_name=XX,定义分区名,uboot下通过emmc part看到的分区名。
[XXX-volume] section是真正的用户分区,它们的image、vol_size、vol_name都可以根据实际分区情况进行更改。vol_id从1开始编号,最大支持64个分区。
参考示例:
说明:
part.ini文件中env的size比实际env.bin的size大,这是因为母片工具制作母片时会从env的起始地址0x278开始补充镜像文件,直至补充完当前分区的size,如果按照env.bin的实际size烧录,0x278*512+0x1000=327680 byte=640 blk就会是用户分区数据开始存储的地方,这与我们uboot下读取用户数据的实际起始地址不同,uboot下读取相应数据的地址如下图:
如上图,用户分区数据起始地址是615200,为了保证uboot下可以正确读到相应的数据,所以part.ini中env的size需要设置为 615200-0x278=614568 blk=0x12C15000 byte。
3.3.3. 打包母片镜像¶
把需要打包的镜像(env.bin、kernel、rootfs.ext4、data.ext4等)及分区配置文件(part.ini)与emmcnize工具放在同一个目录下,指定配置文件作为输入,指定输出文件,格式:./emmcnize <input ini file> <output image file>
,例如:
./emmcnize part.ini image.bin
正常情况下,完成操作会打印如下所述的“done”信息。
parsing section "data-volume" volume id: 4 volume size: 67108864 bytes volume name: data write to volume4 from image file customer.ext4 Done