需要使用SCSI CDB写入磁盘上的每个LBA。在这里,我构造了一个while/for循环,用于写入每个LBA。我使用的是10字节CDB。
如何表示32位LBA,使其从LBA 0迭代到最大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;
}发布于 2013-08-26 23:46:13
分配与此类似的lba (但请注意,如果您要写入所有大驱动器,它将非常慢……因此,如果您写入大量的块(可能是1MB,然后相应地调整下一个LBA ),效果会更好。
cdb[2] = (i & 0xFF000000) >> 24;
cdb[3] = (i & 0xFF0000) >> 16;
cdb[4] = (i & 0xFF00) >> 8;
cdb[5] = (i & 0xFF);对于上面的设置,将块的数量设置为1: cdb7 = 0;cdb8 = 1;
同样,您将会等待一整天的大驱动器,所以在循环的每次迭代中进行更改以写入大量块。
https://stackoverflow.com/questions/18427940
复制相似问题