2021-06-03
Melis2.0 Norflash空间分配及固件裁剪

一、Img固件组成

8M Norflash = 8192 KB

Boot0 + Boot1 + MBR + Rootfs + Udisk + Sysdata

———————————————————————————————————— <= 8192

24K         120K         1K       7919K      128K        0K

 

4M Norflash = 4096 KB

Boot0 + Boot1 + MBR + Rootfs + Udisk + Sysdata

———————————————————————————————————— <= 4096

24K          120K       1K         3823K    128K         0K

依此类推,如果是16M Norflash,只需调整Rootfs的大小。

可在workspace\suniv\beetles目录查看Boot0.bin、Boot1.bin的实际大小(如果则是在image.bat完成后删除了,可修改Image.bat文件


二、分区描述


    1、B:分区

Ramfs目录下的文件存储在该分区,用于epos阶段提前加载的文件或设备,如power.drv、twi.drv,或是快速logo时display.drv及logo.bmp需要放到Ramfs目录下用于生成ramfs.iso文件(该文件是占用rootfs分配的空间大小)。可通过\workspace\suniv\beetles\ramfs.ini文件配置大小

    2、D:分区

Rootfs目录下的文件存储在该分区,如字体文件路径为D:\\res\\font\\font16.sft。

分区格式为minFS,为只读分区。

    3、E:分区

Udisk目录代码这个分区。可读分区,该分区可以用于保存用户数据,如系统参数e:\\setting.bin.

    4、Z:分区

sysdata分区,该分区默认是不配置打开的,如有额外的分区要求,可配置该分区。

三、修改Norflash分区大小配置

1、Norflash大小配置

4M、8M或16M的Norflash切换时只需修改下方两个文件,结合上方的计算公式进行大小配置即可,且两个值的大小需保持一致。

(1)\workspace\suniv\eFex\sys_config.fex

 

(2) \workspace\suniv\beetles\rootfs.ini

 

2、查看固件打包信息了解ramfsrootfs空间使用情况

执行image.bat后,可查看打包信息来了解分区的使用情况,以便做空间优化。

如下图,ramfs分配的大小为307200,但实际使用的大小为189528,所以可以将ramfs.ini的空间修改为200K, 将多余的空间归还给rootfs.

    



四、固件裁剪及分区大小优化

1、固件裁剪

当需要新增加模块、应用或一些其他的资源时,发现Nor Flash的空间不够导致固件打包失败。除了更换更大的Flash的方法外,可以通过裁剪原有固件中与当前项目无关的内容以达到腾出空间的目的。

列举以下几种裁剪方式供参考:



    (1)优化固件打包的内容

效果指数☆☆☆☆

 

固件打包工具会将workspace\suniv\beetles下的ramfs和rootfs目录下的所有内容打包到固件中。这两个目录的内容又是通过update.bat文件从workspace\suniv下的ramfs和rootfs目录根据update.bat的拷贝规则拷贝进来。(驱动或模块通常编译到workspace\suniv下这两个目录下,具体可查看编译完成后的拷贝语句)

所以通过修改update.bat文件去除与当前项目无关的驱动或模块文件;同时务必删除掉workspace\suniv\beetles下的ramfs和rootfs这两个目录,固件打包时会重新生成目录并拷贝update.dat中描述的内容。

    (2)优化图片资源theme.bin

效果指数☆☆☆☆

 

① 通过修改\res\theme\下的makefile文件,把不需要的应用资源从编译条件中移除;同时删除相应的应用代码,避免Applets编译不过

② 通过“图好快”等压缩工具对png原图进行压缩后,再通过“bmp_pack_compress”转换成bmp并压缩图片,这样可以大幅度减小图片资源的大小

    (3)优化sft字库文件

效果指数☆☆

 

公版的字库文件包含语言为简体中文、繁体中文、英文;如果做外单,则可选用不带中文的字库来达到裁剪的目的。

    (4)删减代码、屏蔽调试信息

效果指数

 

通过删减代码来减小app_root.axf大小,这部分起到的作用有限,但也能贡献一定的空间大小

    (5)裁剪解码库cedar(高风险,不建议操作)

效果指数☆☆

 

该步骤具有一定的风险,误删除可能导致音频、视频无法播放。需要对workspace\suniv\rootfs\mod\cedar目录下的各文件作用非常了解。(注意:这里是workspace\suniv下的rootfs,而非workspace\suniv\beetles下的rootfs

提供几个优先参考的方向:

(1)如果项目不涉及录音(音频编码)功能,可以删除aenc_开头的部分文件或全部文件。

(2)如果播放视频不需要显示外部的字幕文件,可以删除ldec_开头的部分文件或全部文件。

(3)根据项目需求可以删除一些比较偏门的音频格式的插件,如以adec_开头的adec_atr.drv。(这里不好把握,不建议删除)

删除完成后,务必删除workspace\suniv\beetles\rootfs下的cedar目录,由update.dat执行时重新创建。

2、分区优化

Ramfs.iso的大小是占用rootfs分配的大小。当ramfs.iso越大,rootfs留给应用、资源、驱动、模块的空间越少。

    (1ramfs大小调整

通过生成固件时输出的信息,查看ramfs的使用情况,如有过剩可通过修改ramfs.ini做适当的调整。

    (2)udisk大小调整

Udisk.ini对udisk的默认分配大小128k,用于保存用户修改的应用或系统数据。

可通过获取e:\\setting.bin文件的大小来判断 udisk的使用情况,预留合理的大小后,可将腾出的空间分配给rootfs。