05

Feb . 2024

緣起今生:英飛凌車規MCU全系支援Rust 語言開發

分享至

專家在線

英飛凌 Isaac

2023年3月7日,英飛凌宣布其32位微控制器AURIX™系列、TRAVEO™ T2G系列 和 PSoC™ MCU 系列支援 Rust語言,英飛凌成為全球領先正式支持 Rust 的半導體公司。


那麼什麼是 Rust,為什麼要關注它? 在本系列部落格文章中,我們將探討 Rust 語言及其在嵌入式系統開發中的潛力,以及英飛凌為創建嵌入式 Rust 生態系統所做的努力。


RUST 誕生背景

隨著軟體功能的日益強大,軟體開發工作量隨之劇增,軟體開發團隊也不斷嘗試改進軟體的開發方法,旨在確保軟體功能,質量的情況下,減少成本,加快開發速度。


要實現上述目標,關鍵在於工作量-在軟體開發中盡可能減少工作量。


軟體開發相關的工作量包括功能需求定義,功能需求的實現和測試,非功能需求,以及修復開發過程中引入的錯誤的工作量。


站在軟體開發者的角度,在實現軟體完整功能的情況下,如何減少開發的總工作量,唯一能夠減少的部分就是用於修正錯誤的工作量。


對軟體開發而言,一旦發現錯誤,就必須加以修正,以保證軟體產品質量。 因此,要在不影響產品品質的前提下減少工作量,唯一的解決方法就是防止開發過程中引入軟體錯誤。


在已知的軟體錯誤中,內存安全是軟體產業中最常見的錯誤類別[1][2]。 然而,嵌入式軟體產業的標準語言 C 和 C++ 是非內存安全編程語言,這意味著嵌入式系統很容易出現這類錯誤。


減少這類錯誤的方法之一是在軟體測試、審查和驗證方面投入人力物力,而另一個想法是用內存安全語言取代現有語言[3]。


雖然許多內存安全語言(如 Python、Java)已在軟體產業中廣泛應用,但它們並不適合嵌入式系統。 這是因為嵌入式系統對佔用空間、堆疊使用和性能有嚴格的限制(這是C和C++的優勢)。


Rust就是在這樣的背景下誕生的,它同時實現了高效性和內存安全。

Rust 是什麼

Figure 1. Rust Logo

Rust語言在2006年作為 Mozilla 員工 Graydon Hoare 的私人項目出現,而 Mozilla 於 2009 年開始贊助這個計畫。 第一個有版本號碼的 Rust 編譯器於2012 年 1 月發布。 Rust 1.0 是第一個穩定版本,於 2015年5月15日發布 [4] 。

Figure 2. rust-gentle-intro [6]

Rust是一種在科技界大受歡迎的語言,Rust已經連續七年(2016,2017,2018,2019,2020, 2021, 2022)在Stack Overflow開發者調查的「最受喜愛編程語言」評選項目中折取桂冠[5]。


微軟用Rust重寫它的一些核心windowns庫,在Android 13 中,21% 的新原生程式碼使用了Rust,此外,除了C 語言外,Rust 是唯一一種支持編寫Linux 核心元件的語言,並被廣泛用於後端軟體、基礎設施和微服務。


Rust是一種系統程式語言,旨在成為無垃圾回收的內存安全語言。


Rust使用了包含特定規則的「所有權」機制來管理內存,允許編譯器在編譯過程中執行檢查工作,而不會

產生任何的運行時開銷。 Rust中的每一個值都有一個對應的變數作為它的所有者;在同一時間內,值有且僅有一個所有者;當所有者離開自己的作用域時,它持有的值就會被釋放掉。


Rust使用「借用規則」實現對值進行可變和不可變引用:一個值可以有一個不可變引用或多個可變引用,但不能同時有兩個引用。 編譯器中一個名為「借用檢查器」的特定部分會對此進行檢查。


Rust中的生命週期規則:Rust的每個引用都有自己的生命週期,它對應著引用保持有效性的作用域。 生命週期最主要的目標在於避免懸垂引用,進而避免程式引用到非預期的資料。 [7][8]


Cargo 是 Rust 的軟體套件管理器[9],軟體包稱為板條箱(Crate),cargo 有一個指令:cargo build,它能自動解決項目依賴關係。 另外,使用 cargo test 命令能觸發單元測試,使用 cargo doc 命令還能產生文件網頁。 cargo 的文檔列出了 30 多個不同的命令,用於支持軟體包處理、構建文件和測試。 此外,cargo 還可用於安裝其他 Rust 二進位文件,如工具 svd2rust。

嵌入式系統中的 Rust

Figure 3. Embedded Rust Architecture

Embedded Rust 的結構可分為上述5層,如上圖所示,從下往上的順序,最底層是MCU硬體層,有各個資源,外設,由不同的晶片決定;第2層是PAC,可以理解為晶片的頭文件,裡面是各個寄存器的訊息;第3層是在PAC的基礎上對寄存器進行操作一些調度函數,裡面對寄存器進行直接操作;第4層是硬體抽象層,這一層的意義是從晶片強相關的驅動函數上抽象化出來,提供一個通用接口,這個通用接口由最上層的軟體驅動層、軟體應用層去調用,實現對晶片資源的調度。


在Embedded Rust中,使用svd2rust工具將晶片資源的描述檔SVD檔案轉換為PAC,該接口具有良好的可讀性,便於審查和維護。 此外,它還能防止錯誤,因為如果設定的值對該字段無效,代碼將無法編譯。

RUST 與 C 語言的關係

Rust對硬體的內存需求,堆疊使用,運行效率可以和C相媲美,具體的細節差異會和編譯優化等級,應用等有些許差異。


此外,Rust有一個令人振奮的點,它可以和C語言共同使用。


Rust和C程式碼間的互用性始終取決於兩種語言間的數據轉換。 為了實現互用性,在stdlib中,有兩個專用模組,稱為std::ffi和std::os::raw 。


std::ffi提供了一些工具去轉換更複雜的類型,例如Strings,將&str和String映射成更容易和安全處理的C類型。


std::os::raw處理底層的基本類型,這些類型可以被編譯器隱式地轉換,因為Rust和C之間的內存佈局足夠相似或相同[10]。


Rust 是一種現代系統程式語言,可用於網頁應用程式和裸機嵌入式系統。 不過Rust的生態和函數庫資源等比較有限,而和C之間的互通性可以讓Rust更方便的應用到現有的軟體中,更快的投入使用。


因此,我們將長期生活在 Rust 和 C 語言的混合環境中。 儘管 Rust 聲稱內存安全(這一點已經得到證實),但是Rust 和 C 程式碼的結合可能會導致安全的 Rust 生成的程式被不安全的 C 實作所違反的情況。 為了確保 Rust 的安全性,有必要在 C 和 Rust 之間找到一個合理的分界點。


儘管如此,事實證明 Rust 是在嵌入式系統中取代 C 和 C++ 的合適候選語言,尤其是在新程式碼開發方面。 除記憶體安全外,Rust 語言的其他方面,如強大的類型系統和錯誤處理,也為 Rust 帶來了卓越的可讀性和可維護性。 這提高了防錯能力,從而在不增加開發階段額外成本的情況下實現更安全的程式碼。

Figure 4. AURIX™ and TRAVEO™ T2G

英飛凌產品支持Embedded Rust

軟體安全對汽車市場至關重要,Rust 程式語言內建記憶體安全軟體開發支持,是設計關鍵任務汽車軟體的重要推動力。 英飛凌科技公司為在嵌入式領域創建 Rust 生態系統邁出了第一步。 首先推出的是市場領先的 AURIX™ TC3xx 和 TRAVEO™ T2G 汽車 MCU。 TRAVEO™ 使用官方 Rust 工具鏈和 Arm Cortex-M 目標編譯器,而英飛凌的工具合作夥伴 HighTec EDV-Systeme 則為 AURIX™ 開發了專用 Rust 編譯器。


AURIX™ TC3xx 和 TRAVEO™ T2G 微控制器產品系列為功能安全和網路安全提供了廣泛的集成硬體功能。 對 Rust 的支持是這些硬體功能在軟體方面的補充。 英飛凌為 AURIX™ 和 TRAVEO™ 提供了外設訪問板條 (PAC),以實現對微控制器外設的本地訪問。


HighTec Rust 編譯器專為AURIX™ TC3xx 和TC4x 微控制器量身定制,利用先進的開源LLVM 技術,為具有安全、可靠、高性能和快速部署要求的應用提供全套Rust 語言特性,包括記憶體安全、併發性和互通性。

總結

在英飛凌的支持下, Rust 在嵌入式系統中的應用將變得更加廣泛,在與 Rust FOSS 社群合作的同時,規範 Rust 在業界的使用。 最後,Rust 的日益普及令人印象深刻,而英飛凌的嵌入式 Rust 生態系統無疑將有助於 Rust 在業界得到更廣泛的應用。 我們將進一步挖掘這一創新語言的潛力,並見證嵌入式 Rust 生態系統的發展。


今後,我們將推出更多部落格文章探討 Rust,分享更多Rust for MCU 的精彩資訊。

REFERENCES

[1]G. Thomas, “A proactive approach to more secure code”, available at https://msrc.microsoft.com/blog/2019/07/a-proactive-approach-to-more-secure-code/, accessed on 26.02.2023 13:38 CST

[2]J. Blessing, M. A. Specter, D. J. Weitzner, “You Really Shouldn't Roll Your Own Crypto: An Empirical Study of Vulnerabilities in Cryptographic Libraries”, arXiv, 2021

[3]Tiago Manczak, “Evaluation of Rust for Embedded Security Systems” Embedded World 2023

[4]https://blog.csdn.net/weixin_50964512/article/details/130138973 accessed on 26.01.2024 14:20 CST.

[5]https://survey.stackoverflow.co/2022/#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages accessed on 26.01.2024 14:20 CST.

[6]https://stevedonovan.github.io/rust-gentle-intro/ accessed on 26.01.2024 14:20 CST.

[7]https://doc.rust-lang.org/book/ch04-00-understanding-ownership.html accessed on 26.01.2024 14:20 CST.

[8]https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html accessed on 28.01.2024 15:20 CST.

[9]https://doc.rust-lang.org/cargo/index.html accessed on 26.01.2024 14:20 CST.

[10]https://xxchang.github.io/book/interoperability/index.html 29.01.2024 15:20 CST.



文章來源:英飛凌汽車電子生態圈

半導體元件詢問單
Inquiry Form
如您對本公司產品有任何的問題(產品報價、技術諮詢、產品文件、樣品索取、合作代理…等),都可以透過諮詢表單跟我們聯絡,我們將有專人回覆。
隱私權暨個人資料保護聲明

STEP

01
!

有標示 欄位為必填,請確實填寫謝謝。

諮詢需求
市場應用

↑若無法選擇適當的產業類別,請直接在此欄輸入您的所屬產業

↑請直接在此欄輸入您的所屬市場應用

諮詢商品

↑若無法搜尋到您要諮詢的品牌,請直接在此欄輸入品牌名稱

↑若無法搜尋到您要諮詢的料號,請直接在此欄輸入料號

備註內容

下一步,聯繫資料填寫

STEP

02
!

有標示 欄位為必填,請確實填寫謝謝。

公司名稱
所屬部門
聯絡人
職稱
聯絡電話
電子信箱
聯絡地址
交貨地址
是否為貿易商
驗證碼
訂閱電子報
Subscribe to Newsletter
!

有標示 * 欄位為必填,請確實填寫謝謝。

公司名稱
所屬部門
姓名
職稱
聯絡電話
選擇電子報語系
電子信箱
驗證碼