By Toradex 秦海
1). 简介
嵌入式设备WinCE下对Flash存储进行管理有多种方式,如Eboot下通过命令行操作,在WinCE下通过控制面板的存储管理,还有本文会着重介绍的通过
Storage Manager API函数进行操作。
相对于在Eboot下进行操作,通过API函数的方式管理Flash存储可以更方便的和WinCE应用部署相结合,方便进行量产更新,而直接控制面板操作一方面需要人工手动配置,另一方面对于某些平台对其支持并不完善,容易造成不可控的问题。
本文就基于Toradex Colibri iMX6S ARM嵌入式平台来演示通过Storage Manager API函数来进行Flash磁盘管理。
2. 准备
a).
Colibri iMX6S ARM核心版配合
Colibri Eva
Board载板,连接串口和调试USB口到开发主机方便调试,具体操作方法可以参考
这里。
b). Colibri iMX6S 系统使用Toradex
WEC7 Release V1.1,更新方法请参考
这里。
c). Windows开发主机开发环境配置请参考
这里。
3). Flash存储操作示例
a). Colibri iMX6S核心版配置了一个4GB的eMMC存储,模块出厂刷新的是Embedded Linux系统,需要按照
这里的说明进入恢复模式后更新为WinCE系统,在这个过程中,eMMC被分区为如下模式:
------------------------------
- boot sector:引导扇区
- Partition table:分区表
- “empty” space:空闲空间用于存放windows CE image, splash screen, registry
- Filesystem partition:文件系统分区, 由于在恢复模式下加载时并不知道具体eMMC容量, 因此默认只分配了256MB空间
------------------------------
b). 在WinCE下,则只能看到文件系统分区,即为“FlashDisk”盘,大小为256MB。这里我们就演示如何将默认的256MB 文件系统分区扩展为排除上面的前三项占用空间后的全部剩余空间。
c). 首先明确可用的最大文件系统空间大小
在Eboot下执行下面命令,从打印输出可以判断出可用的最大Filesystem空间为7430031个sectors,其他预留空间为303217个sectors。
----------------------------
#preparefs
Creating filesystem partition on SD 2
Number of sectors in the SD/eMMC: 7733248.
Size in MB=3776
heads: (8)128
sectors=63
cylinders=958
Sectors used for bootloader and OS: 303156
Start sector of filesystem partition: 303156.
Sectors in filesystem partition: 7430031.
Successfully created 2 partitions
Boot Partition size = 151578 Kbytes
File System Partition size = 3715015 Kbytes
----------------------------
c). 根据上面的开发指南,在开发主机创建Console应用程序工程storagetest,具体代码请见如下:
https://github.com/simonqin09/storagetest/blob/master/storagetest.cpp
简单说明如下:
./ 首先通过“OpenStore”API打开eMMC 存储设备“DSK1:”。
./ 然后通过“FindFirstPartiton”API找到当前的文件系统分区。
./ 然后通过“OpenPartition”打开当前文件系统分区并删除。
./ 然后通过“Createpartition”API创建上面定义好大小的预留空间分区和新的扩展文件系统分区。
./ 然后再次通过“FindFirstPartiton”API找到刚分好的预留空间分区并删除。
./ 然后再次通过“FindFirstPartiton”API找到扩展文件系统分区并格式化,之后就可以使用分区了。
4). 总结
本文基于NXP iMX6嵌入式平台测试了利用Storage Manager API 对Flash存储设备进行管理,方便嵌入式用户在应用程序中一体化处理相关操作。