作者askacis (ASKA)
看板LinuxDev
标题Re: [问题] 如何看出是usb disk还是hard disk?
时间Mon May 23 18:29:06 2011
※ 引述《awaysu (阿伟苏)》之铭言:
: 请教usb devices插入还未mount前
: 可以看出是usb disk还是hard disk吗?
: 感谢!
/sys/block/sd[a-z]里面有个栏位叫做removable
可以参考这个栏位。
removable为1的就是usb flash device,为0的是usb HD(我手上看的是这样)
另我在自己系统上插上这两种装置,kernel吐出来的讯息也有点不同,
首先我拿手上的usb硬碟跟usb大姆哥先看了一下usb列举出来的资讯
两者回的是一样的
bInterfaceClass: 0x08
bInterfaceSubClass: 0x06
bInterfaceProtocol: 0x50
可以找SPEC来看相关数值代表的意义
http://www.usb.org/developers/devclass_docs/
经过查询的结果如下:
bInterfaceClass: Mass Storage
bInterfaceSubClass: SCSI transparent command set
bInterfaceProtocol: USB Mass Storage Class Bulk-Only
可见两者都是用SCSI命令集跟硬体沟通
再来就是要看一下SCSI命令集里面怎麽写的了
http://0rz.tw/LJ26F
可以看到该SPEC第72页有关INQUIRY data的表格里有一bit:
RMB (Removable Media) bit
0 A removable medium (RMB) bit set to zero indicates that the medium is not
removable.
1 A RMB bit set to one indicates that the medium is removable.
这时候回kernel source code翻一下相关的code看看
kernel_source/drivers/scsi/scsi_scan.c
发现有个函式scsi_add_lun里面有对SPEC说的相关bit做处理:
sdev->removable = (inq_result[1] & 0x80) >> 7;
然後再看 kernel_source/drivers/scsi/sd.c
函式sd_probe_async()里负责kernel喷出来的讯息:
sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n",
sdp->removable ? "removable " : "");
所以我插上这两种不同装置的时候,kernel会根据
sdp->removable喷出不一样的讯息了
其实要看相关资讯可以到/sys下面去找
for USB方面的可以找/sys/class/usb_device
for SCSI的可以看/sys/class/scsi_disk/
kernel_source/drivers/scsi/scsi_sysfs.c
以上一点心得,有错误的话还请指正XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 175.180.113.68
※ 编辑: askacis 来自: 175.180.113.68 (05/23 18:43)
※ 编辑: askacis 来自: 175.180.113.68 (05/23 18:57)
※ 编辑: askacis 来自: 175.180.113.68 (05/23 19:01)