GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erhalte ich USB-Anbieter- und Produktinformationen programmgesteuert unter Linux?

Ich habe das noch nicht selbst ausprobiert , aber udev_device_get_property_value von libudev sollte es sein; es wird in pulseaudios udev-util.c als udev_device_get_property_value(card, "ID_VENDOR_FROM_DATABASE")) verwendet .

Hier ist ein kleines Beispiel, das ich gerade zusammengestellt habe, basierend auf udev-util.c - Beachten Sie, dass ich einen Arduino Duemillanove mit FTDI FT232-Chip verwendet habe, dessen udev-Pfad ich mit udevadm finde (siehe Kommentare im Code unten), und dann habe ich es im folgenden Programm hartcodiert, 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;
}

Dieses Programm (mit angeschlossenem Arduino) gibt Folgendes aus:

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

... und "FT232 USB-Serial (UART) IC" ist der richtige Eintrag für VID:PID 0403:6001 in usb.ids.

Hoffe das hilft,
Prost!


lsusb Befehl fragt Informationen über aktuell angeschlossene USB-Geräte ab. Sie können dessen -d verwenden Option zur Abfrage eines bestimmten Anbieters/Produkts (scheint aber nur für aktuell angeschlossene Geräte zu funktionieren):

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

Sie können Informationen für alle Geräte anzeigen:

$ 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

Sie können es auch ausführlich machen (lsusb -v ) und viel drucken Sachen.

Beachten Sie, dass es beim Zugriff auf Informationen über das System unter Linux OS viel besser ist, dies über Shell-Befehle (wie lsusb) zu tun ) als die Systemdateien, auf die diese Befehle zugreifen, direkt zu parsen.


Linux
  1. So installieren Sie einen Gerätetreiber unter Linux

  2. So erhalten Sie System- und Hardwareinformationen unter Linux

  3. Wie mounte ich ein Gerät unter Linux?

  4. Beobachten Sie die Hersteller-ID, Produkt-ID und Revision der USB-Verbindungen

  5. Android - Wie kann ich mein Gerät von ADB unter Linux erkennen lassen?

Linux Mint 19.2 „Tina“ veröffentlicht:Hier ist, was neu ist und wie man es bekommt

So erstellen Sie einen Multiboot-USB in Linux und Windows

So ermitteln Sie die Bandbreitennutzung von USB-Geräten unter Linux

Wie man jede Linux-Distribution mit Windows bootet – und sie bei Bedarf entfernt

So formatieren Sie eine USB-Festplatte als exFAT unter Linux [grafisch und über die Befehlszeile]

So erkennen und verwalten Sie Geräte unter Linux