2011-12-08 44 views
5

我想使用libudev來監視某些設備。具體而言,我想監視可移動存儲:USB硬盤,USB鑰匙,SD卡等。libudev API可讓您在知道該設備父級的「子系統」和「devtype」的情況下查找設備。我在計算機上試過這些設備,並使用udevadm發現所有存儲類型都有'block' - >'scsi'的設備子系統,但我不知道這些設備具有哪些設備類型。是否有我可以用作參考的devtypes和子系統的列表,或更好的方法來查找devtype?如何使用udev識別設備

+0

你找到devtypes及子系統的全球參考? –

回答

5

你可以通過ls /sys/class/得到子系統列表 雖然我不確定設備類型。我想你可以得到這個使用:

ls -l /sys/class/scsi_disk/ 
total 0 
lrwxrwxrwx 1 root root 0 2011-12-07 21:20 0:0:0:0 -> ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/scsi_disk/0:0:0:0 
cat /sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/scsi_disk/0:0:0:0/device/vendor 
ATA  
cat /sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/scsi_disk/0:0:0:0/device/model 
ST9500325AS 

你可以嘗試設備目錄中的其他文件。

其實我覺得你需要:

cat /sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/scsi_disk/0:0:0:0/device/type 
0 

cat /usr/include/scsi/scsi.h | grep TYPE_ 
#define TYPE_DISK   0x00 
#define TYPE_TAPE   0x01 
#define TYPE_PROCESSOR  0x03 /* HP scanners use this */ 
#define TYPE_WORM   0x04 /* Treated as ROM by our system */ 
#define TYPE_ROM   0x05 
#define TYPE_SCANNER  0x06 
#define TYPE_MOD   0x07 /* Magneto-optical disk - 
#define TYPE_MEDIUM_CHANGER 0x08 
#define TYPE_ENCLOSURE 0x0d /* Enclosure Services Device */ 
#define TYPE_NO_LUN   0x7f 
+0

那裏沒有全球參考嗎?您提供的信息非常有用,但僅適用於scsi。我的讀卡器是type block-> mmc ...等。我找到了這個鏈接,但希望有更通用的東西:http://wiki.xfce.org/dev/thunar-volman-udev – Prismatic

+0

就我而言知道沒有一致的命名。每個子系統都有不同的處理但是/ lib/udev /中有一些幫助程序可能需要查看。 –