Busybox
如何獲取內置讀卡器的類型?
我有一個執行 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 設備,這將至少擷取使用以下驅動程序的設備。busybox
find
不支持 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