A treia versiune a patch-urilor pentru suportul driverelor Rust în Linux a fost deja lansată

La șase luni de la publicarea celei de-a doua versiuni, Miguel Ojeda, autor al proiectului Rust-for-Linux, a făcut cunoscută propunerea celei de-a treia opțiuni pentru dezvoltarea de drivere de dispozitiv în limbajul Rust în Kernel-ul Linux.

Suportul Rust este considerat experimental, dar includerea lui în ramura linux-next a fost deja de acord. Dezvoltarea este finanțată de Google și de organizația ISRG (Internet Security Research Group), care este fondatorul proiectului Let's Encrypt și contribuie la promovarea HTTPS și la dezvoltarea tehnologiilor de îmbunătățire a securității pe Internet.

Trebuie amintit că modificările propuse permit Rust să fie folosit ca a doua limbă pentru a dezvolta drivere și module de kernel.

Rust drivere pe Linux
Articol asociat:
A doua versiune a patch-urilor pentru suportul driverului Rust pe Linux a fost deja livrată

Suportul Rust este anunțat ca o opțiune care nu este activă în mod implicit și nu are ca rezultat includerea Rust în dependențele de bază necesare pentru construirea. Folosirea Rust pentru dezvoltarea driverelor vă va permite să creați drivere mai bune și mai sigure cu efort minim, fără bătaia de cap de a accesa o zonă de memorie odată eliberată, dereferențând pointerii nuli și depășind limitele buffer-ului.

Noua versiune a patch-urilor continuă să elimine comentariile făcute în timpul discuției despre prima și a doua versiune a patch-urilor și cele mai notabile modificări pe care le putem găsi:

Trecerea la versiunea stabilă Rust 1.57 ca compilator de referință și legarea la ediția stabilizată a limbajului Rust 2021 a fost asigurată. Tranziția la specificația Rust 2021 ppermis să înceapă să lucreze pentru a evita utilizarea unor astfel de caracteristici instabile în patch-uri precum const_fn_transmute, const_panic, const_unreachable_unchecked și core_panic și try_reserve.

De asemenea, se remarcă faptul că dezvoltarea versiunii alloc a continuat din biblioteca Rust, în noua versiune, opțiunile „no_rc” și „no_sync” sunt implementate pentru a dezactiva funcționalitatea care nu este folosit în codul Rust pentru nucleu, făcând biblioteca mai modulară. Continuăm să lucrăm cu principalii dezvoltatori alloc pentru a aduce modificările necesare ale nucleului în biblioteca principală. Opțiunea „no_fp_fmt_parse”, care este necesară pentru ca biblioteca să funcționeze la nivel de nucleu, a fost mutată în biblioteca de bază a lui Rust (kernel).

Cod curățat pentru a elimina posibilele avertismente ale compilatorului la compilarea nucleului în modul CONFIG_WERROR. Când codul este creat în Rust, sunt incluse moduri suplimentare ale compilatorului de diagnostic și avertismente Clippy linter.

Au propus abstracții pentru a utiliza seqlock-uri (blocuri secvențe), apeluri inverse pentru gestionarea energiei, I/O memorie (readX/writeX), întreruperi și gestionare de fire, GPIO, acces la dispozitiv, drivere și acreditări în cod rust.

Instrumentele de dezvoltare a driverelor au fost extinse cu utilizarea mutex-urilor relocabile, iteratoare de biți, legături simplificate peste pointeri, diagnosticare îmbunătățită a erorilor și infrastructură independentă a magistralei de date.

Lucrul cu legăturile a fost îmbunătățit folosind tipul Ref simplificat, bazat pe backend-ul refcount_t, care utilizează API-ul central cu același nume pentru a număra referințele. Suportul pentru tipurile Arc și Rc furnizate în biblioteca de mapare standard a fost eliminat și nu este disponibil în codul executat la nivel de kernel (pentru bibliotecă în sine, au fost pregătite opțiuni pentru a dezactiva aceste tipuri).

O versiune a driverului PL061 GPIO, rescrisă în Rust, a fost adăugată la patch-uri. O caracteristică a driverului este că implementarea sa aproape linie cu linie repetă driverul C GPIO existent. Pentru dezvoltatorii care doresc să se familiarizeze cu controlere de clădire din Rust, a fost pregătită o comparație linie cu linie, care oferă o perspectivă asupra versiunilor în care a devenit codul C în Rust.

Baza de cod principală a Rust adoptă rustc_codegen_gcc, un backend rustc pentru GCC care implementează compilarea AOT folosind biblioteca libgccjit. Odată cu dezvoltarea adecvată a backend-ului, vă va permite să colectați codul Rust implicat în nucleu folosind GCC.
Pe lângă ARM, Google și Microsoft, Red Hat și-a exprimat interesul pentru utilizarea Rust în nucleul Linux.

În fine, dacă ești interesat să afli mai multe despre el, poți consulta detaliile În următorul link.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: AB Internet Networks 2008 SL
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.