oemDisk 接口

更新时间:
2024-01-09
下载文档

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 磁盘设备的所有卷标,使用时推荐不要强制卸载卷,如果有文件打开,强行卸载卷是非常危险的。

文档内容是否对您有所帮助?
有帮助
没帮助