Scenarii non-standard de utilizare pentru modulele kernel-ului partea 41

Aveți grijă de articole noi din această serie.

Acest conținut face parte din seria: scenarii personalizate de utilizare a kernelului

Aveți grijă de articole noi din această serie.







Efectuarea apelurilor de sistem

Prima versiune de aplicare poate fi găsit prin simbolul kernel oferă utilizarea o varietate de funcții sistem Linux manipulare apelează în mod direct de la codul de kernel. Pentru a ilustra metodele tehnice descrise, considerăm că punerea în aplicare a printf () apelați din codul modul kernel, atât vizual și cel mai faimos al apelului. exemplu de cod complet din listingul 1, pot fi găsite în arhiva new_sys.tgz. localizat în secțiunea "Descărcări".

Listing 1. Efectuarea unui șir de terminale prin efectuarea unui apel sistem.

Acest exemplu dă naștere la o serie de întrebări interesante, cum ar fi, de exemplu, dacă un astfel de apel va funcționa numai pentru ieșirea la terminalul grafic (X11) sau la consola de text ()? Da, funcționează, dar lăsăm verificarea acestei declarații cititorului.

O altă întrebare este motivul pentru care șirul de limbă rusă a fost folosit ca linie de ieșire, deși acest lucru nu este binevenit în programarea kernel-ului? Deoarece calea completă a trecerii mesajelor din nucleul implicat prea multe straturi și componente succesive (punerea în aplicare a printk (). Log fișier jurnal daemon final UNIX terminal de sistem Visualizer dmesg., Etc.), încheierea unui astfel de linie poate fi un test bun pentru consecvența muncii tuturor acestor componente. Verificați mai întâi setările sistemului:







Stabilim diagnosticul nivelului de ieșire sub pragul (dar numai la rădăcina terminalului în loc de a folosi sudo.), Sau executați modulul din consola pur și simplu lipsit de sens, și repetați instalarea modulelor noastre:

Vom vedea o imagine ciudată în consola:

Se pare că implementarea apelului printk () în kernel:

  1. afișează diagnosticele nu prin jurnalul de sistem, ci paralel cu daemonul de logare;
  2. încearcă să interpreteze fluxul de caractere UNICODE și să le transforme în byte în ASCII;
  3. Ca rezultat, caracterele UNICODE primesc daune "ireversibile", iar linia este trimisă într-o formă atât de ciudată.

Ca rezultat al experimentelor, putem spune că modulele de kernel programator, în plus față de instrumentele de programare prezente în nucleu, și este disponibil un set de sistem de apeluri spațiu utilizator API POSIX. Firește, interpretarea rezultatelor unora dintre aceste apeluri de sistem în contextul kernel-ului poate fi foarte ambiguă și uneori chiar inutilă. Cu toate acestea, apelurile în sine pot fi efectuate și folosite pentru a rezolva anumite sarcini!

concluzie

Prin acest punct, am fost convins că întregul set de apeluri de sistem folosite în programarea din spațiul utilizatorilor este disponibil (după unele acțiuni auxiliare) și în codul modulului kernel. De asemenea, se poate argumenta că arsenalul de capabilități (instrumente, funcții, mecanisme) sunt disponibile pentru a fi utilizate de către programatori modulul de kernel depășește posibilitățile deschise de programatori care lucreaza in spatiul utilizator! Dar, după cum aflăm din următoarele articole, lista de caracteristici care pot fi folosite din codul modulului kernel este departe de a fi limitată la cele pe care le-am luat deja în considerare.

Descărcați resurse

Subiecte conexe







Trimiteți-le prietenilor: