第二版發布六個月後, 米格爾·奧赫達,Rust-for-Linux 項目的作者, 公佈了第三種方案的提案 用於在 Linux 內核中開發 Rust 語言設備驅動程序。
Rust 支持被認為是實驗性的,但已經同意包含在 linux-next 分支中。 該開發由 Google 和 ISRG(互聯網安全研究小組)組織資助,該組織是 Let's Encrypt 項目的創始人,為 HTTPS 的推廣和提高互聯網安全的技術開發做出了貢獻。
應該記住,提議的更改允許 Rust 用作開發驅動程序和內核模塊的第二語言。
Rust 支持被宣傳為默認情況下不活動的選項 並且不會導致 Rust 包含在所需的基本構建依賴項中。 使用 Rust 進行驅動程序開發將允許您以最小的努力構建更好、更安全的驅動程序,而不會出現諸如訪問釋放後的內存區域、取消引用空指針和緩衝區溢出等問題。
新版本的補丁繼續刪除了在討論第一版和第二版補丁時所做的評論以及我們可以找到的最顯著的更改:
已完成向使用 Rust 1.57 穩定版本的過渡 作為參考編譯器,與 Rust 2021 語言穩定版的鏈接已得到保護。向 Rust 2021 p 的過渡允許開始工作以避免使用此類不穩定的功能 在 const_fn_transmute、const_panic、const_unreachable_unchecked 和 core_panic 和 try_reserve 等補丁中。
這也突出了 alloc 版本的開發仍在繼續 來自 Rust 庫,在新版本中, 實施“no_rc”和“no_sync”選項來禁用該功能 Rust 內核代碼中沒有使用它,使庫更加模塊化。 我們繼續與主要的分配開發人員合作,為主庫帶來必要的內核更改。 該庫在內核級別工作所需的“no_fp_fmt_parse”選項已移至 Rust 基礎(內核)庫。
清理代碼以刪除可能的編譯器警告 在 CONFIG_WERROR 模式下編譯內核時。 當您使用 Rust 進行編碼時,會包含額外的診斷編譯器模式和 Clippy linter 警告。
他們提出 使用 seqlock 的抽象 (流鎖)、電源管理的回調調用、I/O 內存(readX/writeX)、線程和中斷處理程序、GPIO、設備訪問、驅動程序和 Rust 代碼中的憑證。
驅動程序開發工具已得到擴展 通過使用可重定位互斥體、位迭代器、簡化的指針綁定、改進的故障診斷和數據總線獨立的基礎設施。
使用 Ref 類型改進了鏈接的使用 簡化,基於 refcount_t 後端,它使用同名的核心 API 來統計引用。 標準映射庫中提供的對 Arc 和 Rc 類型的支持已被刪除,並且在內核級別執行的代碼中不可用(對於庫本身,已準備好選項來禁用這些類型)。
補丁中添加了用 Rust 重寫的 PL061 GPIO 驅動程序版本。 該驅動程序的一個特點是其幾乎逐行實現重複了現有的 C GPIO 驅動程序。 對於想要熟悉在 Rust 中構建控制器的開發人員,我們準備了逐行比較,以幫助您了解 Rust 構建您的 C 代碼的方式。
Rust 主要代碼庫採用 rustc_codegen_gcc ,它是 GCC 的 rustc 後端,使用 libgccjit 庫實現 AOT 編譯。 通過適當的後端開發,它將允許您使用 GCC 編譯內核中涉及的 Rust 代碼。
除了 ARM、Google 和 Microsoft 之外,Red Hat 也表示有興趣在 Linux 內核中使用 Rust。
最後,如果有興趣了解更多,可以查閱詳情 在下面的鏈接中。