Ich habe eine Frage zu den Ports in Linux. Wenn ich mein Gerät über USB anschließe und dessen Anschluss überprüfen möchte, kann ich den Befehl lsusb nicht verwenden, der nur die Busnummer und die Gerätenummer auf diesem Bus angibt:
[ziga@Ziga-PC ~]$ lsusb
Bus 003 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Gibt es einen Befehl, der mir sagt, an welchen Port das Gerät direkt angeschlossen ist? Die einzige Möglichkeit, dies zu tun, bestand darin, die Verbindung zu trennen, die Verbindung wiederherzustellen und den Befehl zu verwenden:
[ziga@Ziga-PC ~]$ dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 0.929510] 00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 4.378109] systemd[1]: Starting system-getty.slice.
[ 4.378543] systemd[1]: Created slice system-getty.slice.
[ 8.786474] usb 3-4.4: FTDI USB Serial Device converter now attached to ttyUSB0
In der letzten Zeile ist zu sehen, dass mein Gerät mit / dev / ttyUSB0 verbunden ist .
usb
serial-port
dmesg
71GA
quelle
quelle
/dev
mit einem Eintrag in verknüpfenlsusb
? Oder möchten Sie alle Geräte auflisten/dev
, die von einem physischen USB-Gerät abgeleitet sind? Oder willst du nurls /dev/ttyUSB*
?ls /dev/ttyUSB*
liste nur 10 Ports auf, aber aus dieser Liste kann ich nicht sagen, welcher für mein Gerät ist.Antworten:
Ich bin nicht ganz sicher, was Sie fragen. Sie erwähnen 'port' mehrmals, aber dann sagen Sie in Ihrem Beispiel, dass die Antwort ist
/dev/ttyUSB0
, dass es sich um einen Geräteentwicklungspfad handelt, nicht um einen Port. Bei dieser Antwort geht es also darum, den Entwicklerpfad für jedes Gerät zu ermitteln.Im Folgenden finden Sie ein schnelles und unsauberes Skript, das Geräte
/sys
nach USB-Geräten mit einemID_SERIAL
Attribut durchsucht. In der Regel haben nur echte USB-Geräte dieses Attribut, sodass wir damit filtern können. Andernfalls werden in der Liste viele Dinge angezeigt, die keine physischen Geräte sind.Auf meinem System führt dies zu folgenden Ergebnissen:
Erläuterung:
Geräte, die in angezeigt werden,
/dev
haben einedev
Datei in ihrem/sys
Verzeichnis. Also suchen wir nach Verzeichnissen, die diesen Kriterien entsprechen.Wir wollen den Verzeichnispfad, also streifen wir ab
/dev
.Dies gibt uns den Pfad an
/dev
, der diesem/sys
Gerät entspricht.Dies filtert Dinge heraus, die keine tatsächlichen Geräte sind. Andernfalls erhalten Sie Dinge wie USB-Controller und Hubs.
Der
udevadm info -q property --export
Befehl listet alle Geräteeigenschaften in einem Format auf, das von der Shell in Variablen zerlegt werden kann. Also rufen wir einfach dazueval
auf. Dies ist auch der Grund, warum wir den Code in Klammern setzen, sodass wir eine Subshell verwenden und die Variablen in jeder Schleife gelöscht werden.Mehr Filterung von Dingen, die keine tatsächlichen Geräte sind.
Ich hoffe du weißt was diese Zeile macht :-)
quelle
Mit diesem Befehl können Sie Ihr Gerät durchsuchen, wenn Sie verbunden sind mit
usb0
:quelle
Sie könnten so etwas unten ausprobieren.
quelle
dmesg | awk '/tty/ && /USB/ {print "/dev/"$1}'
(Das Äquivalent, aber sauber ... aber immer noch seltsamer Code; warum nicht einfach ttyUSB zusammen? Und wofür war 2x rev?)rev
wird verwendet, damit auf das letzte Feld zugegriffen wird. Dies kann ersetzt werden durch$NF
: givingdmesg | awk '/tty/ && /USB/ {print "/dev/"$NF}'
Vielleicht möchten Sie nur den Pfad zum zuletzt angeschlossenen USB-Seriell-Adapter kennen?
quelle
Unter der Annahme, dass Sie wissen, welches Gerät Sie angeschlossen haben, gibt es in Ubuntu 14.04 zumindest den Befehl
usb-devices
, den Sie durchsehen und nach Informationen suchen können:In der ersten Zeile werden Bus und Port sowie die angegebene Gerätenummer aufgelistet
lsusb
.quelle
/dev/*
Weg