Re: [問題] 如何看出是usb disk還是hard disk?

看板LinuxDev作者 (ASKA)時間13年前 (2011/05/23 18:29), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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)
文章代碼(AID): #1DsZRr8Y (LinuxDev)
文章代碼(AID): #1DsZRr8Y (LinuxDev)