NEWS
Gelöst-Proxmox: Google Coral USB Modul im LXC-Container
-
ich habe ein Coral USB Modul an einen privilegierten LXC-Container durchgereicht.
Funktioniert EIGENTLICH gut, ABER:Bei jedem Neustart würfelt Proxmox bei "dev/bus/usb/002/...." andere Werte für den Google Coral Stick:
Dann muss ich jeweils hier schauen, was angezeigt wird:
root@pve:~# lsusb Bus 002 Device 003: ID 18d1:9302 Google Inc. Bus 002 Device 002: ID 2109:711f VIA Labs, Inc. External Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO) Bus 001 Device 004: ID 303a:80c2 WEMOS.CC LOLIN-S2-MINI Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
... und hier anpassen:
Dann startet auch der Container wieder.
Gibt es da auch Möglichkeiten, ähnlich wie bei "/dev/serial/by-id" eine Gerätespezifische Weiterleitung zu konfigurieren?
-
Laut ChatGPT (weil es mich auch gtad interessiert hat):
Ja, du kannst eine gerätespezifische Weiterleitung für den Google Coral Stick in einem LXC-Container einrichten, indem du udev-Regeln verwendest. Diese Regeln können ein konsistentes Gerät erstellen, ähnlich wie es /dev/serial/by-id für serielle Geräte tut. Hier ist eine Anleitung, wie du dies erreichen kannst.
- Geräteinformationen erfassen
Zuerst musst du die spezifischen Informationen des Google Coral USB-Sticks ermitteln, die für eine eindeutige Identifikation verwendet werden können. Die wichtigsten Informationen sind Vendor ID (VID) und Product ID (PID).
- Verbinde den Google Coral Stick und führe den Befehl lsusb aus:
lsusb
Suche nach dem Eintrag des Google Coral Sticks, der so aussehen sollte:
Bus 002 Device 003: ID 18d1:9302 Google Inc.
In diesem Fall ist die Vendor ID (VID) 18d1 und die Product ID (PID) 9302.
- Udev-Regel erstellen
Jetzt kannst du eine udev-Regel erstellen, die für den Coral Stick ein statisches Gerät im /dev-Verzeichnis erzeugt.
- Erstelle eine neue udev-Regel, z. B. in /etc/udev/rules.d/99-coral.rules:
sudo nano /etc/udev/rules.d/99-coral.rules
- Füge folgende Zeile hinzu, um eine Regel für den Google Coral Stick zu erstellen:
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="9302", SYMLINK+="coral"
Diese Regel erstellt einen symbolischen Link /dev/coral, der immer auf den Google Coral Stick verweist, unabhängig davon, welchen Pfad dev/bus/usb/002/... ihm zugewiesen wird.
- Speichere die Datei und lade die udev-Regeln neu:
sudo udevadm control --reload-rules
sudo udevadm trigger- LXC-Konfiguration anpassen
Jetzt kannst du die LXC-Konfiguration so anpassen, dass der Container immer den statischen Pfad /dev/coral verwendet.
- Öffne die Konfigurationsdatei deines Containers in /etc/pve/lxc/<Container-ID>.conf:
sudo nano /etc/pve/lxc/<Container-ID>.conf
- Füge eine Zeile hinzu, um /dev/coral in den Container durchzureichen:
lxc.mount.entry = /dev/coral dev/coral none bind,optional,create=file
- Speichere die Datei und starte den Container neu:
sudo pct start <Container-ID>
- Testen
Nach dem Neustart sollte der Google Coral Stick immer über /dev/coral im Container verfügbar sein. Du kannst dies überprüfen, indem du den Container startest und die Verbindung zum Gerät überprüfst:
ls -l /dev/coral
Optional: Prüfen der udev-Regel
Falls die Regel nicht sofort greift, kannst du prüfen, ob sie funktioniert, indem du das Gerät abziehst und erneut ansteckst. Du kannst auch den folgenden Befehl ausführen, um sicherzustellen, dass das Gerät korrekt erkannt wird:
udevadm test $(udevadm info -q path -n /dev/bus/usb/002/<Device-Nummer>)
Zusammenfassung
Mit dieser Methode:
Erstellst du eine udev-Regel, die den Google Coral Stick über einen stabilen Symlink wie /dev/coral verfügbar macht.
Konfigurierst du den LXC-Container so, dass er diesen Symlink verwendet, anstatt sich auf den variablen USB-Pfad zu verlassen.
Jetzt sollte der Container den Google Coral Stick unabhängig von seiner USB-Bus-Adresse erkennen.
-
@david-g erster Versuch hat nicht funktioniert - sowohl im PVE, als auch im LXC ist zwar /dev/coral aufgetaucht, aber der Frigate docker container konnte die TPU nicht finden ...
Habe wieder zurückgebaut ...
Habe nun beides eingebaut ... mir scheint, frigate schaut nur über den "bus" tree ...
frigate@ubuntu-frigate-privileged:~$ ls -l /dev/coral crw-rw---- 1 root root 189, 130 Nov 4 15:42 /dev/coral frigate@ubuntu-frigate-privileged:~$ ls -l /dev/bus/usb/002/003 crw-rw---- 1 root root 189, 130 Nov 4 15:42 /dev/bus/usb/002/003 frigate@ubuntu-frigate-privileged:~$
-
mir scheint, frigate schaut nur über den "bus" tree ...
Eine kleine Modifikation hat es zum Fliegen gebracht
Hängt jetzt an einem "Fake" USB-Bus 10 als erstes Device (wenn der Berg nicht zum Propheten .....)
root@pve:/etc/udev/rules.d# cat 98-coral.rules SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="9302", SYMLINK+="/bus/usb/010/001" root@pve:/etc/udev/rules.d# ls /dev/bus/usb 001 002 010 root@pve:/etc/udev/rules.d# ls /dev/bus/usb/010 001 root@pve:/etc/udev/rules.d# ls -l /dev/bus/usb/010/001 lrwxrwxrwx 1 root root 10 Nov 4 15:56 /dev/bus/usb/010/001 -> ../002/003 root@pve:/etc/udev/rules.d#
info 2024-11-04 15:59:55 frigate.detectors.plugins.edgetpu_tfl Attempting to load TPU as usb info 2024-11-04 15:59:56 frigate.app Camera processor started for stellplatz: 379 info 2024-11-04 15:59:56 frigate.app Capture process started for stellplatz: 380 info 2024-11-04 15:59:58 frigate.detectors.plugins.edgetpu_tflTPU found