Linux 使用SCSI通用接口的SCSI读(10)和写(10)
我尝试向SSD发出scsi和。我将其用作参考/基本代码 这是我的scsi读取:Linux 使用SCSI通用接口的SCSI读(10)和写(10),linux,linux-device-driver,scsi,Linux,Linux Device Driver,Scsi,我尝试向SSD发出scsi和。我将其用作参考/基本代码 这是我的scsi读取: #定义读取回复#32 #定义READ_CMDLEN 10 void scsi_read() { 无符号字符读取缓冲区[SCSI_关闭+读取_回复长度]; 未签名字符cmdblk[READ\u CMDLEN]= {0x28,/*命令*/ 0,/*lun/保留*/ 0,/*lba*/ 0,/*lba*/ 0,/*lba*/ 0,/*lba*/ 0,/*保留*/ 0,/*传输长度*/ 读取回复长度,/*传输长度*/ 0};
#定义读取回复#32
#定义READ_CMDLEN 10
void scsi_read()
{
无符号字符读取缓冲区[SCSI_关闭+读取_回复长度];
未签名字符cmdblk[READ\u CMDLEN]=
{0x28,/*命令*/
0,/*lun/保留*/
0,/*lba*/
0,/*lba*/
0,/*lba*/
0,/*lba*/
0,/*保留*/
0,/*传输长度*/
读取回复长度,/*传输长度*/
0};/*保留/标志/链接*/
memset(Readbuffer,0,sizeof(Readbuffer));
memcpy(cmd+SCSI_OFF、cmdblk、sizeof(cmdblk));
/*
* +------------------+
*| struct sg_header |在SCSI中,LBA的单位和传输长度以块为单位,有时称为扇区。这几乎总是512字节。因此,您不能只读取或写入32字节。至少,您必须执行512字节==一个块。这一点是您需要解决的大部分问题
在scsi_写入实现中,传输长度为零,因此实际上不会写入任何数据
您应该为CDB和写/读数据使用不同的缓冲区。我怀疑对这些缓冲区的混淆会导致您的实现写过一个静态分配数组的末尾,然后写到ReadBuffer上。在下面运行,看看会出现什么
最后,handle_scsi_cmd中的任何内容都可能出错。设置数据传输可能很棘手……特别是,请确保您知道数据在I/O头的dxfer_方向上的方向:SG_dxfer_到_DEV进行写入,SG_dxfer_从_DEV进行读取
看看这个关于如何阅读的例子(16)。这更像是你想要完成的事情
非常感谢。sg3_-utils的例子对我帮助很大,现在已经奏效了。
Read(10)
[0000] 00 00 00 44 00 00 00 44 00 00 00 00 00 00 00 00 ...D...D ........
[0010] 00 2C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
[0020] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
[0030] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
[0040] 00 00 00 00 ....
Write(10):
[0000] 00 00 00 00 00 00 00 24 00 00 00 00 00 00 00 00 ........ ........
[0010] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
[0020] 00 00 00 00 2A 00 00 00 00 00 00 00 00 00 41 62 ........ ......Ab
[0030] 63 64 65 66 67 00 cdefg.
Read(10):
[0000] 00 00 00 44 00 00 00 44 00 00 00 00 00 00 00 00 ...D...D ........
[0010] 04 00 20 00 70 00 02 00 00 00 00 0A 00 00 00 00 ....p... ........
[0020] 04 00 00 00 41 62 63 64 65 66 67 00 00 00 00 00 ....Abcd efg.....
[0030] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
[0040] 00 00 00 00 ....