本文主要討論在 AUTOSAR 系統中如何將 BSW 模塊分配到不同的分區(Partition)和內核。主要解決了以下問題:
- 如何修改 BSW 模塊以支持多核并行執行
- 如何配置將 BSW 模塊分配到不同分區
- MCAL(微控制器抽象層)模塊的多核支持方式
- 通信棧(Com-Stack)的分配方案
- 加密服務(Crypto-Stack)的分配方案
- 在安全關鍵系統中進行 BSW 分配的方式
相比單核系統,多核 BSW 分配需要解決的主要問題是:
- 并行執行帶來的數據一致性問題
- 跨分區調用的內存訪問權限問題
- 如何分配核心的硬件資源訪問權
- 啟動/關閉時對安全性的影響
- 由分區引入的新的錯誤場景
AUTOSAR 提供了一系列機制來解決這些問題,支持高效、安全的 BSW 多核分配。
BSW 在多核系統中的分配
支持的分配場景
AUTOSAR 支持將 BSW 功能相關的模塊分配到不同的分區,這既可以提升性能,也可以增強安全性。每種功能集群包含一組相關的 BSW 模塊,可以包含通信、存儲、IO、看門狗等等。同一類型的功能集群可以存在于多個分區中。
為支持分區分配,BSW 模塊實體分為主模塊和從模塊,可以分配到不同分區中,主模塊與從模塊通過非標準化的 AUTOSAR 接口進行跨分區通信。
AUTOSAR 支持下列分配場景:
將 BSW 功能集群分配到一個分區,提高性能
將 BSW 功能集群的子集分配到多個分區,提高并發性
可以將主從模塊實體分配到多個分區
性能優化場景
通過將 BSW 模塊分配到多個分區和內核,可以提升系統性能,減少資源占用。主要的性能優化場景包括:
將通信相關的模塊集群分配到一個內核,將 I/O 相關的模塊集群分配到另一個內核。
如果硬件資源只能被一個內核訪問,則將對應的 BSW 用戶、服務和驅動都部署在該內核上可以提高性能。
實現多個通信集群之間的信號網關功能,需要在不同內核上同步不同的通信模塊。
技術實現概覽
AUTOSAR 定義了一些新概念,并擴展了部分模塊,來支持多核BSW分配:
BSW 功能集群:一組功能相關的 BSW 模塊,包含通信、存儲、IO、看門狗等模塊組。
分區間通信:使用調度器(SchM)提供的函數實現跨分區調用。
服務執行定位:通過事件到任務的映射來確定服務執行的分區。
主從模塊:將模塊拆分為主模塊和從模塊,分配到不同分區并通過非標準化接口通信,如下圖所示:
要點是,模塊之間的接口保持不變,分區分配引起的變化主要內藏在模塊內部。
BSW 模塊的并行執行
為支持多核并行執行,BSW 模塊需要實現以下機制:
基于核 ID 進行執行代碼,實現定制的核相關行為。
使用主從模塊設計模式,主模塊負責協調從模塊。
使用 SchM 提供的跨分區函數實現模塊間通信。
在無內存保護的系統中,允許直接跨分區調用,但需要用互斥區保護共享數據。
每個分區使用本地的驅動訪問硬件資源
BSW 分區配置
為管理分區中的 BSW 模塊,需要進行如下配置:
為每個 BSW 分區配置一個 OsApplication。
在 EcuC 中配置分區以及模塊到分區的映射。
為每個 BSW 分區單獨配置 BswM。
每個內核一個 EcuM 實例。
跨分區調用處理
當 BSW 模塊分配到不同分區后,最重要的問題是如何處理跨分區調用。主要的處理手段包括:
使用激活 Task 或設置 Event 的方式,轉至被調用分區執行實際調用。
調用方使用 CallTrustedFunction 進入被調用分區。
若被調用函數不訪問本地數據,則可直接調用。
參數在分區間傳遞需要使用復制或特殊硬件機制來保證無干擾。
啟動、關閉和睡眠/喚醒處理
在啟動階段,內存保護是未啟用的,此時需要注意避免重要數據被覆蓋。
在關閉階段,內存保護已經啟用,可以檢測問題。
睡眠和喚醒處理也需要考慮安全需求。
錯誤處理
引入分區后,一些新的錯誤場景需要檢測和處理:
分區內代碼引發的內存錯誤。
分區內代碼執行超時引起的定時錯誤。
嘗試訪問沒有權限的硬件資源。
可以配置分區延遲上報的時間,避免過早引發系統重啟。
MCAL及協議棧分配
MCAL 模塊的多核支持
AUTOSAR 定義了 5 種多核支持類型,用于指明 MCAL 模塊的多核處理方式:
Type I:MCAL 模塊僅在單核上可用,不可全局使用,如 FLS、FEE 模塊
Type II:MCAL 模塊可按核執行,作用于獨立的硬件元素,如 CAN、FlexRay等
Type III:可作用于全局可用的硬件元素,如 Dio Driver
Type IV:可在任何核上使用模塊的接口,但僅通過一個核來訪問映射元素,如 ADC、PWM、ICU 和 OCU
Type V:可在任何核上使用模塊的接口,通過相應的核單獨訪問可映射元素
不同類型采用不同的資源分離策略,例如硬件級分離或軟件級互斥保護。
各類 MCAL 模塊可以分配為上述 5 種類型中的一種,以指明其多核支持方式。配合多核類型,開發者需要定義可映射的硬件元素,以及元素到內核的映射關系,作為多核支持的基礎。
通信協議棧分配
通信棧(Com-Stack)可以分配到不同的分區中,以提高負載分配效率。分配方式包括:
根據網絡類型,將 I-PDU 分配到不同的 MainFunction 中。
PduR 負責處理不同網絡之間的分區通信。
狀態、模式和網絡管理由 ComM和Nm 集中處理。
加密服務分配
加密服務棧(Crypto-Stack)也可以分配到不同分區中,每個分區部署一個 MainFunction。Csm 模塊與 SecOC 模塊需要分配到同一分區,避免分區切換開銷。
為處理新鮮度值,可以采用如下手段:
保留一個跨分區的新鮮度管理 SWC
每個分區一個新鮮度 SWC
使用 SecOC 的可配置 C 語言 API
安全關鍵系統中的 BSW 分配
概述
AUTOSAR 支持通過分區隔離來構建安全關鍵系統。最高 ASIL 級別的 BSW 模塊被放入專用分區,低 ASIL 級別的模塊放入公共分區,從而最小化軟件開發的代碼量。
AUTOSAR 安全分配的主要機制包括:
使用多個分區,進行空間隔離。
對執行實體進行監控,防止阻塞或順序錯誤。
端到端保護,避免通信數據被修改。
特定模塊提供額外的安全機制。
跨分區調用
分區調用需要檢查是否符合 Safety 要求。可以使用 Stub 函數封裝被調用的功能,處理分區切換問題。
具體來說,分區調用可以有如下情況:
QM 調用 ASIL:使用 Stub 函數進入 ASIL 分區,如下圖所示。
ASIL 調用 QM:使用包裝函數進入QM 分區,如下圖所示。
ASIL 調用 ASIL:類似地需要 Stub 函數或包裝函數。
參數傳遞需要使用復制或特殊硬件機制來保證安全。
啟動/關閉和睡眠/喚醒
啟動階段需要注意數據隔離。
關閉時可以檢測隔離問題。
睡眠/喚醒處理也需要考慮安全需求。
錯誤處理
分區調用可能產生新的錯誤場景,需要檢測內存溢出、超時等問題。
可以配置分區的 Timing 保護,避免過早重啟。
性能考量
分區隔離會增加調用開銷。可以通過減少分區數量、優化模塊映射和 calls 來獲得最佳平衡。
未來的 AUTOSAR 版本
未來 AUTOSAR 可能進行如下改進:
標準化 BSW 功能集群及其接口,如下圖所示。
支持更高效的分區間調用
支持用例分區提升安全性
等等
注意事項
BSW模塊設計
對共享數據的訪問需要加互斥保護
調用其他模塊接口前需獲取分區 ID,根據 ID 區分主從代碼
主模塊負責協調從模塊,可監控和過濾請求
主從模塊間使用非標準化接口通信
多核場景下接口需要支持異步調用
BSW配置
每個 BSW 分區需配置一個 OS 應用程序
需要配置 BSW 模塊到分區的映射
需要配置每個分區的 BswM 實例
需要配置核心的 EcuM 實例
需要配置分區的 BSW 啟動/關閉順序
跨分區調用
使用激活任務或事件切換調用上下文
調用方使用 CallTrustedFunction 進入被調方分區
檢查直接調用是否安全
小心處理參數傳遞的內存訪問權限
安全系統相關
啟動階段內存保護尚未啟動,需謹慎操作
最小化啟動前執行的代碼量
安全相關機制只在必要分區上實現
檢查分區調用是否被符合 Safety 要求
準確配置調用的 Stub 函數或包裝函數
謹慎處理睡眠喚醒的安全需求
檢測由分區引入的新錯誤場景
平衡分區數量和性能
-
微控制器
+關注
關注
48文章
7572瀏覽量
151648 -
看門狗
+關注
關注
10文章
565瀏覽量
70863 -
AUTOSAR
+關注
關注
10文章
363瀏覽量
21627 -
BSW
+關注
關注
0文章
15瀏覽量
3520 -
調度器
+關注
關注
0文章
98瀏覽量
5261
發布評論請先 登錄
相關推薦
評論