Re: [問題] 如何看出是usb disk還是hard disk?
※ 引述《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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):