阅读:3013回复:7
如何使一个存储设备能够在Windows资源管理器中可见??
比如一个自己开发的SCSI或者USB控制器带一组硬盘,如何在Windows资源管理器中能够看到这几个硬盘?
需要通过驱动程序实现还是Firmware实现,怎么实现呢? 请各位大侠给点思路,越详细越好,多谢~! |
|
沙发#
发布于:2002-05-15 17:16
对于WIN2000和WIN ME而言,由于操作系统本身已经内嵌支持USB 海量设备类的标准驱动,因此主机端驱动无须开发,只要写出相关的FIRM WARE就可以了。但是98不支持,因此,对于98系统而言,设备端的FIRM WARE和主机端的驱动程序都需要。明白?那个SCSI命令集有点繁,我现在也正在研究呢。有问题发邮件给我:zhangcl@i-net.com.cn
|
|
|
板凳#
发布于:2002-05-15 18:05
要想实现几个逻辑单元需要自己写驱动吧
|
|
地板#
发布于:2002-05-15 18:43
谢谢大侠回答,这下USB的问题我明白了,但是SCSI控制器的我还不太明白。
由于我对SCSI命令集也不熟悉,那么不如以较为简单的IDE控制器为例,如果是在PCI板卡上扩展IDE硬盘,如果要资源管理器标出PCI板卡上的IDE硬盘(暂时不考虑逻辑分区的问题),那么是否必须在驱动程序中做些处理,怎样处理? |
|
地下室#
发布于:2002-05-15 20:11
对于ME和2K不用做特殊处理,只要设备端FIRM WARE知道主机会发哪些特定类命令以及如何回应主机就可以了。但是这个前提还是要清楚主机发了哪些命令过来以及命令的格式。IDE和SCSI是两种不同的命令接口,目前ME和2K上的自带UMSS驱动都支持这两种接口,只要FIRM WARE写对了,插上USB后,PC无需安装任何驱动就可以出现一个盘符。
对于98环境则必须要自己写主机端驱动了,对于这个驱动的入口大概是这样的: ====================================================== USB磁盘驱动程序是一个BUS DRIVER,它的主要入口如下: NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING pRegistryPath ) { #if DBG DbgPrint(\"Enter UsbStore DriverEntry!\\n\"); #endif DriverObject->DriverExtension->AddDevice = UsbStore_AddDevice; DriverObject->DriverUnload = UsbStore_Unload; DriverObject->DriverStartIo = UsbStore_StartIo; DriverObject->MajorFunction[IRP_MJ_CREATE] = DriverObject->MajorFunction[IRP_MJ_CLOSE] = UsbStore_CreateClose; DriverObject->MajorFunction[IRP_MJ_READ] = DriverObject->MajorFunction[IRP_MJ_WRITE] = UsbStore_ReadWrite; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = UsbStore_DeviceIoControl; DriverObject->MajorFunction[IRP_MJ_SCSI] = UsbStore_Scsi; DriverObject->MajorFunction[IRP_MJ_PNP] = UsbStore_Pnp; DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = UsbStore_SystemControl; DriverObject->MajorFunction[IRP_MJ_POWER] = UsbStore_Power; return STATUS_SUCCESS; } USB STORAGE DRIVER对设备的主要操作MajorFunction是IRP_MJ_SCSI,而不是IRP_MJ_READ 以及IRP_MJ_WRITE 。 USB STORAGE DRIVER的上层程序是CLASS DRIVER。CLASS DRIVER对上层的USB磁盘的读写等操作转换成 IRP_MJ_SCSI,USB STORAGE DRIVER根据USB CBI规范和BULK ONLY规范将上层DRIVER传送来的IRP_MJ_SCSI 的SRB(SCSI_REQUEST_BLOCK)的相关部分传递给设备。 ====================================================== |
|
|
5楼#
发布于:2002-05-16 14:58
那你现在对PC发那些命令(SCSI)到设备端熟悉吗?具体有哪些?
|
|
6楼#
发布于:2002-05-16 15:09
对于usb硬盘来说,有下面的SCSI命令肯定需要处理: read(10), write(10) ,inquire, requestsense, testunitrdy. readcapability.
但是这只是我根据协议和例程的理解,还没有在调试板上获得证实,关于设备端的FIRM WARE,我正在调试中…… |
|
|
7楼#
发布于:2002-05-21 13:04
对于WIN2000和WIN ME而言,由于操作系统本身已经内嵌支持USB 海量设备类的标准驱动,因此主机端驱动无须开发,只要写出相关的FIRM WARE就可以了。但是98不支持,因此,对于98系统而言,设备端的FIRM WARE和主机端的驱动程序都需要。明白?那个SCSI命令集有点繁,我现在也正在研究呢。有问题发邮件给我:zhangcl@i-net.com.cn 请指教应该先看什么样的资料,能否给我发一份,非常感谢!yxy3115@sohu.com |
|