存储优化开发指南
前 言
概述
V系列大多使用8M的spinor FLASH总是遇到固件太大,容量不够情况。本文档提供裁优化剪各个分区的的方法,降低个分区生成的文件大小,从而达到固件能放到8M flash的目的。
读者对象
本文档(本指南)主要适用于以下人员:
-
系统工程师
-
软件开发工程师
适用范围
适用产品列表
:::
| 产品名称 | 内核版本 |
|---|---|
| V821 | Linux-5.4 |
| V861/V838/V881 | Linux-6.6 |
文档约定
标志说明
注意
- 提醒操作中应注意的事项。不当的操作可能会损坏器件,影响可靠性、降低性能等。
:::
备注
为准确理解文中指令、正确实施操作而提供的补充或强调信息。
:::
备注
一些容易忽视的小功能、技巧。了解这些功能或技巧能帮助解决特定问题或者节省操作时间。
:::
V系列芯片代号
以下芯片代号可能存在代码或者文档中,下面对应表格将说明它特制哪一款芯片。后续文档介绍会以{芯片代码}或者直接写sun252iw1p1来展示SDK中的一些文件路径和名字,请根据目前手头研发方案来进行识别。
| 芯片代号 | 芯片名称 |
|---|---|
| sun300iw1p1 | V821 |
| sun252iw1p1 | V881/V838/V861 |
不同介质不同配置文件
SDK支持不同介质的配置,在确定方案使用的介质情况,需要改对相关的配置文件才能生效。
以下列举一些Nor Flash和非Nor Flash不同的配置文件 ,请修改的时候根据自身方案介质来确定的文件。
包括不限于
| Nor Flash | 非Nor Flash |
|---|---|
| sys_partition_nor.fex | sys_partition.fex |
| BoardConfig_nor.mk | BoardConfig.mk |
| sun300iw1p1_min_nor_defconfig | sun300iw1p1_min_defconfig |
相关术语介绍
- SPINOR:一种使用SPI接口通讯的存储介质,支持叫小的容量。
- boot0 : 芯片启动的第一个软件程序,用于引导uboot启动, 同时也指boot0分区的镜像文件。
- opensbi:是rv芯片启动必须的。
- uboot: 芯片启动的第二阶段程序,一般用于引导kernel启动, 同时也指uboot分区的镜像文件。
- kernel : Linux内核程序,它会挂载rootfs分区, 同时也指boot分区的镜像文件。
- rootfs : 文件系统,同时也指rootfs分区的镜像。
- LZMA(Lempel-Ziv-Markov chain algorithm): 压缩算法,压缩率一般较高,但解压速度较慢。
- GZIP(GNU zip): 压缩算法,常用的数据压缩格式之一,压缩率较高,通常比较均衡地考虑了压缩速度和压缩率。
- LZ4:压缩算法,压缩率较低,但解压速度很快,适用于需要快速处理的场景。
- LZO(Lempel-Ziv-Oberhumer algorithm):压缩算法,速度很快,但压缩率一般比较低。
- bzip2:bzip2,它的压缩率通常比较高,但压缩速度较慢。
存储分区布局介绍
SPINOR存储分区布局
了解SPINOR FLASH 存储布局,可以得知有哪些文件镜像存放在flash哪个分区上。我们可以通过调整分区大小来减小FLASH容量使用。但分区大小又被分区烧录的镜像文件限制着,分区镜像可以通过配置SDK相关选项来裁剪优化。

-
如果从spinor 0~8M裸数据看,则 数据的布局就是这样的;
-
如果从linux 系统上看,则可以看到mtdblock0,1,2,3...分区里面包含了什么类型数据;

-
如果从配置文件角度上看,以-分割线①-分开来看,可以分两个区域:
- 分割线①左边(白色方格):是boot0/uboot启动分区; 它的区域划分由uboot-board.dts和boot0源码管理; 从用户层看它是/dev/mtdblock0分区。
- 分割线①右边(橙色方格):是用户定义的分区;它的区域划分由sys_partition_nor.fex管理;如boot分区放内核镜像,env分区放env镜像;从用户层看,他们是/dev/mtdblock1、/dev/mtdblock2...
- 可以通过配置文件修改他们分区起始地址和分配的大小;
上图里面的分区文件,可以对应从编译后的SDK这里查看(文件和分区名对应关系可查看sys_partition_nor.fex):

备注
aw_pack_src文件夹生成,需要修改BoardConfig_nor.mk文件中添加:LICHEE_INDEPENDENT_PACK:=y。然后重新source && lunch SDK最后打包可生成;
:::