hotplug Plug Hot

9.11.1. introducere

Subsistemul hotplug a kernel-ului se ocupă în mod dinamic conectarea și deconectarea dispozitivelor prin descărcarea driverele corespunzătoare și crearea de fișiere dispozitiv (folosind udevd). Cu echipamente avansate și de virtualizare pot fi conectate „on the fly“ aproape totul: de la periferice uzuale USB / PCMCIA / IEEE 1394 la hard disk-uri SATA, și chiar procesoare și memorie.

La miezul are o bază de date pentru a se potrivi cu ID-ul fiecărui dispozitiv necesar drivere. Această bază de date este folosit la pornire pentru a conecta toate perifericele drivere gasite pe diferite autobuze, precum și dispozitive suplimentare de conectare la cald. Când dispozitivul este pregătit pentru utilizare, este trimis un mesaj udevd. că se creează o intrare corespunzătoare în / dev /.

9.11.2. problemă de denumire

a fost ușor să atribuiți dispozitivului un nume fix înainte de apariția conectarea la cald. A fost pur și simplu, bazat pe localizarea dispozitivelor de pe autobuz lor. Dar acest lucru este imposibil, atunci când astfel de dispozitive pot să apară și să înceapă să folosească autobuzul. Un caz tipic este utilizarea unui aparat de fotografiat digital sau un farmec USB care apar la calculator ca un hard disk. În primul rând o poate deveni conectat / dev / sdb. iar al doilea - / dev / CDȘ (dacă / dev / sda reprezintă un hard disk local al computerului). Numele dispozitivului nu este fixat; depinde de ordinea în care sunt conectate dispozitive.

În plus, tot mai multe dispozitive, utilizând valori dinamice ale numerelor lor majore și minore, motiv pentru care este imposibil să se utilizeze dispozitive de înregistrare a datelor statice, deoarece aceste caracteristici esențiale pot fi modificate după o repornire.

udev a fost proiectat special pentru a rezolva această problemă.

IN PRACTICA NIC-uri de management

Multe calculatoare au mai multe plăci de rețea (uneori două interfețe cu fir și o interfață WiFi), și cu suportul hotplug pe majoritatea tipurilor de autobuz, nucleul Linux nu garantează denumirea fixă ​​de interfețe de rețea. Dar utilizatorii care doresc să configureze rețeaua lor în / etc / network / interfaces nevoie de un nume fix!

Acest mecanism are unele efecte secundare pe care ar trebui să le cunoașteți. Să considerăm cazul unui computer care are o placă de rețea doar PCI. Interfața de rețea este numit eth0. în mod logic. Acum spun cardul se rupe în jos, iar administratorul îl înlocuiește; noul card va avea o nouă adresă MAC. Deoarece vechea carte a fost atribuit numele, eth0. cel nou va fi atribuit eth1. chiar dacă cardul eth0 este plecat pentru totdeauna (și rețeaua nu va fi funcțională, deoarece / etc / network / interfaces probabil configurează o interfață eth0). În acest caz, este suficient pentru a șterge pur și simplu fișierul /etc/udev/rules.d/70-persistent-net.rules înainte de repornirea computerului. Noul card va fi dat numele eth0 așteptat.

9.11.3. Cum udev

Înarmat cu aceste informații, udev este comparat cu toate normele cuprinse în /etc/udev/rules.d/ și /lib/udev/rules.d/. În acest proces, el decide ce nume pentru a atribui dispozitivului, care creează legături simbolice (pentru a da nume alternative) și ce comenzi pentru a rula. Acesta scanează toate fișierele și toate regulile sunt executate în ordine (în cazul în care «GOTO» directivele nu sunt utilizate în fișier). Deci, ar putea fi unele reguli, evenimentele respective individuale.

reguli de sintaxă fișier este destul de simplu: fiecare rând conține criteriile de selecție și atribuirea de valori variabilelor. Primul este utilizat pentru selectarea evenimentelor pentru care trebuie să răspundă, iar acesta din urmă a determina măsurile care trebuie luate. Acestea sunt toate separate prin virgula, iar operatorul este utilizat pentru a distinge criterii de selecție indirecte (cu operatori de comparație, cum ar fi == și! =) A directivelor de atribuire (cum ar fi operatorii = + = sau = :.).

Operatorii de comparare sunt utilizate cu următoarele variabile:

KERNEL - numele kernel-ului atribuie dispozitivului;

ACȚIUNE - acțiune corespunzătoare evenimentului ( «adăuga dispozitivul» adăugarea, «elimina» este eliminat);

DEVPATH - calea spre o înregistrare aparat / sys /;

SUBSISTEMUL - subsistemul de bază de la care a sosit cererea (multe dintre ele, cum ar fi «USB», «IDE», «net», «firmware», etc ...);

ATTRattribute>. fișier conținutul fișierului atribut în / sys / $ devpath / director al dispozitivului. Acesta este locul unde veți găsi adresa MAC și a altor identificatori specifici de autobuz;

Sirma. Subsistemele și ATTRSatributy> - o variație care încearcă să se potrivească opțiuni diferite, unul dintre dispozitivele, este părintele curentului;

PROGRAM - delegați scanează programul specificat (valabil în cazul în care returnează 0, fals altfel). Conținutul de ieșire standard al programului este stocat, astfel încât să poată fi folosite pentru a verifica REZULTAT;

REZULTATUL - efectuează validarea standard de ieșire, salvat la ultimul program de apel.

Operandul din dreapta se poate folosi expresii wildcard, care corespunde mai multe valori simultan. De exemplu, * se potrivește cu orice șir de caractere (chiar nul);. se potrivește cu orice caracter și [] reprezintă mulțimea caracterelor enumerate în paranteze (sau invers, dacă primul caracter este un semn de exclamare și intervale continue de caractere sunt denumite a-z).

În ceea ce privește operatorii de atribuire = atribuie o valoare (și înlocuiește valoarea curentă); în cazul listei, aceasta este ștearsă și conține doar valoarea atribuită. = Face același lucru, dar nu permite schimbarea variabilă în viitor. + = Adaugă o intrare în listă. Următoarele variabile pot fi modificate:

NAME - numele fișierului dispozitiv care urmează să fie creat în / dev /. Numai prima misiune, restul sunt ignorate;

Symlink - listă de referințe de caractere care indică același dispozitiv;

PROPRIETAR. GROUP MODE și specificați utilizatorul și dispozitivul de susținere de grup, precum și autorizarea asignat;

RUN - o listă de programe care ar trebui să fie executați ca răspuns la un eveniment.

Valorile atribuite acestor variabile, pot fi utilizate următoarele substituții:

Kernel-ul sau $% k - KERNEL echivalent;

$ Număr sau% n - numărul de serie al dispozitivului, de exemplu, ar fi pentru sda3 este „3“;

Sau $ devpath% p - DEVPATH echivalent;

$ Attratribut> sau satribut%> - pentru ATTRSatribut echivalentă>;

Major sau $% M - numărul major în nucleu;

Minor $ sau% m - numărul de dispozitiv minor în nucleu;

$ Rezultat, sau% c - șir de ieșire al ultimului program, cauzate de program;

și în cele din urmă, și %% $$ înseamnă, respectiv, semnul la sută și semnul dolar.

Listele de mai sus nu sunt complete (acestea includ doar cei mai importanți parametri), dar udev (7) pagina de manual ar trebui să fie exhaustivă.

9.11.4. Un exemplu concret

Luați în considerare cazul unui simplu USB transmițător și să încerce să atribuie un nume fix. În primul rând, aveți nevoie pentru a găsi elemente care îl identifică în mod unic. Pentru a face acest lucru, de a conecta și udevadm info -a -n / dev / sdc (înlocuind / dev / sdc pe numele real dat keyring).

Pentru a crea o nouă regulă, puteți utiliza variabilele de test ca dispozitivul, și dispozitivele sale mamă. În exemplul de mai sus, puteți crea două reguli ca acestea:

Odată ce aceste reguli sunt precizate într-un fișier numit, de exemplu, /etc/udev/rules.d/010_local.rules. puteți pur și simplu deconectați și reconectați-stick-ul USB. Puteți face apoi asigurați că / / usb_key unitate dev / disk este asociat USB-stick și / dev / usb_key / part1 - prima secțiune.

Ca multe daemon, udevd jurnalele de magazine în /var/log/daemon.log. Dar nu este foarte prolix în mod implicit, și este, de obicei, nu este suficient pentru a înțelege ce se întâmplă. Controlul udevadm --log-priority = comanda info crește nivelul de detaliere și rezolvă această problemă. Controlul udevadm --log-priority = err revine la nivelul implicit de detaliere.