需要使用 SCSI CDB 写入磁盘上的每个 LBA。在这里,我构建了一个用于写入每个 LBA 的 while/for 循环。我正在使用 10 字节 CDB 。
我如何表示 32 位 LBA 以便它从 LBA 0 迭代到 Maximun LBA 。如果我打算在每个 LBA 上写入,数据传输长度应该是多少。每个 LBA 大小为 512 字节。
for(i=0;i<=max_lba;i++)
{
ccb->cam_flags = DATA_OUT;
ccb->cdb[0] = 0x2A; /* 0x2A SCSI Opcode for write 10 CDB */
ccb->cdb[1] = 0;
ccb->cdb[2] = ?? ( LBA )
ccb->cdb[3] = ?? ( LBA )
ccb->cdb[4] = ?? ( LBA )
ccb->cdb[5] = ?? ( LBA )
ccb->cdb[6] = 0;
ccb->cdb[7] = ?? /* Data Transfer Length */
ccb->cdb[8] = ?? /* Data Transfer Length */
ccb->cdb[9] = 0;
ccb->ccb_address = (long)ccb;
ptr_data = (byte *)(buffer + ccb->data_buf_ptr);
data_pattern = i + (i << 4);
buffer[ccb->data_buf_ptr ] = data_pattern;
}