oemDisk 接口
SylixOS 提供了一个磁盘自动挂载工具,它是将很多磁盘工具封装在一起的一个工具集。设备可以通过热插拔事件将物理磁盘块设备交给磁盘自动挂载工具,该工具首先会为这个磁盘开辟磁盘缓冲,然后会自动进行磁盘分区检查,最后生成对应每个分区的虚拟块设备,最后这个工具会识别每一个分区的文件系统类型,并装载与之对应的文件系统。这样从用户角度来说,就可以在操作系统目录中看到对应挂载的文件系统目录了。
磁盘自动挂载工具,可以大大降低多分区磁盘的管理难度,其初始化接口如下:
#include <SylixOS.h>
VOID API_OemDiskMountInit (VOID);
API_OemDiskMountInit 函数主要任务即安装 BLK IO 驱动程序和建立互斥信号量。完成初始化后,用户便可使用磁盘自动挂载工具提供的挂载接口。SyilxOS 中常用的挂载接口如下:
#include <SylixOS.h>
PLW_OEMDISK_CB API_OemDiskMount (CPCHAR pcVolName,
PLW_BLK_DEV pblkdDisk,
PVOID pvDiskCacheMem,
size_t stMemSize,
INT iMaxBurstSector);
函数 API_OemDiskMount 原型分析:
- 此函数成功返回 OEM 磁盘控制块,失败返回 LW_NULL 。
- 参数 pcVolName 是根节点名称,当前 API 将根据分区情况在末尾加入数字。
- 参数 pblkDisk 是物理磁盘控制块,必须是直接操作物理磁盘。
- 参数 pvDiskCacheMem 是磁盘 CACHE 缓冲区的内存起始地址。
- 参数 stMemSize 是磁盘 CACHE 缓冲区大小。
- 参数 iMaxBurstSector 是磁盘猝发读写的最大扇区数。
API_OemDiskMount 函数会自动挂载一个磁盘的所有分区,当无法识别分区时,使用 FAT 格式挂载。挂载完成后以一个 OEM 磁盘控制块返回,该控制块的详细内容如下所示:
typedef struct {
PLW_BLK_DEV OEMDISK_pblkdDisk; /* 物理磁盘驱动 */
PLW_BLK_DEV OEMDISK_pblkdCache; /* CACHE 驱动块 */
PLW_BLK_DEV OEMDISK_pblkdPart[LW_CFG_MAX_DISKPARTS]; /* 各分区驱动块 */
INT OEMDISK_iVolSeq[LW_CFG_MAX_DISKPARTS]; /* 对应个分区的卷序号 */
PLW_DEV_HDR OEMDISK_pdevhdr[LW_CFG_MAX_DISKPARTS]; /* 安装后的设备头 */
PVOID OEMDISK_pvCache; /* 自动分配内存地址 */
UINT OEMDISK_uiNPart; /* 分区数 */
INT OEMDISK_iBlkNo; /* /dev/blk/? 设备号 */
CHAR OEMDISK_cVolName[1]; /* 磁盘根挂载节点名 */
} LW_OEMDISK_CB;
typedef LW_OEMDISK_CB *PLW_OEMDISK_CB;
除了上面提供的接口,SylixOS 还提供了另一种接口,其函数原型如下:
#include <SylixOS.h>
PLW_OEMDISK_CB API_OemDiskMountEx (CPCHAR pcVolName,
PLW_BLK_DEV pblkdDisk,
PVOID pvDiskCacheMem,
size_t stMemSize,
INT iMaxBurstSector,
CPCHAR pcFsName,
BOOL bForceFsType)
函数 API_OemDiskMountEx 原型分析:
- 此函数成功返回 OEM 磁盘控制块,失败返回 LW_NULL 。
- 参数 pcVolName 是根节点名称,当前 API 将根据分区情况在末尾加入数字。
- 参数 pblkDisk 是物理磁盘控制块,必须是直接操作物理磁盘。
- 参数 pvDiskCacheMem 是磁盘 CACHE 缓冲区的内存起始地址。
- 参数 stMemSize 是磁盘 CACHE 缓冲区大小。
- 参数 iMaxBurstSector 是磁盘猝发读写的最大扇区数。
- 参数 pcFsName 是文件系统类型。
- 参数 bForceFsType 是是否强制使用指定的文件系统类型。
API_OemDiskMountEx 函数除了能够自动挂载一个磁盘的所有分区,还可以使用指定的文件系统类型挂载。但是,挂载的文件系统不包含 yaffs 文件系统,因为 yaffs 属于静态文件系统。
文件系统挂载后,用户可以使用 API_OemDiskHotplugEventMessage 函数将相关的热插拔消息发送给感兴趣的应用程序,该函数原型如下:
#include <SylixOS.h>
INT API_OemDiskHotplugEventMessage (PLW_OEMDISK_CB poemd,
INT iMsg,
BOOL bInsert,
UINT32 uiArg0,
UINT32 uiArg1,
UINT32 uiArg2,
UINT32 uiArg3);
函数 API_OemDiskHotplugEventMessage 原型分析:
- 此函数成功返回 OEM 磁盘控制块,失败返回 LW_NULL 。
- 参数 poemd 是 OEM 磁盘控制块。
- 参数 iMsg 是 hotplug 消息类型。
- 参数 uiArg0~3 是附加消息。
SylixOS 还提供了相应的卸载函数如下:
#include <SylixOS.h>
INT API_OemDiskUnmountEx (PLW_OEMDISK_CB poemd, BOOL bForce);
函数 API_OemDiskUnmounEx 原型分析:
- 此函数成功返回 ERROR_NONE ,失败返回 PX_ERROR 。
- 参数 poemd 是 OEM 磁盘控制块。
- 参数 bForce 是表明如果有文件占用是否强制卸载。
使用 API_OemDiskUnmounEx 函数卸载能够自动卸载一个物理 OEM 磁盘设备的所有卷标,使用时推荐不要强制卸载卷,如果有文件打开,强行卸载卷是非常危险的。