Sziasztok!
Meg lehet-e csinalni udev szaba'lyokkal, hogy adott /dev/node-ra mutato symlink sorsza'mozott legyen, amennyiben a node megjelene'sekor egy adott felte'telnek eleget tesz?
Pelda: egy FTDI alapu /dev/ttyUSB* vezerlo" legyen mondjuk /dev/ttyFTDI0, /dev/ttyFTDI1, ... symlink ne'ven _is_ ele'rheto"? Ha egy szem FTDI kontrolleres usb-soros konverter van fent maximum garantaltan, akkor a
SUBSYSTEM=="tty", ATTRS{product}=="*FTDI*", SYMLINK+="ttyFTDI"
egy teljesen jol mukodo alternativa, azonban ha egy masik eszko"z is csatlakozik, akkor mar az /dev/ttyFTDI_ ne'ven lesz elerheto". Stb-stb... az rtfm alapja'n nem egyertelmu" a dolog - a %n az meg latszolag nem rossz, csak ugye a sorsza'm az nem inkrementalis lesz. Azaz ekkor ha van mondjuk USB0, USB1, USB2 (ami nem FTDI), akkor a 4ikke'nt csatlakoztatott FTDI endpoint ma'r /dev/ttyFTDI3 ne'ven jonne fel (FTDI0) helyett, ha a fenti szabalyban SYMLINK+="ttyFTDI%n"-t irunk.
Ko"szi, A
- 3316 megtekintés
Hozzászólások
Hat, vegul egy ilyet herkentettem o"ssze kolle'ga javaslata'ra:
SUBSYSTEM=="tty", ACTION=="add", ATTRS{product}=="*STK500*", RUN+="/bin/bash -c 'for (( i=0; i<16; i++)); do if ! test -L /dev/ttyAVR${i}; then ln -s %k /dev/ttyAVR${i}; break; fi; done'"
SUBSYSTEM=="tty", ACTION=="remove", ATTRS{product}=="*STK500*", RUN+="/bin/bash -c 'for (( i=0; i<16; i++)); do test -c /dev/ttyAVR${i} || rm -f /dev/ttyAVR${i}; done'"
Mukodik, latszolag. Azert ha barmi kulturaltabb megoldas van, szoljatok ;)
A
- A hozzászóláshoz be kell jelentkezni
Ez szerintem race condition-ös. Rémlik hogy volt valami párhuzamosság-korlátozás pont az ilyenek miatt, de erre nem építenék.
- A hozzászóláshoz be kell jelentkezni
Hat, van benne race condition, ha az ember mint olyan nagyon-nagyon egyszerre akar ke't usb-s serial/tty eszkozt csatlakoztatni. ennek meg azert igencsak kicsi az eselye ;)
- A hozzászóláshoz be kell jelentkezni
flock ?
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Én inkább a /dev/serial alatt lévő symlinkeket használnám...
Vagy ha azok nem jók valamiért, akkor is úgy csinálnám, hogy lehetőleg nem automata számozást várnék el (ez sose fog megbízhatóan működni), hanem valami más azonosítót is beleraknék a névbe. Erre a legjobb valami (usb) serial lenne, ha az nincs, akkor valami usb path vagy ilyesmi, de a lényeg hogy egyedi azonosító, legalább egy booton belül.
- A hozzászóláshoz be kell jelentkezni
Ez nem rossz ötlet, akár lehet egy vendorId+productId páros is, bár az teljesen azonos hardverek esetén lehet, hogy ugyanaz, és akkor összeakadás esete forog fenn. A hosszú usb path helyett esetleg lehetne sha1($usbPath), és akkor az egyedi, bár nehezen azonosítható be, hogy hova mutat.
- A hozzászóláshoz be kell jelentkezni