close

/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

 

arrow
arrow
    文章標籤
    ARM Embedded Linux USB
    全站熱搜

    askacis 發表在 痞客邦 留言(0) 人氣()