dispozitive și module Clase

Metoda de dispozitive Linux viziune este împărțit în trei tipuri de bază. Fiecare modul este în mod normal, pus în aplicare ca fiind unul dintre aceste tipuri și, astfel, este clasificată ca o unitate de caracter. Unitate de bloc. sau un modul de rețea. Această separare a modulelor în diferite tipuri sau clase nu este greu; programator poate crea opțional module mari care conțin drivere diferite într-o singură bucată de cod. programatori buni, cu toate acestea, de obicei a crea un modul diferit pentru fiecare funcționalitate nouă, deoarece descompunerea este cheia pentru scalabilitate și extensibilitate.

Cele trei clase sunt:

Dispozitiv Caracter - este un dispozitiv care poate fi accesat ca un flux de octeți (precum și la dosar); driver de dispozitiv caracter este responsabil pentru punerea în aplicare a unui astfel de comportament. Acest driver este, de obicei, cel puțin susține apelul sistem deschis. aproape. Scriere și citire. Ecranul Text (/ dev / console) și porturi seriale (/ dev / ttyS0 și altele) sunt exemple de dispozitive de caractere, deoarece acestea sunt bine reprezentate fluxul de abstractizare. Pentru a avea acces la dispozitivele utilizate char noduri (nod) sistem de fișiere, cum ar fi / dev / tty1 și / dev / lp0. Singura diferență importantă între dispozitivele de caractere și fișierele regulate - puteți muta mereu înainte și înapoi în fișierul regulat, în timp ce cele mai multe dispozitive de char - este doar canale de date, pe care le puteți accesa doar secvențial. Cu toate acestea, există dispozitive de caractere care arata ca zone de date, și le puteți muta înainte și înapoi; De exemplu, este frecvent utilizat în apucare ecran care poate accesa aplicația pentru întreaga imagine achiziționată folosind mmap sau lseek.

Toată comunicarea în rețea se face printr-o interfață care este un dispozitiv care este capabil de a face schimb de date cu alte noduri în rețea. De obicei, interfața - un dispozitiv hardware, dar poate fi, de asemenea, un dispozitiv de software pur, cum ar fi interfața loopback (dispozitivul loopback local). Interfața de rețea este responsabil pentru trimiterea și primirea de pachete de date, rețeaua de gestionat subsistemului în kernel-ul, fără a se cunoaște cine sunt pachetele transmise.

Multe conexiuni de rețea (în special cele care utilizează TCP) sunt thread-safe, dar dispozitivele de rețea sunt de obicei proiectate pentru a transmite și primi pachete. conducător auto de rețea nu știe nimic despre conexiunile individuale; ea se ocupă numai de pachete. Nu este un dispozitiv, orientată după flux, o interfață de rețea nu este ușor de imaginat ca un nod într-un sistem de fișiere, cum ar fi / dev / tty1. Unix oferă în continuare acces la interfețe prin desemnarea unui nume unic (cum ar fi eth0), dar acest nume nu are nici un element corespunzător în sistemul de fișiere. Schimbul între aparatul de bază de rețea și este foarte diferit de cel utilizat în caractere sau bloc drivere. În schimb, să citească și să scrie, kernel-ul solicită funcții legate de transmiterea de pachete.

Există și alte modalități de clasificare a modulelor driver, care sunt împărțite în mod diferit de dispozitiv. În general, unele tipuri de drivere lucra cu seturi suplimentare de caracteristici de bază pentru acest tip de dispozitiv. De exemplu, putem vorbi despre module Universal Serial Bus (USB), module de serie, module SCSI, și așa mai departe. Fiecare modul de control USB dispozitiv USB care funcționează cu subsistemul USB, dar dispozitivul în sine este reprezentat în sistem, sau ca un dispozitiv de caracter (port serial USB, de exemplu), sau ca un dispozitiv bloc (USB cititor de carduri de memorie), sau o interfață de rețea (cum ar fi , USB interfață de rețea).

Recent, alte clase de drivere de dispozitiv, inclusiv drivere FireWire I2C și au fost adăugate la kernel. În același mod în care au adăugat suport pentru driverele USB și SCSI, dezvoltatorii de nucleu au colectat caracteristicile întregii clase și le-a predat pentru dezvoltatorii de conducător auto pentru a evita suprapunerea eforturilor și a erorilor prin simplificarea și stabilizarea, astfel, procesul de scriere a acestor drivere.

În plus față de driverele de dispozitiv în modulele de bază sunt puse în aplicare în forma și alte caracteristici, inclusiv hardware și software. Un exemplu comun - sisteme de fișiere. Tipul de sistem de fișiere determină modul în care este organizat de informații pe dispozitiv bloc pentru a afișa un arbore de fișiere și directoare. Acesta nu este un driver de dispozitiv, nu există nici un dispozitiv asociat cu metoda de a posta informații; în schimb, sistemul de fișiere - un driver software, deoarece hărți structurile de date de nivel scăzut pe structuri de date de nivel superior. El este un sistem de fișiere care determină cât de mult un nume de fișier poate fi și ce informații despre fiecare fișier este stocat într-o intrare de director. Modulul sistem de fișiere trebuie să pună în aplicare cel mai scăzut nivel de apeluri de sistem care accesul la directoarele și fișierele prin afișarea numelor de fișiere și căile (precum și alte informații, cum ar fi modurile de acces) la structuri de date, salvate în blocuri de date. O astfel de interfață este complet independent de transferul de date la și de pe disc (sau alte mijloace media), cel realizat de driverele de dispozitiv bloc.

Dacă vă gândiți-vă cât de mult sistem Unix depinde de sistemul de fișiere de bază, atunci veți înțelege ce conceptul de software este vitală pentru funcționarea sistemului. Capacitatea de a decoda informațiile de sistem de fișiere rămâne la cel mai scăzut nivel al ierarhiei și nucleul are un foarte important; chiar dacă scrie un bloc driver pentru noul CD-ROM-ul, acesta va fi inutil dacă nu puteți efectua ls sau cp pentru datele acestui aparat. Linux suportă conceptul unui modul sistem de fișiere, o interfață software care declară diferitele operații care pot fi efectuate cu indicele de sistem de fișiere (inode), directorul, fișierul și superblocul. Este puțin probabil ca programator într-adevăr nevoie pentru a scrie un modul de sistem de fișiere, deoarece kernel-ul oficial include deja codul pentru cele mai importante tipuri de sisteme de fișiere.