Wiedza (Persistence USB) Zachowanie linków do urządzeń USB

3Qn

Ave UBI!
Q's Expert
11 Czerwiec 2016
351
2
101
113
QNAP
TS-x73A
Ethernet
1 GbE
Przygotowanie stałych reguł dla udev (Dynamic device management), zaczynamy od podłączenia urządzeń USB po czym w konsoli systemowej "dmesg" odnajdujemy wpisy inicjalizacji nowych urządzeń.

Bash:
...
[367775.241192] usb 1-1.2: new full-speed USB device number 14 using xhci_hcd
[367775.439354] [usb.001.014] /sys/devices/pci0000:00/0000:00:08.1/0000:08:00.3/usb1/1-1/1-1.2 added.
[367778.243193] wireguard: wg0: Handshake for peer 2 ((einval)) did not complete after 5 seconds, retrying (try 3)
[367778.243207] wireguard: wg0: Sending handshake initiation to peer 2 ((einval))
[367779.581191] usb 1-1.3: new full-speed USB device number 15 using xhci_hcd
[367779.776955] [usb.001.015] /sys/devices/pci0000:00/0000:00:08.1/0000:08:00.3/usb1/1-1/1-1.3 added.
...

Wyciągamy potrzebne dane do reguł:
Bash:
udevadm info --name=/dev/bus/usb/{USB ID}/{DEVICE ID} --attribute-walk | grep -E "ATTR\{product\}|ATTR\{serial\}"

W moim przypadku będą to port usb numer 1 urządzenia 14 i 15
Bash:
udevadm info --name=/dev/bus/usb/001/014 --attribute-walk | grep -E "ATTR\{product\}|ATTR\{serial\}"
    ATTR{product}=="Sonoff Zigbee 3.0 USB Dongle Plus"
    ATTR{serial}=="0001"

udevadm info --name=/dev/bus/usb/001/015 --attribute-walk | grep -E "ATTR\{product\}|ATTR\{serial\}"
    ATTR{product}=="WiMOD iM871A-usb"
    ATTR{serial}=="0275940C"

Na tą chwilę możemy jeszcze zweryfikować czy aby na pewno to te urządzenia.
Bash:
 lsusb
Bus 001 Device 014: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x Composite Device
Bus 001 Device 015: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x Composite Device

W katalogu "/lib/udev/rules.d/" tworzymy plik "z21_persistent-local.rules" a w nim odpowiednio dwa wpisy:
Bash:
ATTR{product}=="Sonoff Zigbee 3.0 USB Dongle Plus",ATTR{serial}=="0001",SYMLINK+="zigbee"
ATTR{product}=="WiMOD iM871A-usb",ATTR{serial}=="0275940C",SYMLINK+="wimod"

Ostatni krok to przeładowanie reguł alternatywą jest restart NAS'a.
Bash:
udevadm control --reload-rules

Ponownie wyłaczamy właczamy urządzenia i weryfikujemy czy wszystko działa.
Bash:
ls -alh /dev/ | grep -E "zigbee|wimod"
lrwxrwxrwx  1 admin administrators       15 2023-11-08 00:49 wimod -> bus/usb/001/018
lrwxrwxrwx  1 admin administrators       15 2023-11-08 00:49 zigbee -> bus/usb/001/017

Testowe wypięcie wpięcie urzadzeń USB:
Bash:
ls -alh /dev/ | grep -E "zigbee|wimod"
lrwxrwxrwx  1 admin administrators       15 2023-11-08 01:10 wimod -> bus/usb/001/020
lrwxrwxrwx  1 admin administrators       15 2023-11-08 01:10 zigbee -> bus/usb/001/019

Przydatne przy montowaniu "na stałe" w dockerze w Home Assistant.

,MODE="0660", GROUP="docker"
* dostęp dla wszystkich alternatywa dla '--privileged' <- nie testowane jeszcze
 
Przygotowanie stałych reguł dla udev (Dynamic device management), zaczynamy od podłączenia urządzeń USB po czym w konsoli systemowej "dmesg" odnajdujemy wpisy inicjalizacji nowych urządzeń.

Bash:
...
[367775.241192] usb 1-1.2: new full-speed USB device number 14 using xhci_hcd
[367775.439354] [usb.001.014] /sys/devices/pci0000:00/0000:00:08.1/0000:08:00.3/usb1/1-1/1-1.2 added.
[367778.243193] wireguard: wg0: Handshake for peer 2 ((einval)) did not complete after 5 seconds, retrying (try 3)
[367778.243207] wireguard: wg0: Sending handshake initiation to peer 2 ((einval))
[367779.581191] usb 1-1.3: new full-speed USB device number 15 using xhci_hcd
[367779.776955] [usb.001.015] /sys/devices/pci0000:00/0000:00:08.1/0000:08:00.3/usb1/1-1/1-1.3 added.
...

Wyciągamy potrzebne dane do reguł:
Bash:
udevadm info --name=/dev/bus/usb/{USB ID}/{DEVICE ID} --attribute-walk | grep -E "ATTR\{product\}|ATTR\{serial\}"

W moim przypadku będą to port usb numer 1 urządzenia 14 i 15
Bash:
udevadm info --name=/dev/bus/usb/001/014 --attribute-walk | grep -E "ATTR\{product\}|ATTR\{serial\}"
    ATTR{product}=="Sonoff Zigbee 3.0 USB Dongle Plus"
    ATTR{serial}=="0001"

udevadm info --name=/dev/bus/usb/001/015 --attribute-walk | grep -E "ATTR\{product\}|ATTR\{serial\}"
    ATTR{product}=="WiMOD iM871A-usb"
    ATTR{serial}=="0275940C"

Na tą chwilę możemy jeszcze zweryfikować czy aby na pewno to te urządzenia.
Bash:
 lsusb
Bus 001 Device 014: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x Composite Device
Bus 001 Device 015: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x Composite Device

W katalogu "/lib/udev/rules.d/" tworzymy plik "z21_persistent-local.rules" a w nim odpowiednio dwa wpisy:
Bash:
ATTR{product}=="Sonoff Zigbee 3.0 USB Dongle Plus",ATTR{serial}=="0001",SYMLINK+="zigbee"
ATTR{product}=="WiMOD iM871A-usb",ATTR{serial}=="0275940C",SYMLINK+="wimod"

Ostatni krok to przeładowanie reguł alternatywą jest restart NAS'a.
Bash:
udevadm control --reload-rules

Ponownie wyłaczamy właczamy urządzenia i weryfikujemy czy wszystko działa.
Bash:
ls -alh /dev/ | grep -E "zigbee|wimod"
lrwxrwxrwx  1 admin administrators       15 2023-11-08 00:49 wimod -> bus/usb/001/018
lrwxrwxrwx  1 admin administrators       15 2023-11-08 00:49 zigbee -> bus/usb/001/017

Testowe wypięcie wpięcie urzadzeń USB:
Bash:
ls -alh /dev/ | grep -E "zigbee|wimod"
lrwxrwxrwx  1 admin administrators       15 2023-11-08 01:10 wimod -> bus/usb/001/020
lrwxrwxrwx  1 admin administrators       15 2023-11-08 01:10 zigbee -> bus/usb/001/019

Przydatne przy montowaniu "na stałe" w dockerze w Home Assistant.


* dostęp dla wszystkich alternatywa dla '--privileged' <- nie testowane jeszcze
Cześć,

Super instrukcja i prawie ją wykonałem do końca ;-)

Piszesz że przydatne w montowaniu na stałe w dockerze HASS, a co w przypadku maszyny wirtualnej a nie dockera. Też będzie działać?
Nie chcę czegoś spierniczyć a potem się głowić co nie "pykło"
 
** AKTUALIZACJA **

1) Aktualizacja oprogramowania (firmware usuwa plik reguł).
2) Za mało wiem na temat Virtual Station aby Ci odpowiedzieć na to pytanie czy jest to w ogóle potrzebne być może VS (sam ma jakiś rejestr urządzeń i pilnuje) ale z tego co widzę na liście nie widać tych stworzonych ręcznie dla czego nie wiem być może VS nie szuka urządzeń w katalogu "/dev/ " a skanuje "/dev/bus/usb/" lub też wzorzec nazw jest nie trafiony bo nazwy wimod i zigbee nie należą do "standardu".
 
Niestety ale VS nie "pilnuje" urządzenia i po każdym restarcie trzeba na nowo podpinać
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. home assistant
  2. *
  3. ZigBee
  4. usb