本文主要討論在 AUTOSAR 系統(tǒng)中如何將 BSW 模塊分配到不同的分區(qū)(Partition)和內(nèi)核。主要解決了以下問(wèn)題:
- 如何修改 BSW 模塊以支持多核并行執(zhí)行
- 如何配置將 BSW 模塊分配到不同分區(qū)
- MCAL(微控制器抽象層)模塊的多核支持方式
- 通信棧(Com-Stack)的分配方案
- 加密服務(wù)(Crypto-Stack)的分配方案
- 在安全關(guān)鍵系統(tǒng)中進(jìn)行 BSW 分配的方式
相比單核系統(tǒng),多核 BSW 分配需要解決的主要問(wèn)題是:
- 并行執(zhí)行帶來(lái)的數(shù)據(jù)一致性問(wèn)題
- 跨分區(qū)調(diào)用的內(nèi)存訪問(wèn)權(quán)限問(wèn)題
- 如何分配核心的硬件資源訪問(wèn)權(quán)
- 啟動(dòng)/關(guān)閉時(shí)對(duì)安全性的影響
- 由分區(qū)引入的新的錯(cuò)誤場(chǎng)景
AUTOSAR 提供了一系列機(jī)制來(lái)解決這些問(wèn)題,支持高效、安全的 BSW 多核分配。
BSW 在多核系統(tǒng)中的分配
支持的分配場(chǎng)景
AUTOSAR 支持將 BSW 功能相關(guān)的模塊分配到不同的分區(qū),這既可以提升性能,也可以增強(qiáng)安全性。每種功能集群包含一組相關(guān)的 BSW 模塊,可以包含通信、存儲(chǔ)、IO、看門狗等等。同一類型的功能集群可以存在于多個(gè)分區(qū)中。
為支持分區(qū)分配,BSW 模塊實(shí)體分為主模塊和從模塊,可以分配到不同分區(qū)中,主模塊與從模塊通過(guò)非標(biāo)準(zhǔn)化的 AUTOSAR 接口進(jìn)行跨分區(qū)通信。
AUTOSAR 支持下列分配場(chǎng)景:
將 BSW 功能集群分配到一個(gè)分區(qū),提高性能
將 BSW 功能集群的子集分配到多個(gè)分區(qū),提高并發(fā)性
可以將主從模塊實(shí)體分配到多個(gè)分區(qū)
性能優(yōu)化場(chǎng)景
通過(guò)將 BSW 模塊分配到多個(gè)分區(qū)和內(nèi)核,可以提升系統(tǒng)性能,減少資源占用。主要的性能優(yōu)化場(chǎng)景包括:
將通信相關(guān)的模塊集群分配到一個(gè)內(nèi)核,將 I/O 相關(guān)的模塊集群分配到另一個(gè)內(nèi)核。
如果硬件資源只能被一個(gè)內(nèi)核訪問(wèn),則將對(duì)應(yīng)的 BSW 用戶、服務(wù)和驅(qū)動(dòng)都部署在該內(nèi)核上可以提高性能。
實(shí)現(xiàn)多個(gè)通信集群之間的信號(hào)網(wǎng)關(guān)功能,需要在不同內(nèi)核上同步不同的通信模塊。
技術(shù)實(shí)現(xiàn)概覽
AUTOSAR 定義了一些新概念,并擴(kuò)展了部分模塊,來(lái)支持多核BSW分配:
BSW 功能集群:一組功能相關(guān)的 BSW 模塊,包含通信、存儲(chǔ)、IO、看門狗等模塊組。
分區(qū)間通信:使用調(diào)度器(SchM)提供的函數(shù)實(shí)現(xiàn)跨分區(qū)調(diào)用。
服務(wù)執(zhí)行定位:通過(guò)事件到任務(wù)的映射來(lái)確定服務(wù)執(zhí)行的分區(qū)。
主從模塊:將模塊拆分為主模塊和從模塊,分配到不同分區(qū)并通過(guò)非標(biāo)準(zhǔn)化接口通信,如下圖所示:

要點(diǎn)是,模塊之間的接口保持不變,分區(qū)分配引起的變化主要內(nèi)藏在模塊內(nèi)部。
BSW 模塊的并行執(zhí)行
為支持多核并行執(zhí)行,BSW 模塊需要實(shí)現(xiàn)以下機(jī)制:
基于核 ID 進(jìn)行執(zhí)行代碼,實(shí)現(xiàn)定制的核相關(guān)行為。
使用主從模塊設(shè)計(jì)模式,主模塊負(fù)責(zé)協(xié)調(diào)從模塊。
使用 SchM 提供的跨分區(qū)函數(shù)實(shí)現(xiàn)模塊間通信。
在無(wú)內(nèi)存保護(hù)的系統(tǒng)中,允許直接跨分區(qū)調(diào)用,但需要用互斥區(qū)保護(hù)共享數(shù)據(jù)。
每個(gè)分區(qū)使用本地的驅(qū)動(dòng)訪問(wèn)硬件資源
BSW 分區(qū)配置
為管理分區(qū)中的 BSW 模塊,需要進(jìn)行如下配置:
為每個(gè) BSW 分區(qū)配置一個(gè) OsApplication。
在 EcuC 中配置分區(qū)以及模塊到分區(qū)的映射。
為每個(gè) BSW 分區(qū)單獨(dú)配置 BswM。
每個(gè)內(nèi)核一個(gè) EcuM 實(shí)例。
跨分區(qū)調(diào)用處理
當(dāng) BSW 模塊分配到不同分區(qū)后,最重要的問(wèn)題是如何處理跨分區(qū)調(diào)用。主要的處理手段包括:
使用激活 Task 或設(shè)置 Event 的方式,轉(zhuǎn)至被調(diào)用分區(qū)執(zhí)行實(shí)際調(diào)用。
調(diào)用方使用 CallTrustedFunction 進(jìn)入被調(diào)用分區(qū)。
若被調(diào)用函數(shù)不訪問(wèn)本地?cái)?shù)據(jù),則可直接調(diào)用。
參數(shù)在分區(qū)間傳遞需要使用復(fù)制或特殊硬件機(jī)制來(lái)保證無(wú)干擾。
啟動(dòng)、關(guān)閉和睡眠/喚醒處理
在啟動(dòng)階段,內(nèi)存保護(hù)是未啟用的,此時(shí)需要注意避免重要數(shù)據(jù)被覆蓋。
在關(guān)閉階段,內(nèi)存保護(hù)已經(jīng)啟用,可以檢測(cè)問(wèn)題。
睡眠和喚醒處理也需要考慮安全需求。
錯(cuò)誤處理
引入分區(qū)后,一些新的錯(cuò)誤場(chǎng)景需要檢測(cè)和處理:
分區(qū)內(nèi)代碼引發(fā)的內(nèi)存錯(cuò)誤。
分區(qū)內(nèi)代碼執(zhí)行超時(shí)引起的定時(shí)錯(cuò)誤。
嘗試訪問(wèn)沒(méi)有權(quán)限的硬件資源。
可以配置分區(qū)延遲上報(bào)的時(shí)間,避免過(guò)早引發(fā)系統(tǒng)重啟。
MCAL及協(xié)議棧分配
MCAL 模塊的多核支持
AUTOSAR 定義了 5 種多核支持類型,用于指明 MCAL 模塊的多核處理方式:
Type I:MCAL 模塊僅在單核上可用,不可全局使用,如 FLS、FEE 模塊
Type II:MCAL 模塊可按核執(zhí)行,作用于獨(dú)立的硬件元素,如 CAN、FlexRay等
Type III:可作用于全局可用的硬件元素,如 Dio Driver
Type IV:可在任何核上使用模塊的接口,但僅通過(guò)一個(gè)核來(lái)訪問(wèn)映射元素,如 ADC、PWM、ICU 和 OCU
Type V:可在任何核上使用模塊的接口,通過(guò)相應(yīng)的核單獨(dú)訪問(wèn)可映射元素
不同類型采用不同的資源分離策略,例如硬件級(jí)分離或軟件級(jí)互斥保護(hù)。
各類 MCAL 模塊可以分配為上述 5 種類型中的一種,以指明其多核支持方式。配合多核類型,開(kāi)發(fā)者需要定義可映射的硬件元素,以及元素到內(nèi)核的映射關(guān)系,作為多核支持的基礎(chǔ)。
通信協(xié)議棧分配
通信棧(Com-Stack)可以分配到不同的分區(qū)中,以提高負(fù)載分配效率。分配方式包括:
根據(jù)網(wǎng)絡(luò)類型,將 I-PDU 分配到不同的 MainFunction 中。
PduR 負(fù)責(zé)處理不同網(wǎng)絡(luò)之間的分區(qū)通信。
狀態(tài)、模式和網(wǎng)絡(luò)管理由 ComM和Nm 集中處理。
加密服務(wù)分配
加密服務(wù)棧(Crypto-Stack)也可以分配到不同分區(qū)中,每個(gè)分區(qū)部署一個(gè) MainFunction。Csm 模塊與 SecOC 模塊需要分配到同一分區(qū),避免分區(qū)切換開(kāi)銷。
為處理新鮮度值,可以采用如下手段:
保留一個(gè)跨分區(qū)的新鮮度管理 SWC
每個(gè)分區(qū)一個(gè)新鮮度 SWC
使用 SecOC 的可配置 C 語(yǔ)言 API
安全關(guān)鍵系統(tǒng)中的 BSW 分配
概述
AUTOSAR 支持通過(guò)分區(qū)隔離來(lái)構(gòu)建安全關(guān)鍵系統(tǒng)。最高 ASIL 級(jí)別的 BSW 模塊被放入專用分區(qū),低 ASIL 級(jí)別的模塊放入公共分區(qū),從而最小化軟件開(kāi)發(fā)的代碼量。
AUTOSAR 安全分配的主要機(jī)制包括:
使用多個(gè)分區(qū),進(jìn)行空間隔離。
對(duì)執(zhí)行實(shí)體進(jìn)行監(jiān)控,防止阻塞或順序錯(cuò)誤。
端到端保護(hù),避免通信數(shù)據(jù)被修改。
特定模塊提供額外的安全機(jī)制。
跨分區(qū)調(diào)用
分區(qū)調(diào)用需要檢查是否符合 Safety 要求。可以使用 Stub 函數(shù)封裝被調(diào)用的功能,處理分區(qū)切換問(wèn)題。
具體來(lái)說(shuō),分區(qū)調(diào)用可以有如下情況:
QM 調(diào)用 ASIL:使用 Stub 函數(shù)進(jìn)入 ASIL 分區(qū),如下圖所示。

ASIL 調(diào)用 QM:使用包裝函數(shù)進(jìn)入QM 分區(qū),如下圖所示。

ASIL 調(diào)用 ASIL:類似地需要 Stub 函數(shù)或包裝函數(shù)。
參數(shù)傳遞需要使用復(fù)制或特殊硬件機(jī)制來(lái)保證安全。
啟動(dòng)/關(guān)閉和睡眠/喚醒
啟動(dòng)階段需要注意數(shù)據(jù)隔離。
關(guān)閉時(shí)可以檢測(cè)隔離問(wèn)題。
睡眠/喚醒處理也需要考慮安全需求。
錯(cuò)誤處理
分區(qū)調(diào)用可能產(chǎn)生新的錯(cuò)誤場(chǎng)景,需要檢測(cè)內(nèi)存溢出、超時(shí)等問(wèn)題。
可以配置分區(qū)的 Timing 保護(hù),避免過(guò)早重啟。
性能考量
分區(qū)隔離會(huì)增加調(diào)用開(kāi)銷??梢酝ㄟ^(guò)減少分區(qū)數(shù)量、優(yōu)化模塊映射和 calls 來(lái)獲得最佳平衡。
未來(lái)的 AUTOSAR 版本
未來(lái) AUTOSAR 可能進(jìn)行如下改進(jìn):
標(biāo)準(zhǔn)化 BSW 功能集群及其接口,如下圖所示。

支持更高效的分區(qū)間調(diào)用
支持用例分區(qū)提升安全性
等等
注意事項(xiàng)
BSW模塊設(shè)計(jì)
對(duì)共享數(shù)據(jù)的訪問(wèn)需要加互斥保護(hù)
調(diào)用其他模塊接口前需獲取分區(qū) ID,根據(jù) ID 區(qū)分主從代碼
主模塊負(fù)責(zé)協(xié)調(diào)從模塊,可監(jiān)控和過(guò)濾請(qǐng)求
主從模塊間使用非標(biāo)準(zhǔn)化接口通信
多核場(chǎng)景下接口需要支持異步調(diào)用
BSW配置
每個(gè) BSW 分區(qū)需配置一個(gè) OS 應(yīng)用程序
需要配置 BSW 模塊到分區(qū)的映射
需要配置每個(gè)分區(qū)的 BswM 實(shí)例
需要配置核心的 EcuM 實(shí)例
需要配置分區(qū)的 BSW 啟動(dòng)/關(guān)閉順序
跨分區(qū)調(diào)用
使用激活任務(wù)或事件切換調(diào)用上下文
調(diào)用方使用 CallTrustedFunction 進(jìn)入被調(diào)方分區(qū)
檢查直接調(diào)用是否安全
小心處理參數(shù)傳遞的內(nèi)存訪問(wèn)權(quán)限
安全系統(tǒng)相關(guān)
啟動(dòng)階段內(nèi)存保護(hù)尚未啟動(dòng),需謹(jǐn)慎操作
最小化啟動(dòng)前執(zhí)行的代碼量
安全相關(guān)機(jī)制只在必要分區(qū)上實(shí)現(xiàn)
檢查分區(qū)調(diào)用是否被符合 Safety 要求
準(zhǔn)確配置調(diào)用的 Stub 函數(shù)或包裝函數(shù)
謹(jǐn)慎處理睡眠喚醒的安全需求
檢測(cè)由分區(qū)引入的新錯(cuò)誤場(chǎng)景
平衡分區(qū)數(shù)量和性能
-
微控制器
+關(guān)注
關(guān)注
48文章
8244瀏覽量
162097 -
看門狗
+關(guān)注
關(guān)注
10文章
607瀏覽量
72548 -
AUTOSAR
+關(guān)注
關(guān)注
10文章
389瀏覽量
23497 -
BSW
+關(guān)注
關(guān)注
0文章
15瀏覽量
3646 -
調(diào)度器
+關(guān)注
關(guān)注
0文章
99瀏覽量
5632
發(fā)布評(píng)論請(qǐng)先 登錄
Linux內(nèi)核是在何時(shí)如何將寫入的數(shù)據(jù)回寫到磁盤
STM32H743如何讓malloc自動(dòng)分配到外部RAM中呢?
如何將分區(qū)劃分為可讀分區(qū)?
為什么使用AUTOSAR呢
AUTOSAR基礎(chǔ)軟件層是由哪些部分組成的
介紹一種適配RT-Thread內(nèi)核的autosar操作系統(tǒng)
基于RT-Thread內(nèi)核的AUTOSAR在n32g上的實(shí)現(xiàn)方案
AUTOSAR功能安全機(jī)制之內(nèi)存分區(qū)與實(shí)現(xiàn)
如何將IP模塊整合到System Generator for DSP中
通過(guò)擴(kuò)頻調(diào)頻技術(shù)如何將頻譜能量分配到頻譜中
關(guān)于AUTOSAR-DEM模塊的簡(jiǎn)要介紹和幾點(diǎn)思考
AUTOSAR BSW層介紹
AUTOSAR經(jīng)典平臺(tái)介紹

在AUTOSAR系統(tǒng)中如何將BSW模塊分配到不同的分區(qū)和內(nèi)核呢?
評(píng)論