Arriva l'ottava versione delle patch per il supporto del driver Rust su Linux

Miguel Ojeda, autore del progetto Rust-for-Linux ha rilasciato l'ottava versione dello sviluppo di patch del kernel Linux con il supporto del linguaggio Rust per gli sviluppatori del kernel Linux da considerare.

Questa è la nona versione delle patch (tenendo conto della prima versione rilasciata senza un numero di versione). Il supporto antiruggine è considerato sperimentale, ma è già incluso nel ramo linux-next, richiede l'integrazione nella versione autunnale di 5.20/6.0 ed è sufficientemente avanzato per iniziare a lavorare sulla creazione di livelli di astrazione sopra i sottosistemi del kernel, oltre a scrivere controller e moduli.

Lo sviluppo è finanziato da Google e dall'ISRG (Internet Security Research Group), che è il fondatore del progetto Let's Encrypt e promuove HTTPS e lo sviluppo di tecnologie per aumentare la sicurezza di Internet.

Le modifiche proposte consentono di utilizzare Rust come seconda lingua per lo sviluppo di driver e moduli del kernel. Il supporto di Rust è presentato come un'opzione che non è abilitata per impostazione predefinita e non comporta l'inclusione di Rust tra le dipendenze di build richieste per il kernel. L'uso di Rust per sviluppare driver ti consentirà di creare driver migliori e più sicuri con il minimo sforzo, senza problemi come l'accesso a un'area di memoria dopo averla liberata, i puntatori nulli di dereferenziazione e gli overflow del buffer.

La sicurezza della memoria viene fornita in Rust in fase di compilazione controllando i riferimenti, monitorando la proprietà dell'oggetto e la durata dell'oggetto (ambito), nonché valutando la correttezza dell'accesso alla memoria durante l'esecuzione del codice.

Cosa c'è di nuovo in questa ottava versione?

In questa nuova proposta che è stata rilasciata, si menziona che la variante della libreria alloc, che ha eliminato la possibile generazione di stato "panico" sugli errori, aggiornato alla versione Rust 1.62. Rispetto alla versione precedente, il toolkit Rust ha stabilizzato il supporto per la funzionalità const_fn_trait_bound usata nelle patch del kernel.

Oltre ad esso il codice di associazione è separato in un fascio di caselle di "rilegatura". separatamente, il che semplifica la ricostruzione se viene modificato solo il pacchetto del kernel principale.

Il implementazione della macro "concat_idents!", Riscritta come macro procedurale, non legata alla funzionalità concat_idents e che consente l'utilizzo di riferimenti a variabili locali.

Inoltre, si ricorda che la macro "asserzione_statica!" è stato riscritto per consentire "core::assert!()" viene utilizzata in qualsiasi contesto al posto delle costanti, mentre la macro "construction_error!" è stato adattato per funzionare quando si imposta la modalità "RUST_BUILD_ASSERT_{WARN,ALLOW}" per i moduli.

modulo fs aggiunto che fornisce collegamenti per lavorare con i file system. Viene proposto un esempio di un semplice file system scritto in Rust, così come il modulo coda lavori aggiunto per lavorare con le code di sistema.

Delle altre modifiche che si distinguono da questa nuova proposta:

  • Aggiunto un file di configurazione separato "kernel/configs/rust.config".
  • I file "*.i" elaborati nelle sostituzioni di macro sono stati rinominati in "*.rsi".
  • Rimosso il supporto per la creazione di componenti Rust con livelli di ottimizzazione diversi da quelli utilizzati per il codice C.
  • È proseguito lo sviluppo del modulo kasync con l'implementazione di modalità di programmazione asincrona (async).
  • Aggiunto un esempio di server TCP a livello di kernel scritto in Rust e aggiunta la possibilità di gestire gli interrupt in Rust.
  • Aggiunta una macro di procedura per semplificare il lavoro con le tabelle dei puntatori di funzione, come la struttura file_operations.
  • Aggiunta l'implementazione dell'elenco collegato bidirezionale "unsafe_list::List".
  • Aggiunto supporto iniziale per RCU e il tipo Guard per verificare se un blocco di lettura è associato al thread corrente.
  • Aggiunta la funzione Task::spawn() per generare e avviare automaticamente i thread del kernel.
  • È stato aggiunto anche il metodo Task::wake_up().
  • Aggiunto un modulo di ritardo

Infine se sei interessato a saperne di più, puoi controllare 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.