Busybox

如何獲取內置讀卡器的類型?

  • October 2, 2017

我有一個執行 Busybox 的 Linux 機器。內置兩個讀卡器。如何獲取讀卡器的類型?

我試過了lshw,但是這些命令沒有在 Busybox 上實現。hwinfo``lspci


你好斯蒂芬·查澤拉斯,

非常感謝您的詳細回答。我嘗試過這個。但是 grep 沒有找到任何東西。

# l `find /sys/devices -path '*/usb*/configuration'`
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0470300.ehci_v2/usb3/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0470400.ohci_v2/usb7/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0470500.ehci_v2/usb4/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0470600.ohci_v2/usb8/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0471000.xhci_v2/usb1/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0471000.xhci_v2/usb2/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0480300.ehci_v2/usb5/5-1/5-1.1/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0480300.ehci_v2/usb5/5-1/5-1.2/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0480300.ehci_v2/usb5/5-1/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0480300.ehci_v2/usb5/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0480400.ohci_v2/usb9/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0480500.ehci_v2/usb6/configuration
-r--r--r--    1 root     root          4096 Oct  2 19:14 /sys/devices/rdb.3/f0480600.ohci_v2/usb10/configuration
# l `find /sys/devices -path '*/pci*/driver'`
dr-xr-xr-x    2 root     root             0 Oct  2 19:20 .
dr-xr-xr-x    4 root     root             0 Oct  2 19:20 ..
-r--r--r--    1 root     root             0 Oct  2 19:31 devices
# l /proc/bus/pci/devices
-r--r--r--    1 root     root             0 Oct  2 19:31 /proc/bus/pci/devices

讀卡器通常是 USB 設備。如果是這樣,您可以執行以下操作:

find /sys/devices -path '*/usb*/configuration' -exec \
  grep -lx 'CARD READER'  {} + | awk -F/ -vOFS=/ '{
    NF--
    getline idv < ($0 "/idVendor")
    getline idp < ($0 "/idProduct")
    getline v < ($0 "/manufacturer")
    getline p < ($0 "/product")
    print idv":"idp" "v" "p}'

獲取供應商/產品 ID 和名稱(由核心報告)。即查找配置設置為CARD READER的 USB 設備,並提取位於包含該文件的父目錄中的 、 和 文件vendorID的內容。productID``manufacturer``product``configuration

對於 PCI 設備,這將至少擷取使用以下驅動程序的設備。busyboxfind不支持 GNUfind-lname謂詞,所以我們需要類似的東西:

find /sys/devices -path '*/pci*/driver' -type l -exec readlink {} \; -print |
 awk -F/ -v OFS=/ '
   BEGIN{d["cb710"]d["r592"]d["r852"]d["rts5208"]d["rtsx_pci"]}
   $NF in d {
     getline
     NF--
     getline v < ($0 "/vendor")
     getline p < ($0 "/device")
     print substr(v, 3) ":" substr(p, 3)
   }'

這次沒有配置class文件可以用來確定設備的類別(實際上,有一個PCI設備類別的文件,但我可以看到它是Realtek設備的0xff00(Misc),沒有PCI設備類專用於“讀卡器”,所以我們不能依賴它)。因此,我們尋找drivers指向任何已知為 PCI 讀卡器驅動程序的驅動程序的符號連結,並在與該驅動程序相關的路徑中獲取供應商/產品 ID。

一種更簡單的方法是使用/proc/bus/pci/devices

awk '
 BEGIN{d["cb710"]d["r592"]d["r852"]d["rts5208"]d["rtsx_pci"]}
 $NF in d {print substr($2, 1, 4) ":" substr($2, 5)}
' < /proc/bus/pci/devices

引用自:https://unix.stackexchange.com/questions/395620