2009-11-04 145 views
4

我正在寫一個bash腳本,用圖像填充cf卡。由於只允許使用指定的卡,因此我想檢查是否將正確類型的CF卡插入USB CF卡寫入器。如何讀出CF卡的供應商ID

我知道有可能以某種方式讀取cf卡的供應商ID和固件版本(我在嵌入式系統上看到過),但我不知道如何在我的linux系統上實現這個功能(openSUSE 10.3 )和一個usb cf卡作家。

其他人知道如何?

非常感謝, 克里斯

回答

1

你可以嘗試做

cat /proc/scsi/scsi 

,看看是否有meaningfull信息。由於CF卡具有PID/VID並不意味着它由USB讀卡器輸出。

+0

它看起來沒有導出......它顯示cf卡rw設備上的信息,但插入卡時不會改變。 – Chris 2009-11-04 12:25:37

0

看看的lsusbcat /proc/scsi/usb-storage/*

+0

謝謝,但這隻顯示有關cf卡設備的信息,但沒有插入cf卡的信息... – Chris 2009-11-04 12:20:31

1
hdparm -i /dev/sda 

輸出可以告訴你有關的模型,固件版本和大多數ATA硬盤的序列號(包括,我相信一個CF「盤」)。

smartctl -a /dev/sda 

還會告訴你很多關於隨機光盤,包括型號,序列,固件,容量,以及一些統計數據到磁盤的一般健康狀況。

我相信這對於CF盤來說可以很好地工作,就像它對SATA或PATA盤所做的那樣,儘管我現在沒有在這裏檢查。

+1

感謝您的建議。我使用3種不同的讀卡器嘗試了命令(加上sdparm),但它們都不起作用......看起來讀卡器不會導出這些信息。不過,這些命令適用於我的固定硬盤。 – Chris 2009-11-05 07:46:57

2

除了使用lsusb,你可以嘗試dbus。

這是一個示例python代碼,應該列出硬件層次結構中的所有scsi_host父項。

import dbus 
bus = dbus.SystemBus() 
hal = bus.get_object ('org.freedesktop.Hal', 
      u'/org/freedesktop/Hal/Manager') 
hal_manager = dbus.Interface(hal, u'org.freedesktop.Hal.Manager') 
volume_udi_list = hal_manager.FindDeviceByCapability('scsi_host') 
for udi in volume_udi_list: 
    # inspect all scsi_host devices 
    dev = bus.get_object (u'org.freedesktop.Hal', udi) 
    volume = dbus.Interface(dev, u'org.freedesktop.Hal.Device') 
    # get their parent 
    parent = volume.GetProperty('info.parent') 
    dev = bus.get_object (u'org.freedesktop.Hal', parent) 
    volume = dbus.Interface(dev, u'org.freedesktop.Hal.Device') 
    # Here we can find vendor id for usb-storage devices 
    props = volume.GetAllProperties() 
    print "\n".join(("%s: %s" % (k, props[k]) for k in props)) 
+0

請注意,只有讀卡器被分配一個USB供應商ID,CF本身不是。如果你沒有使用lsbus看到它,這意味着它沒有連接到USB總線。無論如何,使用dbus可以瀏覽樹結構以查看可用的信息類型。 – baol 2010-04-01 20:16:05