8.23. SCSI_IOCTL_GET_IDLUN

SCSI_IOCTL_GET_IDLUN 0x5382. 此 ioctl 函数接受指向 "struct scsi_idlun" 对象的指针作为其第三个参数。 "struct scsi_idlun" 对于用户应用程序不可见。 要使用此函数,需要在用户的程序中复制该结构。 类似如下:
typedef struct my_scsi_idlun {
    int four_in_one;    /* 4 separate bytes of info compacted into 1 int */
    int host_unique_id; /* distinguishes adapter cards from same supplier */
} My_scsi_idlun;
"four_in_one" 由以下部分组成:
(scsi_device_id | (lun << 8) | (channel << 16) | (host_no << 24))
假定(或屏蔽)这 4 个组成部分每个都是 1 字节。 这些是 SCSI 子系统用来索引设备的四个数字,通常写为 "<host_no, channel, scsi_id, lun>"。 'host_unique_id' 为来自相同制造商/底层设备驱动程序的每个控制器分配一个不同的数字。 此命令提供的大部分信息可以更容易地从 SG_GET_SCSI_ID 获取。

'host_no' 元素在 lk 2.4 内核中发生了变化。[在 lk 2.2 系列及更早版本中,它是来自对应于主机的 procfs 条目的 'low_inode & 0xff'。] 这一更改使得 SCSI_IOCTL_GET_BUS_NUMBER ioctl() 的使用变得多余。

此 ioctl() 的优点是它可以对任何 SCSI 文件描述符调用。