1
需要使用SCSI CDB写入磁盘上的每个LBA。这里我已经构建了一个while/for循环来写入每个LBA。我正在使用10字节的CDB。写入磁盘上的每个LBA
我如何表示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;
}
嗯,再次看我没有看到你在哪里写每个迭代。不要忘记这样做。 – eddyq
非常感谢您的信息。新的CDB看起来像这样 – arun
ccb-> cam_flags = DATA_OUT; ccb-> cdb [0] = 0x2A; ccb-> cdb [1] = 0; ccb-> cdb [2] =(i&0xFF000000)>> 24; \t ccb-> cdb [3] =(i&0xFF0000)>> 16; \t ccb-> cdb [4] =(i&0xFF00)>> 8; \t ccb-> cdb [5] =(i&0xFF); ccb-> cdb [6] = 0; ccb-> cdb [7] = 0;/*数据传输长度*/ ccb-> cdb [8] = 1;/*数据传输长度为1块*/ 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; – arun