主流車載操作系統(tǒng)架構(gòu)

???????????????



1主流車載操作系統(tǒng)架構(gòu)







?????當(dāng)前國內(nèi)主流車載操作系統(tǒng)的架構(gòu)如上所示,左側(cè)是汽車的儀表屏幕,一般是?QNX?系統(tǒng),右側(cè)是汽車的中控、副駕屏幕,操作系統(tǒng)一般是Android。


1.1CAN

控制器局域網(wǎng)(Controller Area Network,簡稱CAN或者CAN bus) 是一種功能豐富的車用總線標(biāo)準(zhǔn)。被設(shè)計用于在不需要主機(jī)(Host)的情況下,允許網(wǎng)絡(luò)上的單片機(jī)和儀器相互通信。 它基于消息傳遞協(xié) 議,設(shè)計之初在車輛上采用復(fù)用通信線纜,以降低銅線使用量,后來也被其他行業(yè)所使用。

CAN 是車載領(lǐng)域很重要的一種通信總線,我們在中控屏上可以隨時查看、設(shè)置車門、發(fā)動機(jī)、后備箱這些模塊,其實(shí)就是借助CAN bus實(shí)現(xiàn)的。










1.2MCU

微控制器單元,它負(fù)責(zé)著汽車很大一部分的功能,例如通過車載控制器對各項(xiàng)數(shù)據(jù)進(jìn)行分析處理,以做出最優(yōu)決策;負(fù)責(zé)對車輛的信息娛樂交互和運(yùn)動控制等等。

總的來說,MCU可以應(yīng)用于車輛的通訊、能源、存儲、感知以及計算,對汽車行業(yè)有著重要的作用。



1.3 SOC

SOC的定義多種多樣,由于其內(nèi)涵豐富、應(yīng)用范圍廣,很難給出準(zhǔn)確定義。一般說來, SOC稱為系統(tǒng)級芯片 ,也有稱片上系統(tǒng)(System on Chip ),意指它是一個產(chǎn)品,是一個有專用目標(biāo)的集成電路,其中包含完整系統(tǒng)并有嵌入軟件的全部內(nèi)容。

車載Soc和常見的手機(jī) Soc 非常類似,內(nèi)部集成了 CPU 和 GPU 。目前最主流的車載 Soc 是高通的 8155 ,它就是高通在手機(jī)Soc 驍龍 855 的基礎(chǔ)上發(fā)展而來的。



1.4 QNX

QNX是商業(yè)類 Unix實(shí)時操作系統(tǒng),主要針對嵌入式系統(tǒng)市場。QNX采取微核心架構(gòu),操作系統(tǒng)中的多數(shù)功能是以許多小型的task來執(zhí)行,它們被稱為server。這樣的架構(gòu)使得用戶和開發(fā)者可以關(guān)閉不需要的功能,而不需要改變操作系統(tǒng)本身。

QNX的應(yīng)用十分廣泛,被廣泛應(yīng)用于汽車、軌道交通、航空航天等對安全性、實(shí)時性要求較高的領(lǐng)域,在汽車領(lǐng)域的市場占有率極高。


1.5 Hypervisor

一種運(yùn)行在基礎(chǔ)物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,可允許多個操作系統(tǒng)和應(yīng)用共享硬件。也可叫做VMM( virtual machine monitor ),即虛擬機(jī)監(jiān)視器。

目前國內(nèi)主流的汽車座艙,都是在一個SOC 上同時運(yùn)行著兩個不同特性的操作系統(tǒng)。對娛樂、應(yīng)用生態(tài)有需求的中控、副駕一般由Android 系統(tǒng)控制,而對穩(wěn)定性、安全性要求較高的儀表盤,則由 QNX 系統(tǒng)直接控制,Android可以看做是一個運(yùn)行在 QNX 上的虛擬系統(tǒng),其底層技術(shù)原理就是Hypervisor。

其實(shí)以上說得這些都是從Android 工程師角度看到的車載操作系統(tǒng),實(shí)際上這只是車載操作系統(tǒng)的冰山 一角,最底層的 Other Hardware 更能代表智能汽車操作系統(tǒng)的核心,它包含高級駕駛輔助系統(tǒng)、泊車 輔助系統(tǒng)、自動駕駛系統(tǒng)、 TCU 、 4G/5G 網(wǎng)關(guān)、中央控制器等等。這些復(fù)雜的硬件與軟件共同組成了一 個智能汽車操作系統(tǒng)。



2 Android Automotive平臺

???2.1?????Android Automotive是通過?Android?的通用框架,語言和?API來實(shí)現(xiàn)的一個全棧,開源,高度可定制的平臺




???????????????????????????。

Service Layer

系統(tǒng)服務(wù)包含在服務(wù)層中,由SystemServer啟動。它們以系統(tǒng)進(jìn)程的形式運(yùn)行,這使它們擁有普通 Android 服務(wù)所不具備的額外權(quán)限。OEM 廠商可以利用這些服務(wù)開發(fā)其他應(yīng)用程序,而不需要編寫重復(fù)的代碼。此外,OEM 也可以將服務(wù)作為一個額外的安全層,以避免應(yīng)用程序和硬件抽象層之間的直接通信。

Vehicle HAL

VHAL的作用是向系統(tǒng)服務(wù)層公開通用的汽車接口,且接口可擴(kuò)展、與特定車輛型號無關(guān)。這些接口包括:

訪問&發(fā)送車輛 ECU 的信號

訪問從車輛ECU到 IVI 操作系統(tǒng)產(chǎn)生的信號

訪問車輛網(wǎng)絡(luò)上的面向服務(wù)的功能(例如SOME-IP)




2.2 ?根目錄結(jié)構(gòu)





├── abi/ ?????????????????????????# 應(yīng)用二進(jìn)制接口定義

├── art/ ?????????????????????????# Android Runtime (ART)

├── bionic/ ??????????????????????# C 運(yùn)行時庫 (libc, libm 等)

├── bootable/ ????????????????????# 啟動相關(guān)代碼

│ ??├── bootloader/ ??????????????# Bootloader 抽象層

│ ??├── recovery/ ????????????????# Recovery 模式代碼

├── build/ ???????????????????????# 構(gòu)建系統(tǒng)核心

│ ??├── blueprint/ ???????????????# Soong 構(gòu)建系統(tǒng)定義

│ ??├── make/ ????????????????????# Makefile 遺留系統(tǒng)

│ ??├── soong/ ???????????????????# Soong 構(gòu)建邏輯

├── cts/ ?????????????????????????# 兼容性測試套件

├── dalvik/ ??????????????????????# Dalvik 虛擬機(jī) (歷史遺留)

├── developers/ ??????????????????# 開發(fā)者工具

├── development/ ?????????????????# 開發(fā)工具和腳本

├── device/ ??????????????????????# 設(shè)備專屬配置

│ ??├── common/ ??????????????????# 通用設(shè)備配置

│ ??├── automotive/ ??????????????# Automotive 設(shè)備配置

│ ??│ ??├── emulator/ ????????????# Automotive 模擬器配置

│ ??│ ??├── <OEM>/ ???????????????# 車廠定制配置 (e.g., gm, ford)

│ ??│ ??│ ??├── sepolicy/ ????????# 設(shè)備 SELinux 策略

│ ??│ ??│ ??├── overlay/ ?????????# 資源覆蓋配置

├── docs/ ????????????????????????# 官方文檔

├── external/ ????????????????????# 第三方開源項(xiàng)目

│ ??├── v8/ ??????????????????????# V8 JavaScript 引擎

│ ??├── openssl/ ?????????????????# OpenSSL 加密庫

│ ??├── automotive/ ??????????????# Automotive 第三方庫

│ ??│ ??├── vehicle_support/ ?????# 車輛網(wǎng)絡(luò)協(xié)議庫 (CAN, LIN)

├── frameworks/ ??????????????????# 核心框架層

│ ??├── base/ ????????????????????# Android 基礎(chǔ)服務(wù)

│ ??├── native/ ??????????????????# Native 層框架

│ ??├── opt/ ?????????????????????# 可選框架

│ ??│ ??├── automotive/ ??????????# Automotive 特有框架

│ ??│ ??│ ??├── vehicle/ ????????# 車輛服務(wù)框架

│ ??│ ??│ ??├── dashboard/ ???????# 數(shù)字儀表盤支持

│ ??├── av/ ??????????????????????# 多媒體框架

│ ??├── auto/ ????????????????????# Automotive 核心服務(wù) (Android 10+)

├── hardware/ ????????????????????# 硬件抽象層 (HAL)

│ ??├── interfaces/ ??????????????# HAL 接口定義

│ ??│ ??├── automotive/ ?????????# Automotive HAL

│ ??│ ??│ ??├── vehicle/ ????????# 車輛 HAL (VHAL)

│ ??│ ??│ ??├── can/ ????????????# CAN 總線 HAL

│ ??│ ??│ ??├── display/ ????????# 多屏顯示 HAL

│ ??├── libhardware/ ?????????????# HAL 核心庫

│ ??├── libhardware_legacy/ ??????# 遺留 HAL

├── packages/ ????????????????????# 系統(tǒng)應(yīng)用和服務(wù)

│ ??├── apps/ ????????????????????# 預(yù)裝應(yīng)用

│ ??│ ??├── Car/ ?????????????????# Automotive 核心應(yīng)用

│ ??│ ??│ ??├── Launcher/ ???????# 車載啟動器

│ ??│ ??│ ??├── Settings/ ???????# 車載設(shè)置

│ ??│ ??│ ??├── Radio/ ??????????# 車載收音機(jī)

│ ??├── services/ ????????????????# 后臺服務(wù)

│ ??│ ??├── Car/ ????????????????# Automotive 服務(wù)

│ ??│ ??│ ??├── Service/ ????????# CarService 主服務(wù)

│ ??│ ??│ ??├── Projection/ ?????# 手機(jī)投影服務(wù) (Android Auto/CarPlay)

├── system/ ??????????????????????# 底層系統(tǒng)組件

│ ??├── core/ ????????????????????# init、adb 等核心工具

│ ??├── extras/ ??????????????????# 附加工具

│ ??├── vold/ ????????????????????# 卷管理守護(hù)進(jìn)程

│ ??├── automotive/ ??????????????# Automotive 系統(tǒng)擴(kuò)展

│ ??│ ??├── power/ ??????????????# 車輛電源管理

│ ??│ ??├── thermal/ ????????????# 車載熱管理

├── test/ ????????????????????????# 測試框架

├── toolchain/ ???????????????????# 工具鏈配置

├── tools/ ???????????????????????# 開發(fā)工具

├── vendor/ ??????????????????????# 供應(yīng)商定制代碼

│ ??├── automotive/ ??????????????# Automotive 供應(yīng)商擴(kuò)展

│ ??│ ??├── <Tier1>/ ????????????# Tier1 供應(yīng)商代碼 (e.g., Bosch, Continental)

│ ??│ ??│ ??├── hal/ ????????????# 定制 HAL 實(shí)現(xiàn)

│ ??│ ??│ ??├── firmware/ ???????# 車載固件鏡像

├── prebuilts/ ???????????????????# 預(yù)編譯二進(jìn)制文件

├── out/ ?????????????????????????# 編譯輸出目錄



3?以Carservice 為例

?

?

3.1類圖

?







3.2?啟動流程以及App使用




















1 ?CarService是車載Android系統(tǒng)的核心服務(wù)之一,所有應(yīng)用都需要通過CarService來查詢、控制整車的狀態(tài)。不僅僅是車輛控制,實(shí)際上CarService幾乎就是整個車載Framework最核心的組件。提供了一系列的服務(wù)與HAL層的VehicleHAL通信,進(jìn)而通過車載總線(例如CAN總線)與車身進(jìn)行通訊,同時它們還為應(yīng)用層的APP提供接口,從而讓APP能夠?qū)崿F(xiàn)對車身的控制與狀態(tài)的顯示。

2 CarServiceHelperService啟動SystemServer進(jìn)程啟動后會調(diào)用main()->run()->startOtherService()方法,通過判斷當(dāng)前系統(tǒng)是否是車載分支的版本(hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)),是則創(chuàng)建CarServiceHelperService。


3 CarServiceHelperService 執(zhí)行 onStart() 的時候,會將后續(xù)的工作交給?CarserviceHelperServiceUpdatableImpl來處理。其onStart() 里調(diào)用binderService()?綁定 action 為?“android.car.ICar”?、package 為?“com.android.car”?的 Service,即構(gòu)成章節(jié)里提到的?CarService組件。


4 ?Carservice的實(shí)現(xiàn)都在父類CarserviceProxy中,比如首先被調(diào)用的onCreate(),內(nèi)部將先調(diào)用 init()。init() 將構(gòu)建mRealServiceClassName?的實(shí)例,而 mRealServiceClassName 變量來自于?UpdatablePackageDependency.java?中定義的?CAR_SERVICE_IMPL_CLASS?常量即?“com.android.car.CarServiceImpl”?。init() 之后是執(zhí)行創(chuàng)建出來的 CarServiceImpl 實(shí)例的 onCreate(),可以看到是繼續(xù)創(chuàng)建關(guān)鍵類?ICarImpl的實(shí)例并再次執(zhí)行init()。

5 ICarImpl 的初始化將完成很多 vehicle 相關(guān)的重要工作.遍歷ICarImpl 實(shí)例構(gòu)造時候創(chuàng)建的各個擴(kuò)展自 CarServiceBase 的實(shí)例,逐個調(diào)用 init() 初始化.

6例如CarPropertyService 傳遞輸入相關(guān)的監(jiān)聽器Listener,PropertyHalService 將 CarPropertyService 作為 Callback 暫存,等待來自 HAL 的 Vehicle Property 變化回調(diào)。

7 對于其他App 來說,想要使用 Car API,通過連接carservice然后getCarManager獲取CarPropertyManager來讀寫車輛屬性。參數(shù)propId?來自于 VehiclePropertyIds 類中定義的屬性 ID

8VehicleHal的回調(diào)通過 onPropertySetError和onPropertyEvent來反饋給PropertyHalService,PropertyHalService通過onPropertySetError和onPropertyEvent方法給CarPropertyService,CarPropertyService通過onEvent給CarPropertyManager,CarPropertyManager通過EventType轉(zhuǎn)換給app 為onErrorEvent和onChangeEvent方法。


9通過 Car mCar= Car.createCar(mContext,mServiceConnection) 創(chuàng)建 mCar,mCar.connect。

在連接上CarService之后,在mServiceConnection會做回調(diào)。







注冊registerCallback該信號在onChangeEvent 和 ?onErrorEvent來監(jiān)聽信號的反饋。



3.3 數(shù)據(jù)流圖

?




?

?

數(shù)據(jù)流說明

?1. 系統(tǒng)啟動流程

SystemServer → CarServiceHelperService → CarServiceProxy → CarServiceImpl → ICarImpl

?↓ ?????

ICarImpl初始化 → 創(chuàng)建PropertyHalService和CarPropertyService




?

?

2. 屬性讀寫流

應(yīng)用層(App) → CarPropertyManager → CarPropertyService → PropertyHalService → VehicleHal → ECU硬件

↓ ?

ECU傳感器數(shù)據(jù) → VehicleHal → PropertyHalService → CarPropertyService → CarPropertyManager → App



3. 事件回調(diào)流

ECU硬件中斷 → VehicleHal → PropertyHalService → CarPropertyService → CarPropertyManager → App ?????

↓ ?

錯誤事件路徑:VehicleHal.onPropertySetError() → 同上





4. 元數(shù)據(jù)依賴

VehiclePropertyIds數(shù)據(jù)庫 → 所有層級 ?????

↓ ?

屬性ID校驗(yàn)、協(xié)議轉(zhuǎn)換、參數(shù)合法性檢查














?

?

?

3.4 用例圖




正向通道:乘客通過發(fā)送乘客請求用例將操作指令(如座椅加熱級別)發(fā)送至CAN總線

反向通道:CAN總線通過接收車輛反饋用例將執(zhí)行結(jié)果(成功/失敗)或傳感器數(shù)據(jù)(當(dāng)前溫度)返回給乘客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容