GNU/Linux >> Linux の 問題 >  >> Linux

LinuxでUSBベンダーと製品情報をプログラムで取得する方法は?

自分で試したことがない 、しかし libudev の udev_device_get_property_value はそれである必要があります。 pulseaudio の udev-util.c で udev_device_get_property_value(card, "ID_VENDOR_FROM_DATABASE")) として使用されます .

udev-util.c に基づいて、私がまとめた小さな例を次に示します。 - FTDI FT232 チップを搭載した Arduino Duemillanove を使用したことに注意してください。その udev パスは udevadm を使用して見つけました。 (以下のコードのコメントを参照してください)、次に、以下のプログラム 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;
}

このプログラム (Arduino が接続されたもの) は次を出力します:

$ ./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.

...そして、「FT232 USB-Serial (UART) IC」は、usb.ids の VID:PID 0403:6001 の正しいエントリです。

お役に立てれば、
乾杯!


lsusb コマンドは、現在接続されている USB デバイスに関する情報を照会します。その -d を使用できます 特定のベンダー/製品を照会するオプション (ただし、現在接続されているデバイスに対してのみ機能するようです):

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

すべてのデバイスの情報を表示できます:

$ 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

詳細にすることもできます (lsusb -v ) と印刷 たくさん

Linux OS でシステムに関する情報にアクセスする場合は、シェル コマンド (lsusb など) を介してアクセスすることをお勧めします。 ) これらのコマンドがアクセスするシステム ファイルを直接解析するよりも.


Linux
  1. Linuxにデバイスドライバーをインストールする方法

  2. Linuxでシステムとハードウェアの情報を取得する方法

  3. LinuxにEtcherをインストールして使用してLiveLinuxUSBを作成する方法

  1. Linux –論理的に切断されたUSBデバイスを再接続する方法は?

  2. Linux ディストリビューション名とバージョンを取得するには?

  3. USB 接続のベンダー ID、製品 ID、リビジョンを確認する

  1. Linux でプログラムによって ttyUSB0 を切断して再接続する

  2. Amazon EC2 インスタンスのオペレーティング システム情報を取得する方法を教えてください。

  3. Linux でデバイスをマウントするには?