我是SCSI CDB編程的新手。我已經一些一段代碼使用6byte CDB創建SCSI 10字節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;
非常感謝您的信息。 – arun
我無法打開文檔。對不起再次提出基本問題。我在cdb [2]和cdb [3]上沒有得到太多的清晰度? ccb-> cdb [2] =(ccb-> data_xfer_length&0xFF0000)>> 16; ccb-> cdb [3] =(ccb-> data_xfer_length&0xFF00)>> 8; – arun
ok ..明白了..現在我已經構建了10字節的寫入CDB ccb-> cam_flags = DATA_OUT; ccb-> cdb [0] = 0x2A; ccb-> cdb [1] = 0; ccb-> cdb [2] = 0; ccb-> cdb [3] = 0; ccb-> cdb [4] = 0; ccb-> cdb [5] = 2048; ccb-> cdb [6] = 0; \t ccb-> cdb [7] =(ccb-> data_xfer_length&0xFF); \t ccb-> cdb [8] =(ccb-> data_xfer_length&0xFF); \t ccb-> cdb [9] = 0; 現在我打算寫在2048th LBA,因此我已經把它放在cdb [5] 。希望我是對的。 – arun