Solaris下发行SCSI命令:uscsi接口详解
4星 · 超过85%的资源 需积分: 15 47 浏览量
更新于2024-07-27
1
收藏 136KB DOC 举报
"SCSI命令文档提供了关于SCSI命令集的详细信息,特别是如何在Solaris操作系统中通过uscsi接口来发行这些命令。文件描述了关键的接口函数和设备描述符,强调了SCSI命令的发行过程以及相关标志的设置。"
在SCSI(Small Computer System Interface)中,命令集是设备与主机之间通信的基础。SCSI是一种标准,允许不同的存储设备如硬盘、磁带驱动器、CD/DVD-ROM等与计算机进行交互。在Solaris操作系统中,用户可以通过uscsi接口来直接发送SCSI命令到设备,这为开发者提供了更底层的控制能力。
uscsi接口的核心是`ioctl`函数,它用于向设备发送特定的控制命令。这个函数的调用格式如下:
```c
#include <sys/scsi/impl/uscsi.h>
ioctl(int file_descriptor, int request, struct uscsi_cmd *cmd);
```
`file_descriptor`是已打开设备的文件描述符,`request`通常设置为`USCSI_CMD`,`cmd`指向一个`uscsi_cmd`结构体,这个结构体包含了SCSI命令的所有相关信息。
`uscsi_cmd`结构体包含了多个关键成员,其中`uscsi_flags`用于设置I/O方向和其他细节。例如:
- `USCSI_READ`:表示从设备读取数据。
- `USCSI_WRITE`:表示向设备写入数据。
- `USCSI_RQENABLE`:开启获取sense信息的功能,这对于处理错误情况非常有用。
- `USCSI_SILENT`:禁止在控制台打印错误或警告信息。
- `USCSI_DIAGNOSE`:如果SCSI命令异常结束,禁止重试或恢复机制。
- `USCSI_ISOLATE`:防止此命令与其他命令同时执行。
- `USCSI_ASYNC`:设置SCSI总线为异步模式。
- `USCSI_SYNC`:设置SCSI总线为同步模式。
- `USCSI_RESET`:向设备发送reset消息。
- `USCSI_RESET_ALL`:重置整个SCSI总线。
通常,`USCSI_READ`和`USCSI_WRITE`是常见的标志,而`USCSI_RQENABLE`经常作为获取sense信息的必要条件。例如,我们可以这样设置`uscsi_flags`:
```c
ucmd.uscsi_flags = USCSI_READ | USCSI_RQENABLE | ...;
```
或者:
```c
ucmd.uscsi_flags |= USCSI_RQENABLE;
```
另一个重要的成员是`uscsi_cdb`,它是一个指向CDB(Command/Descriptor Block)的指针。CDB包含了具体要发给设备的SCSI命令信息。CDB的格式由操作码和其他参数组成,这些参数根据不同的SCSI命令(如READ, WRITE, INQUIRY等)而变化。
理解和熟练使用SCSI命令对于开发涉及SCSI设备的应用程序至关重要,尤其是在需要低级硬件控制的场合。通过uscsi接口,开发者可以直接与设备进行通信,提高了效率和灵活性。
2022-09-24 上传
2022-09-21 上传
2022-09-23 上传
2022-09-20 上传
2022-09-23 上传
2017-08-15 上传
shenwen2011
- 粉丝: 1
- 资源: 20
最新资源
- 掌握Jive for Android SDK:示例应用的使用指南
- Python中的贝叶斯建模与概率编程指南
- 自动化NBA球员统计分析与电子邮件报告工具
- 下载安卓购物经理带源代码完整项目
- 图片压缩包中的内容解密
- C++基础教程视频-数据类型与运算符详解
- 探索Java中的曼德布罗图形绘制
- VTK9.3.0 64位SDK包发布,图像处理开发利器
- 自导向运载平台的行业设计方案解读
- 自定义 Datadog 代理检查:Python 实现与应用
- 基于Python实现的商品推荐系统源码与项目说明
- PMing繁体版字体下载,设计师必备素材
- 软件工程餐厅项目存储库:Java语言实践
- 康佳LED55R6000U电视机固件升级指南
- Sublime Text状态栏插件:ShowOpenFiles功能详解
- 一站式部署thinksns社交系统,小白轻松上手