liberdeng
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1181回复:0

关于LINUX中的SCSI的问题

楼主#
更多 发布于:2002-11-04 11:07
在SCSI中,SCSI适配器和SCSI设备之间是什么关系。
在rd.c中我看到了Scsi_Device_Template结构,在sym53c8xx.c中有Scsi_Host_Template结构。这两个应该分别是SCSI设备和SCSI适配器的标准接口。
我现在需要做一个虚拟的SCSI适配器,作为SLAVE。我想应该采用Scsi_Host_Template作为接口,来截获OS发下来的如TEST_UNIT_READY,MODE_SENSE,INQUIRY,READ,WRITE等命令,经过我的虚拟设备处理之后再发给系统中的SCSI适配器。请教这和块设备接口有什么关系吗?
谢谢。

还有,SCSI适配器是否也被系统作为一个标准的块设备?
我的想法是
先要构造一个Scsi_Host_Template,在该模板中来实现自己的功能。由于SCSI设备不同与一般的设备,有许多自己独特的命令,如TEST_UNIT_READY,MODE_SENSE,INQUIRY,READ,WRITE。因此,只有该模板才能模拟一个SCSI适配器来截获OS发给SCSI设备的命令。
如果模拟一个一般的块设备,OS只会发给他READ和WRITE命令,显然达不到要求。
问题1:我如何把自己的命令发到实际的SCSI适配器上,兄台说的real-scsi-device-task-queue(s)! 在哪里,我知道标准的块设备里是有这样的队列,但对SCSI就不是很清楚。
问题2:如何让实际的SCSI适配器不接受OS的命令,而接受我的虚拟DRIVER的命令呢?
思路正如兄台所讲,比较简单,
问题3:我是否需要注册一个块设备,用mknode只能注册快和字符设备。如果需要,这个块设备和我的Scsi_Host_Template之间又是什么关系?
问题4:tell you x-driver which real-SCSI device(s) to ctl ,请教这一点该如何去做?
在SCSI。C中
void scsi_initialize_queue(Scsi_Device * SDpnt, struct Scsi_Host * SHpnt) {
blk_init_queue(&SDpnt->request_queue, scsi_request_fn);
blk_queue_headactive(&SDpnt->request_queue, 0);
SDpnt->request_queue.queuedata = (void *) SDpnt;
}
这个函数应该是SCSI适配器的队列函数,因为调用了blk_init_queue ,但该函数仅仅在SCSI适配器注册的时候使用了,scsi_register_host(),和scsi_get_host_dev()。
SCSI的确很难读,也没有资料,请大家多指点。



liberdeng
游客

返回顶部