块设备 IO 控制

更新时间:
2024-03-14
下载文档

块设备 IO 控制

SylixOS 在”libsylixos/SylixOS/system/device/block/blockIo.c”文件中提供了块设备底层 I/O 接口。该类接口与 I/O 系统无关,供上层文件系统调用,用户仅可见文件系统。

除了上一小节提到的 __blockIoDevCreate 创建函数外,SylixOS 还提供了对应的删除函数,以及读写和控制函数,其中控制函数的函数原型如下:

#include <SylixOS.h>
INT  __blockIoDevIoctl (INT  iIndex, INT  iCmd, LONG  lArg);

函数 __blockIoDevIoctl 原型分析:

  • 此函数成功返回 ERROR_NONE ,失败返回 ERROR_CODE
  • 参数 iIndex 是块设备索引。
  • 参数 iCmd 是控制命令。
  • 参数 lArg 是控制参数。

SylixOS 要求磁盘设备必须支持如下表所示的通用 FIO 命令:

FIO 命令含义
FIOSYNC与 FIOFLUSH 相同
FIOFLUSH回写磁盘数据到物理磁盘
FIOUNMOUNT卸载磁盘
FIODISKINIT初始化磁盘

选择使用支持掉电保护的文件系统,需要支持如下表所示 FIO 命令:

FIO 命令含义
FIOSYNCMETA将指定范围的扇区数据完成写入磁盘

固态硬盘(SSD)需要支持如下表所示 FIO 命令:

FIO 命令含义
FIOTRIM针对固态硬盘回收指定范围的扇区

可移动磁盘介质还需要支持如下表所示 FIO 命令:

FIO 命令含义
FIODATASYNC数据回写,可以与 FIOSYNC 做相同处理
FIOCANCEL放弃还没有写入磁盘的数据(磁盘介质发生变化)
FIODISKCHANGE磁盘介质发生变化,放弃还没写入磁盘的数据,然后必须将 BLKD_bDiskChange 设置为 LW_TRUE 使操作系统立即停止对相应卷的操作,等待重新挂载

除了以上必须支持的命令外,ioctl 还支持如下表所示通用指令(磁盘设备扩展):

通用命令含义
LW_BLKD_CTRL_POWER控制电源设备
LW_BLKD_POWER_OFF关闭磁盘电源
LW_BLKD_POWER_ON打开磁盘电源
LW_BLKD_CTRL_LOCK锁定设备(保留)
LW_BLKD_CTRL_EJECT弹出设备(保留)
LW_BLKD_GET_SECNUM获得设备扇区数量
LW_BLKD_GET_SECSIZE获得扇区的大小,单位:字节
LW_BLKD_GET_BLKSIZE获得块大小,单位:字节,可以与扇区大小相同
LW_BLKD_CTRL_RESET复位磁盘
LW_BLKD_CTRL_STATUS检查磁盘状态
LW_BLKD_CTRL_OEMDISK获得对应磁盘文件 OEM 控制块

块设备是 I/O 设备中的一类,SyilxOS 下最终会为每一个物理设备创建一个 BLK I/O 设备,在/dev/blk 目录下生成一个块设备文件,如/dev/blk/sata0,应用层可直接对其进行常规的 I/O 操作。相关内容在”libsylixos/SylixOS/fs/oemDisk/oemBlkIo.c”文件中。

BLK I/O 设备除了提供了底层 I/O 的相关控制命令外,还提供关于文件操作的相关命令。如下表所示。

通用命令含义
FIOSEEK文件重定位
FIOWHERE获得文件当前读写指针
FIONREAD获得文件剩余字节数
FIONREAD64获得文件剩余字节数
FIOFSTATGET获得文件状态
文档内容是否对您有所帮助?
有帮助
没帮助