Stuck with coding of device driver for SCSI INQUIRY command.
Hi All,
I am trying to build device driver for SCSI INQUIRY command using c language. But am not getting how to interface particular LUN to my program. Am able to compile but nothing getting in output. Here is my code.. Please let me what will be the problem... Thanks and Regards, Gururaj M #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/ioctl.h> #include <scsi/sg.h> #define INQ_REPLY_LEN 96 #define INQ_CMD_CODE 0x12 #define INQ_CMD_LEN 6 int main(int argc, char * argv[]) { int sg_fd, k; unsigned char inqCmdBlk[INQ_CMD_LEN] = {INQ_CMD_CODE, 0, 0, 0, INQ_REPLY_LEN, 0}; unsigned char inqBuff[INQ_REPLY_LEN]; unsigned char sense_buffer[32]; sg_io_hdr_t io_hdr; if (2 != argc) { printf("Usage: 'sg_simple0 <sg_device>'\n"); return 1; } if ((sg_fd = open(argv[1], O_RDONLY)) < 0) { perror("error opening given file name"); return 1; } if ((ioctl(sg_fd, SG_GET_VERSION_NUM, &k) < 0) || (k < 30000)) { printf("%s is not an sg device, or old sg driver\n", argv[1]); return 1; } memset(&io_hdr, 0, sizeof(sg_io_hdr_t)); io_hdr.interface_id = 'S'; io_hdr.cmd_len = sizeof(inqCmdBlk); io_hdr.mx_sb_len = sizeof(sense_buffer); io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; io_hdr.dxfer_len = INQ_REPLY_LEN; io_hdr.dxferp = inqBuff; io_hdr.cmdp = inqCmdBlk; io_hdr.sbp = sense_buffer; io_hdr.timeout = 20000; if (ioctl(sg_fd, SG_IO, &io_hdr) < 0) { perror("sg_simple0: Inquiry SG_IO ioctl error"); return 1; } if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK) { if (io_hdr.sb_len_wr > 0) { printf("INQUIRY sense data: "); for (k = 0; k < io_hdr.sb_len_wr; ++k) { if ((k > 0) && (0 == (k % 10))) printf("\n "); printf("0x%02x ", sense_buffer[k]); } printf("\n"); } if (io_hdr.masked_status) printf("INQUIRY SCSI status=0x%x\n", io_hdr.status); if (io_hdr.host_status) printf("INQUIRY host_status=0x%x\n", io_hdr.host_status); if (io_hdr.driver_status) printf("INQUIRY driver_status=0x%x\n", io_hdr.driver_status); } else { char * p = (char *)inqBuff; printf("Some of the INQUIRY command's response:\n"); printf(" %.8s %.16s %.4s\n", p + 8, p + 16, p + 32); printf("INQUIRY duration=%u millisecs, resid=%d\n", io_hdr.duration, io_hdr.resid); } close(sg_fd); return 0; } |
Quote:
|
All times are GMT -5. The time now is 12:11 AM. |