GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan vendor USB dan info produk secara terprogram di Linux?

Saya sendiri belum mencobanya , tetapi udev_device_get_property_value libudev seharusnya itu; ini digunakan di udev-util.c pulseaudio sebagai udev_device_get_property_value(card, "ID_VENDOR_FROM_DATABASE")) .

Ini adalah contoh kecil yang baru saja saya kumpulkan, berdasarkan udev-util.c - perhatikan bahwa saya telah menggunakan Arduino Duemillanove dengan chip FTDI FT232, yang jalur udevnya saya temukan menggunakan udevadm (lihat komentar dalam kode di bawah), lalu saya meng-hardcode-nya dalam program di bawah ini, udevl.c :

// sudo apt-get install libudev-dev
// build with: gcc -o udevl -ludev -Wall -g udevl.c

#include <stdio.h>

#include <libudev.h>

int main( int argc, char **argv )
{
  const char *v;
  char t[256];
  struct udev *udev;
  struct udev_device *card = NULL;

  if (!(udev = udev_new())) {
      fprintf(stderr, "Failed to allocate udev context.\n");
      return -1;
  }

  // $ lsusb | grep FT232
  // Bus 002 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC    
  // $ udevadm info --name=/dev/ttyUSB0 --attribute-walk | grep "looking at device"
  // looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/ttyUSB0/tty/ttyUSB0'
  // (that one is under /sys)
  // hardcode that path below:

  // udev_get_sys_path(udev) for me: '/sys'
  sprintf(t, "%s/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/ttyUSB0/tty/ttyUSB0", udev_get_sys_path(udev));
  fprintf(stdout, " path: %s\n", t);

  card = udev_device_new_from_syspath(udev, t);
  fprintf(stdout, " udev_device: 0x%08X\n", (unsigned int)card);

  if ((v = udev_device_get_property_value(card, "ID_MODEL_FROM_DATABASE")) )
    fprintf(stdout, "got ID_MODEL_FROM_DATABASE: %s\n", v);
  else
    fprintf(stdout, "failed getting ID_MODEL_FROM_DATABASE: %s\n", v);

  fprintf(stdout, "Done.\n");

  if (card)
    udev_device_unref(card);

  if (udev)
    udev_unref(udev);

  return 0;
}

Program ini (dengan Arduino terpasang) menghasilkan:

$ ./udevl 
 path: /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/ttyUSB0/tty/ttyUSB0
 udev_device: 0x09FBF080
got ID_MODEL_FROM_DATABASE: FT232 USB-Serial (UART) IC
Done.

... dan "FT232 USB-Serial (UART) IC" adalah entri yang tepat untuk VID:PID 0403:6001 di usb.ids.

Semoga ini membantu,
Semangat!


lsusb perintah menanyakan informasi tentang perangkat USB yang saat ini terpasang. Anda dapat menggunakan -d opsi untuk menanyakan vendor/produk tertentu (namun tampaknya hanya berfungsi untuk perangkat yang terpasang saat ini):

$ lsusb -d 0e21:0750
Bus 001 Device 005: ID 0e21:0750 Cowon Systems, Inc.

Anda dapat menampilkan informasi untuk semua perangkat:

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0421:01c7 Nokia Mobile Phones
Bus 001 Device 003: ID 0bda:8187 Realtek Semiconductor Corp. RTL8187 Wireless Adapter
Bus 001 Device 005: ID 0e21:0750 Cowon Systems, Inc.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 046d:c01b Logitech, Inc. MX310 Optical Mouse
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Anda juga bisa membuatnya bertele-tele (lsusb -v ) dan mencetak banyak barang.

Perhatikan bahwa ketika mengakses informasi tentang sistem di OS Linux, lebih disukai melakukannya melalui perintah shell (seperti lsusb ) daripada langsung mengurai file sistem yang diakses oleh perintah ini.


Linux
  1. Cara Menginstal dan Menggunakan Etcher di Linux untuk Membuat Live Linux USB

  2. Bagaimana cara mendapatkan info sistem operasi instans Amazon EC2?

  3. Bagaimana cara memasang perangkat di Linux?

  1. Cara menginstal driver perangkat di Linux

  2. Linux – Bagaimana Cara Menghubungkan Kembali Perangkat Usb yang Terputus Secara Logis?

  3. Bagaimana cara mendapatkan nama dan versi distribusi Linux?

  1. Putuskan dan sambungkan kembali ttyUSB0 secara terprogram di Linux

  2. Tonton id vendor koneksi USB, id produk, dan revisi

  3. Android - Bagaimana cara agar perangkat saya terdeteksi oleh ADB di Linux?