linux sg io hdr,探索 Linux 通用 SCSI 驱动器

典型的 SCSI 通用驱动器命令

对于字符设备,SCSI 通用驱动器支持许多典型的系统调用,比如 open()、close()、read()、write、poll() 和 ioctl()。向特定的 SCSI 设备发送 SCSI 命令的步骤也非常简单:

1.打开 SCSI 通用设备文件(比如 sg1)获取 SCSI 设备的文件描述符。

2.准备好 SCSI 命令。

3.设置相关的内存缓冲区。

4.调用 ioctl() 函数执行 SCSI 命令。

5.关闭设备文件。

典型的 ioctl() 函数类似于:ioctl(fd,SG_IO,p_io_hdr);。

这里的 ioctl() 函数必须具有 3 个参数:

1.fd 是设备文件的文件描述符。通过调用 open() 成功打开设备文件之后,将需要获取这个参数。

2.SG_IO 表明将 sg_io_hdr 对象作为 ioctl() 函数的第三个参数提交,并且在 SCSI 命令结束时返回。

3.p_io_hdr 是指向 sg_io_hdr 对象的指针,该对象包含 SCSI 命令和其他设置。

SCSI 通用驱动器的最重要数据结构是 struct sg_io_hdr,它在 scsi/sg.h 中定义,并且包含如何使用 SCSI 命令的信息。清单 1 给出了这个结构的定义。

清单 1. sg_io_hdr 结构的定义

typedef struct sg_io_hdr

{

int interface_id;               /* [i] 'S' (required) */

int dxfer_direction;            /* [i] */

unsigne

你可能感兴趣的:(linux,sg,io,hdr)