我是 SCSI CDB 编程的新手。我有一些使用 6 字节 CDB 为写入命令编写的代码
ccb = (Exec_IO_CCB *)(buffer + header_size);
ccb->ccb_length = sizeof(Exec_IO_CCB);
ccb->cam_opcode = 0x1;
ccb->connect_id = 0;
ccb->data_buf_ptr = (long)(header_size + ccb->ccb_length + MAX_SENSE_LEN);
ccb->data_xfer_length = (long)(XFER_BUFSIZE - ccb->data_buf_ptr);
ccb->sense_buf_ptr = (long)(header_size + ccb->ccb_length);
ccb->sense_buf_length = MAX_SENSE_LEN;
ccb->time_out = CAM_TIMEOUT;
ccb->cdb_length = 6;
ccb->cam_flags = DATA_OUT;
ccb->cdb[0] = 0xA; /* 0xA SCSI Opcode for write operation */
ccb->cdb[1] = 0;
ccb->cdb[2] = (ccb->data_xfer_length & 0xFF0000) >> 16;
ccb->cdb[3] = (ccb->data_xfer_length & 0xFF00) >> 8;
ccb->cdb[4] = (ccb->data_xfer_length & 0xFF);
ccb->cdb[5] = 0;
从上面的代码我不明白 cdb[2] 和 cdb[3] 是如何派生的?
在类似的行中,我正在尝试为写入命令开发 10 字节 CDB。如何填写占LBA的cdb[2-5]的数据?
ccb->cam_flags = DATA_OUT;
ccb->cdb[0] = 0x2A; /* 0x2A SCSI Opcode for write10 CDB */
ccb->cdb[1] = 0;
ccb->cdb[2] = ??
ccb->cdb[3] = ??
ccb->cdb[4] = ??
ccb->cdb[5] = ??
ccb->cdb[6] = 0;
ccb->cdb[7] = (ccb->data_xfer_length & 0xFF);
ccb->cdb[8] = (ccb->data_xfer_length & 0xFF);
ccb->cdb[9] = 0;