Saya memiliki kotak Linux yang menjalankan Busybox. Ada dua pembaca kartu bawaan. Bagaimana saya bisa mendapatkan jenis pembaca kartu?
Saya mencoba lshw
, hwinfo
dan lspci
tetapi perintah ini tidak diterapkan di Busybox.
Halo Stéphane Chazelas,
Terima kasih banyak atas jawaban terperinci Anda. Saya mencobanya. Namun grep tidak menemukan apa pun.
# 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
Jawaban yang Diterima:
Pembaca kartu sering kali merupakan perangkat USB. Jika demikian, Anda dapat melakukan sesuatu seperti:
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}'
Untuk mendapatkan ID dan nama vendor/produk (seperti yang dilaporkan oleh kernel). Yaitu mencari perangkat USB yang konfigurasinya diatur ke CARD READER dan ekstrak konten vendorID
, productID
, manufacturer
dan product
file yang terletak di direktori induk yang berisi configuration
berkas.
Untuk perangkat PCI, ini akan menangkap setidaknya perangkat yang menggunakan driver di bawah ini. busybox find
tidak mendukung GNU find
-lname
predikat, jadi kita membutuhkan sesuatu seperti:
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)
}'
Tidak ada konfigurasi file yang bisa kita gunakan kali ini untuk menentukan class device (sebenarnya ada class
file untuk kelas perangkat PCI, tetapi saya dapat melihatnya sebagai 0xff00 (Lain-lain) untuk perangkat Realtek di sini, tidak ada kelas perangkat PCI yang didedikasikan untuk "pembaca kartu" sehingga kami tidak dapat mengandalkannya). Jadi alih-alih kami mencari drivers
symlink yang mengarah ke salah satu driver yang dikenal sebagai driver untuk pembaca kartu PCI, dan dapatkan ID vendor/produk di jalur yang terkait dengan itu.
Pendekatan yang lebih sederhana adalah dengan menggunakan /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