本系列學習筆記基於 AUTOSAR Adaptive Platform 官方文檔 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf。作者:Zijian/TENG
原文地址(獲取最新更新):https://www.cnblogs.com/tengzijian/p/15171199.html
縮寫
- NvM:Non-volatile Memory
- CM:Communication Management
- DCM:Diagnostic Communication Mannger
- EM:Execution Management
- URI:Uniform Resource Identifier
10 持久化 Persistency
10.1 概覽
Persistency 為應用和 FC 提供了將信息儲存到非易失性存儲(NvM)的機制。經啟動和點火循環不會導致數據丟失。Persistency 提供了訪問 NvM 的標准接口。
應用將存儲位置標識符作為參數,傳給 Persistency API,來決定不同的存儲位置。存儲位置可以歸為兩類:
- 鍵值存儲
- 文件存儲
應用可以任意組合使用上述存儲類型。
持久化數據是進程私有的。不能通過 Persistency 在不同進程之間共享數據,這是為了阻止通信管理(CM)之外的通信途徑。
Persistency 做好了處理(同一進程)多線程的並發訪問的准備。若要共享鍵值存儲或文件存儲,或通過向另一個線程傳遞(拷貝)OpenKeyValueStorage/OpenFileStorage
返回的 SharedHandle
;或不同的線程對同一個鍵值存儲或文件存儲各自調用 OpenKeyValueStorage/OpenFileStorage
。
Persistency 可以保證存儲數據的完整性,通過冗余數據檢驗數據是否損壞。冗余數據包括 CRC 碼、Hash 值、以及 “M/N”模式。這些機制可以一起或單獨使用。
Persistency 提供安全存儲。主要是通過冗余實現,但是提供了額外的特性,讓應用可以得知存儲的數據是否出現問題(即使可以通過冗余數據恢復)。
Persistency 向應用提使用資源數量的供統計信息。
Persistency 可以為數據提供加密存儲,確保敏感數據存儲到物理設備前進行加密。
10.2 鍵值存儲
鍵值存儲提供了從單一存儲位置存取多個鍵值對的機制。鍵值存儲支持以下三種數據類型:
- SWS_AdaptivePlatformTypes 中定義的數據類型
- 簡單字節數組:復雜類型的流
- 應用設計中 “PersistencyKeyValueDatabaseInterface”(或該接口特化的 PersistencyDataElements)通過 “dataTypeForSerialization” 引用的所有 Implementation Data Types
每個鍵值數據庫的鍵必須唯一,且通過 Persistency 提供的接口定義。
基於定義在 Application Design 中、應用/平台特定的 AUTOSAR 數據類型序列化代碼,計划增加對序列化/存儲的支持。
10.3 文件存儲
不是所有的數據都適合用鍵值數據庫形式存儲。針對這些數據,引入了文件存儲。File Storage Port 允許應用訪問一個存儲位置,並在其中建立一個或多個存取器(Accessors)。這些存取器通過字符串形式的 Unique Key 識別。
為了更好的理解,可以類比文件系統:一個 File Storage Port 可以理解為文件系統的目錄,應用可以在里面創建多個文件(存取器 Accessors)。
10.4 UCM 持久數據處理用例
處理 UCM 用例的持久化數據/文件完全取決於持久化配置。
在 ECU 或 Adaptive Machine 生命周期內,UCM 支持處理自適應應用的以下三個主要使用場景:
- 在 Adaptive Machine 中安裝新的應用軟件
- 在 Adaptive Machine 中升級已有應用軟件
- 從 Adaptive Machine 中卸載已有應用軟件
在前兩個場景中,UCM 通過執行管理(EM)觸發 Persistency 使用持久化配置中的 URI 部署/升級應用的持久化數據。在第三個使用場景中,UCM 可以使用持久化配置中的 URI 移除殘留的持久化數據。
Persistency 需要支持下列場景:
- 在自適應應用(AA)安裝時,根據應用設計中的定義,將持久化數據部署到鍵值數據庫或文件存儲。
- 將持久化數據,按照集成者的修改,部署到鍵值數據庫或文件存儲。
- 根據集成者的定義,將持久化數據部署到鍵值數據庫或文件存儲。
- 當安裝新版應用時,根據配置的升級策略,覆蓋或保留已有的持久化數據。
一般 Persistency 層在應用設計和部署階段配置。Persistency 部署階段的配置可以覆蓋應用設計階段的配置。如果沒有部署階段的配置,則使用應用設計中的配置。