Caracter Dispozitiv Fișiere

Există două modalități principale de modul de comunicare pentru a vorbi cu procesele. Primul este prin fișierele dispozitiv (cum ar fi fișierele din directorul / dev), celălalt este de a utiliza sistemul de fișiere proc. Deoarece unul dintre principalele motive pentru a scrie un modul kernel este un suport al unui dispozitiv hardware, vom începe cu fișierele de dispozitiv.

Scopul inițial al fișierelor dispozitiv este de a permite procese să comunice cu drivere de dispozitiv în kernel-ul, și prin ele cu dispozitive fizice (modem-uri, terminale, etc.).

Fiecare driver de dispozitiv, care este responsabil pentru un anumit tip de hardware are propriul număr principal. Lista de drivere și numerele lor majore este disponibil în / proc / dispozitive. Fiecare dispozitiv fizic controlat de către conducătorul auto dispozitiv are un număr mic. Directorul / dev conține fișiere speciale numite fișiere dispozitiv pentru fiecare dintre aceste dispozitive, care de fapt instalate pe sistemul dumneavoastră.

De exemplu, dacă da comanda ls -l / dev / hd [ab] *. veți vedea toate partițiile IDE hard disk care ar putea fi conectate cu mașina. Vă rugăm să rețineți că toate le folosesc același număr de 3, dar mici camere principale, fiecare propria lor! Disclaimer: Se crede că utilizați o arhitectura PC. Nu știu nimic despre Linux fișiere de dispozitive de pe alte arhitecturi.

Atunci când a fost instalat sistemul, toate fișierele dispozitiv au fost create cu mknod. Nu există nici un motiv tehnic acestea ar trebui să fie în directorul / dev. este doar o convenție utilă. Atunci când creați un fișier de dispozitiv pentru scopuri de testare, cum ar fi să-și exercite aici, ar face, probabil, un sens să-l pună în directorul în care compilați un modul.

Acest modul este împărțit în două părți distincte: o parte a modulului, care înregistrează un dispozitiv și dispozitiv partea șoferului. init_module cauze module_register_chrdev. Pentru a adăuga un driver de dispozitiv pentru simbolul de masă drivere kernel dispozitive. Acest apel returnează, de asemenea, numărul mare pe care doriți să îl utilizați pentru conducătorul auto. cleanup_module Funcția lovește din lista dispozitivului.

Ea (înregistrarea și anularea înregistrării) din funcțiile de bază ale acestor două funcții. Acțiunile din nucleu nu sunt îndeplinite din proprie inițiativă, cum ar fi procesele și sunt numite procese prin intermediul apelurilor de sistem sau dispozitive hardware prin întreruperi sau alte părți ale kernel-ului (pur și simplu prin apelarea funcții specifice). Ca urmare, atunci când adăugați codul de la kernel-ul, îl înregistrați ca driver pentru un anumit tip de eveniment, iar atunci când îl eliminați, va anula înregistrarea.

Driverul de dispozitiv realizează patru operații (funcții) care sunt numite atunci când cineva încearcă să facă ceva cu fișierul de dispozitiv care are numărul nostru majore. Nucleul știe din ce cauză ar trebui să fie prin file_operations structura. FOPS. care a fost dat atunci când a fost înregistrat dispozitivul, inclusiv indicii la cele patru funcții pe care dispozitivul le efectuează.

Cu toate acestea, trebuie să ne amintim că nu putem permite modulului de comandă este descărcată rmmod ori de câte ori dorește să descarce rădăcină. Motivul este că, dacă fișierul de dispozitiv proces deschis, iar noi eliminăm modulul, apoi utilizați fișierul ar cauza un apel la punctul în care se află memoria funcției corespunzătoare. Dacă avem noroc, nici un alt cod a fost încărcat acolo, și vom primi un mesaj de eroare urât. Dacă suntem ghinionist (de obicei cazul), un alt modul a fost încărcat în același loc, ceea ce înseamnă o tranziție în mijlocul unei alte funcții în cadrul nucleului. Rezultatele acestui este imposibil de prezis, dar ele nu pot fi pozitive.

De obicei, atunci când nu doriți să efectueze ceva, returna un cod de eroare (un număr negativ) din funcție, ceea ce face ca acțiunea. Cu cleanup_module acest truc nu va funcționa dacă cleanup_module a invocat modul încheiat. Cu toate acestea, este utilizarea unui contor care contează cât de multe alte module folosesc acest modul, numit numărul de referință (ultimul număr de linie în / proc / modules). Dacă acest număr nu este de zero, rmmod va eșua. Link-uri Counter module disponibile în mod_use_count_ variabilă. Deoarece există macro-uri definite pentru manipularea această variabilă (MOD_INC_USE_COUNT și MOD_DEC_USE_COUNT), preferăm să le folosim mai degrabă decât mod_use_count_ direct, astfel că vom fi în siguranță în cazul în care modificările de punere în aplicare în viitor.

articole similare