linux scsi程序,linux – SCSI读取(10)和写入(10)与SCSI通用接口

这是我的scsi阅读:

#define READ_REPLY_LEN 32

#define READ_CMDLEN 10

void scsi_read()

{

unsigned char Readbuffer[ SCSI_OFF + READ_REPLY_LEN ];

unsigned char cmdblk [ READ_CMDLEN ] =

{ 0x28,/* command */

0,/* lun/reserved */

0,/* lba */

0,/* reserved */

0,/* transfer length */

READ_REPLY_LEN,/* transfer length */

0 };/* reserved/flag/link */

memset(Readbuffer,sizeof(Readbuffer));

memcpy( cmd + SCSI_OFF,cmdblk,sizeof(cmdblk) );

/*

* +------------------+

* | struct sg_header | Failed\n" );

exit(2);

}

hex_dump(Readbuffer,sizeof(Readbuffer));

}

这是我的scsi写道:

void scsi_write ( void )

{

unsigned char Writebuffer[SCSI_OFF];

unsigned char cmdblk [] =

{ 0x2A,/* 0: command */

0,/* 1: lun/reserved */

0,/* 2: LBA */

0,/* 3: LBA */

0,/* 4: LBA */

0,/* 5: LBA */

0,/* 6: reserved */

0,/* 7: transfer length */

0,/* 8: transfer length */

0 };/* 9: control */

memset(Writebuffer,sizeof(Writebuffer));

memcpy( cmd + SCSI_OFF,sizeof(cmdblk) );

cmd[SCSI_OFF+sizeof(cmdblk)+0] = 'A';

cmd[SCSI_OFF+sizeof(cmdblk)+1] = 'b';

cmd[SCSI_OFF+sizeof(cmdblk)+2] = 'c';

cmd[SCSI_OFF+sizeof(cmdblk)+3] = 'd';

cmd[SCSI_OFF+sizeof(cmdblk)+4] = 'e';

cmd[SCSI_OFF+sizeof(cmdblk)+5] = 'f';

cmd[SCSI_OFF+sizeof(cmdblk)+6] = 'g';

cmd[SCSI_OFF+sizeof(cmdblk)+7] = 0;

/*

* +------------------+

* | struct sg_header | Failed\n" );

exit(2);

}

}

在下面的例子中我做了

> scsi阅读

> scsi写道

> scsi阅读

然后我打印写入的数据的十六进制(scsi写入)和读取的内容(scsi读取)

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 ....

再次运行三个命令,我应该在第一次读取时阅读Abcdefg.对?但是再次运行它们不会改变任你现在可以假设,我使用的内存仍然是以前功能的数据,但即使我在sys_read()发生之前运行memset(Readbuff,sizeof(Readbuff)),我也会得到相同的结果.

我假设,我尝试写的LBA可能被禁止写,我读了缓存.但是,从0x00-0xFF对LBA地址进行交互不会改变任何东西 – 这意味着,我读取了相同的数据(Abcdefg).

您是否知道使用scsi通用接口进行scsi读取或写入的示例实现?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值