La terza versione delle patch per il supporto dei driver Rust in Linux è già stata rilasciata

Sei mesi dopo la pubblicazione della seconda versione, Miguel Ojeda, autore del progetto Rust-for-Linux, reso noto la proposta della terza opzione per lo sviluppo di driver di dispositivo in linguaggio Rust nel kernel Linux.

Il supporto per Rust è considerato sperimentale, ma la sua inclusione nel ramo linux-next è già stata concordata. Lo sviluppo è finanziato da Google e dall'organizzazione ISRG (Internet Security Research Group), che è la fondatrice del progetto Let's Encrypt e contribuisce alla promozione di HTTPS e allo sviluppo di tecnologie per migliorare la sicurezza di Internet.

Va ricordato che le modifiche proposte consentono di utilizzare Rust come secondo linguaggio per sviluppare driver e moduli del kernel.

Driver Rust su Linux
Articolo correlato:
La seconda versione delle patch per il supporto dei driver Rust su Linux è già stata distribuita

Il supporto per la ruggine è pubblicizzato come un'opzione che non è attiva per impostazione predefinita e non comporta l'inclusione di Rust nelle dipendenze di compilazione di base richieste. L'utilizzo di Rust per lo sviluppo dei driver ti consentirà di creare driver migliori e più sicuri con il minimo sforzo, senza il fastidio di accedere a un'area di memoria una volta liberata, dereferenziando i puntatori nulli e superando i limiti del buffer.

La nuova versione delle patch continua ad eliminare i commenti fatti durante la discussione sulla prima e la seconda versione delle patch e le modifiche più importanti che possiamo trovare:

Passato alla versione stabile di Rust 1.57 come compilatore di riferimento e vincolante per l'edizione stabilizzata del linguaggio Rust 2021. Il passaggio alla specifica Rust 2021 ppermesso di iniziare a lavorare per evitare di utilizzare tali caratteristiche instabili in patch come const_fn_transmute, const_panic, const_unreachable_unchecked e core_panic e try_reserve.

Si distingue anche per questo lo sviluppo della versione alloc è continuato dalla libreria Rust, nella nuova versione, le opzioni "no_rc" e "no_sync" sono implementate per disabilitare la funzionalità che non viene utilizzato nel codice Rust per il kernel, rendendo la libreria più modulare. Continuiamo a lavorare con i principali sviluppatori alloc per apportare le modifiche necessarie al kernel nella libreria principale. L'opzione "no_fp_fmt_parse", richiesta per il funzionamento della libreria a livello di kernel, è stata spostata nella libreria di base di Rust (kernel).

Codice ripulito per rimuovere possibili avvisi del compilatore durante la compilazione del kernel in modalità CONFIG_WERROR. Quando il codice viene creato in Rust, sono incluse ulteriori modalità del compilatore diagnostico e avvisi Clippy linter.

hanno proposto astrazioni per usare i seqlock (sequence lock), callback call per power management, memory I/O (readX/writeX), interrupt e gestori di thread, GPIO, accesso al dispositivo, driver e credenziali in codice ruggine.

Gli strumenti di sviluppo dei driver sono stati ampliati con l'uso di mutex rilocabili, iteratori di bit, collegamenti semplificati su puntatori, diagnostica dei guasti migliorata e infrastruttura indipendente dal bus di dati.

Il lavoro con i collegamenti è stato migliorato utilizzando il tipo Ref semplificato, basato sul backend refcount_t, che utilizza l'API centrale con lo stesso nome per contare i riferimenti. Il supporto per i tipi Arc e Rc fornito nella libreria di mappatura standard è stato rimosso e non è disponibile nel codice eseguito a livello di kernel (per la libreria stessa, sono state preparate opzioni per disabilitare questi tipi).

Una versione del driver GPIO PL061, riscritta in Rust, è stata aggiunta alle patch. Una caratteristica del driver è che la sua implementazione quasi riga per riga ripete il driver C GPIO esistente. Per gli sviluppatori che desiderano familiarizzare con i controller di edificio in Rust, è stato preparato un confronto riga per riga, che fornisce informazioni su quali build in Rust è diventato il codice C.

La base di codice principale di Rust adotta rustc_codegen_gcc, un backend rustc per GCC che implementa la compilazione AOT utilizzando la libreria libgccjit. Con un corretto sviluppo del backend, ti permetterà di raccogliere il codice Rust coinvolto nel kernel usando GCC.
Oltre ad ARM, Google e Microsoft, Red Hat ha espresso interesse per l'utilizzo di Rust nel kernel Linux.

Infine, se sei interessato a saperne di più, puoi consultare i dettagli nel seguente link


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile del trattamento: AB Internet Networks 2008 SL
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.