【關鍵詞】以太網;面向服務的架構;SOME/IP;Android
中圖分類號:U463.6 文獻標識碼:A文章編號:1003-8639(2025)08-0099-05
【Abstract】With the continuous development ofnew automotive technologies,electronicand electrical systemsare becoming increasinglycomplex,andadvanced technologiessuchas Ethernet,SOA,AUTOSAR havebecomeanimportant directionof development.Inordertomeet thescalabilityand Ethernetcompatibility,the AUTOSARConsortium has proposed SOME/IP protocol.Thispaperdescribes the integration ofSOME/IPprotocol inthevehicle Android systemin detail,byintroducingvsomeipandotherthird-partylibraries,using JNItoachieveSOME/IPaplicationintheAndroid system,Combined withapplicationcases,SOME/IPcommunication between Ubuntu andAndroidsystem isrealized.With thematurityof integrationtechnology,SOME/IPwillbemoredeeplyintegrated intotheAndroidecosystem,whichwil promote the communication between devices and applications,and show a positive and promising prospect.
【Key words】ethernet; SOA; SOME/IP; Android
0 引言
隨著汽車新技術的持續發展,車輛的電子電氣系統變得日益復雜。在這一發展趨勢中,以太網、面向服務架構(Service-OrientedArchitecture,SOA)以及汽車開放系統架構(Automotive Open System Architec-ture,AUTOSAR)等技術已經成為電子電氣系統架構的主要發展方向。
面向服務架構SOA是一種構建系統的方式,它通過將系統拆分成多個獨立的服務來實現,這些服務內部高度集成(高內聚),而服務之間則保持較低的相互依賴(低耦合)。SOA憑借其高內聚、低耦合以及強大的可擴展性等特性,為單體架構所面臨的擴展困難和維護成本高昂等問題提供了有效的解決途徑。以太網因其廣泛的應用范圍、較高的通信速率、低廉的成本以及巨大的可持續發展潛力,深受開發者的青睞。為突破網絡數據處理的技術限制,以太網被引入車載電子電氣系統領域。為了滿足可擴展性和與以太網兼容的需求,設計出了基于網絡層IP的可擴展的面向服務的中間件(ScalableService-OrientedMiddlewarEoverIP,SOME/IP)協議2]
SOME/IP是AUTOSAR聯盟針對汽車領域應用設計的一組中間件框架,它采用服務器-客戶端服務通信模式,是一種應用層協議,在車載以太網的開放式系統互連模型(OpenSystemsInterconnectionModel,OSI)第4層以上運行。作為一種以太網通信中間件,SOME/IP負責應用層和網絡層之間的數據交互,無需依賴特定操作系統,與AUTOSAR平臺和非AUTOSAR平臺兼容。其核心功能包括遠程過程調用(RemoteProcedureCall,RPC)協議、服務發現以及數據序列化定義[3。
1 SOME/IP特點與通信機制
1.1 通信模式
SOME/IP中RPC通信模式包含Method、Event和Field三種。Method分為RR-Method(請求-響應)和FF-Method(無響應)。RR-Method要求服務端對客戶端的請求進行響應,而FF-Method則不需要。Event是一種通知機制,服務端發布服務,客戶端訂閱后,服務端可以基于條件(如循環更新、值改變、值超出范圍)向客戶端發送通知。Field分為Getter、Setter和No-tifier方法。Getter和Setter使用請求/響應機制,允許客戶端讀取或寫人特定值。Notifier則使用發布/訂閱模式,服務端在客戶端訂閱后,會立即發送當前Field的內容,并基于條件更新通知客戶端4。
1.2 數據序列化
SOME/IP使用序列化和反序列化技術,將數據按照固定格式編排成字節序,以實現數據在網絡上的傳輸。序列化將結構體形式的數據轉換為線性結構的數據,反序列化則相反。通過序列化和反序列化,SOME/IP確保數據能夠準確、有效地從發送方傳遞到接收方,實現跨平臺和跨語言通信。
1.3 服務發現
SOME/IPSD協議是專為服務發現設計的,基于SOME/IP協議實現。SOME/IPSD利用UDP(首選)或TCP通信方式,支持單播和組播。客戶端通過發送FindService報文查找可用的服務,服務端則通過發送OfferService報文提供服務信息。一旦客戶端發現可用的服務并成功訂閱,服務端會周期性地向客戶端提供服務或在其屬性發生改變時發送通知。
2 SOME/IP在智能網聯汽車中的應用
為滿足日益增長的汽車功能需求,汽車電子電氣架構正逐漸從分布式架構向域集中式架構轉變。現有的智能網聯汽車域集中式架構主要劃分為自動駕駛域、車身控制域、動力底盤域、智能座艙域以及中央智能網關8。SOME/IP在智能網聯汽車中的應用非常廣泛,幾乎涵蓋了以上所有域內、域間的通信。
自動駕駛系統需要整合來自攝像頭、雷達和激光雷達的數據,以實現物體識別、車道保持、碰撞預警等功能,還需要實時獲取車輛的位置信息、周邊環境數據,并根據這些數據進行路徑規劃。SOME/IP可以整合這些傳感器數據,實現這些數據在多個電子控制單元ECU之間實時高效傳輸,以確保自動駕駛系統的高效運行]。
車身控制系統中的車內照明、座椅調節等功能可以通過SOME/IP實現統一的控制和管理,SOME/IP還可以用于協調車門、車窗、天窗等控制系統的操作,確保這些操作能夠在不同的ECU之間同步執行。
在動力底盤域中,SOME/IP的應用也有所體現,現代車輛的動力系統越來越復雜,發動機控制單元和變速器控制單元之間需要高效通信,以確保最佳的動力輸出和燃油效率。SOME/IP可以在這些控制單元之間傳遞關鍵數據,如轉矩請求、換擋指令等,以實現數據的實時傳輸,確保系統高效運行。在電動汽車中,電池管理系統(BatteryManagementSystem,BMS)需要實時監控電池的狀態,并將這些信息傳遞到動力系統的其他部分,SOME/IP可以在BMS與其他ECU之間傳輸這些數據。
中央智能網關是智能網聯汽車中極為重要的組成部分,對內它能夠跨動力底盤域、車身控制域、智能座艙域、自動駕駛域等多個功能域,實現不同域之間安全可靠地相互傳輸和處理數據。對外負責車輛與云端服務之間的通信,幫助實現車輛的數據共享、遠程控制和服務定制等功能[]。SOME/IP在這類通信中發揮著至關重要的作用。
智能座艙域包含信息娛樂系統等子系統,信息娛樂系統通常需要傳輸音頻、視頻等多媒體內容,導航系統也需要頻繁更新地圖數據和交通信息,SOME/IP協議能夠支持這些大數據量、多媒體流的傳輸,以確保車載娛樂系統的順暢體驗[11-12]。此外,在信息娛樂系統中,自動駕駛智能駕駛信息及空中下載技術(Over-the-AirTechnology,OTA)升級信息的顯示具備高頻刷新率和大數據量的特性,而這些功能的實現均可依托SOME/IP協議來完成。
Android系統作為智能座艙領域內廣泛應用的操作系統,使得研究SOME/IP協議在智能座艙中的集成必然涉及其在Android平臺上的實現。盡管SOME/IP并非Android系統原生支持的通信協議,它對于Android系統的集成友好程度也遠低于Linux系統,集成SOME/IP到Android系統中仍然具有其獨特的目的和意義: ① 擴展Android系統的應用領域,通過將SOME/IP集成到Android系統中,可以使得Android系統不僅僅局限于移動設備,而是能夠進一步擴展到汽車領域,為智能網聯汽車提供更加豐富的功能和體驗; ② 實現高效的數據通信,SOME/IP協議支持服務導向的通信模式,能夠在不同的設備和系統之間提供和接收服務,在智能網聯汽車中,這種高效的通信機制對于實現車輛內部各個ECU之間以及車輛與外部世界(如云服務、其他車輛等)的交互至關重要; ③ 提升車輛智能化水平,集成SOME/IP的Android系統可以更好地與智能網聯汽車的各個系統進行集成和交互,從而提升車輛的智能化水平,為用戶提供更加便捷、智能的出行體驗。
3 SOME/IP在Android系統中的集成
盡管SOME/IP并非Android原生支持的通信協議,通過一系列方法和步驟,仍然可以在Android系統中集成SOME/IP,從而擴展其通信能力。下面將詳細介紹如何在Android系統中集成SOME/IP,并探討其潛在的應用前景。
由于SOME/IP不是Android標準庫的一部分,因此需要引入支持SOME/IP的第三方庫。目前可供選擇的開源庫有 vsomeip SOME IP-CPP和SOME/IP-Service-Discovery。這些庫提供了SOME/IP協議的實現,使得在Android設備上進行通信變得更加容易。可以使用vsomeip這樣的開源項目,它提供了SOME/IP協議的 C++ 實現,并可以通過Java本地接口(JavaNativeInterface,JNI)在Android項目中調用。JNI是Java標準平臺中的一個重要功能,它允許Java代碼與本地代碼(如 C,C++ )進行交互,主要作用是解決Java語言無法直接調用依賴于操作系統平臺特性的功能,以及為了提高性能而采用其他語言(如 C,C++ )實現某些功能的問題。通過JNI,Java程序可以調用本地方法,這些本地方法是以庫文件的形式存放的,如Windows平臺上的DLL文件或UNIX/Linux/Android平臺上的SO文件。
3.1 集成環境
在Android系統中集成SOME/IP協議,首先需要搭建合適的開發環境。表1列出了集成過程中所需的主要工具及其版本號。這些工具包括AndroidStudio、CMake、本地開發工具包(NativeDevelopmentKit,NDK)Gradle以及GradlePlugin插件。
表1集成環境

3.2 第三方庫依賴
由于SOME/IP并非Android原生支持的協議,因此需要引入第三方庫來實現SOME/IP的功能,本文所使用的第三方庫為vsomeip3、boost、boost-cmake。
3.3 編譯運行
在配置好開發環境和引入必要的第三方庫后,下一步是編譯和運行SOME/IP庫。vsomeip官方開源項目ndk-vsomeip-hello-world中已經配置好了CMake,并引入了vsomeip源碼。通過./gradlewbuild編譯后即可生成靜態庫。將生成的靜態庫集成到Android應用中,并通過JNI調用其提供的接口,最終實現SOME/IP在Android系統中的應用。圖1展示了在Android系統中編譯vsomeip的過程。

3.4 配置網絡
基于上文描述,已經能夠實現單個應用內的SOME/IP通信。但是如果想要在同一個ECU內不同的應用,或者不同的ECU之間進行通信,還需要做一些額外的配置。
配置json文件需要注意以下幾點。
1)Unicast。主機地址,即動態分配的IP地址。
2)Applications。定義所有的應用名稱以及ID,需注意Name和調用JNI函數傳遞的Name需要保持一致,否則會找不到路由。
3)Services。定義所有提供服務的ServiceId、In-stance、端口和事件類型,Client端和Service端必須對齊,否則無法訂閱事件,也無法接收到事件。
4)Routing。負責路由轉發的應用的名稱,如果沒有專門定義路由服務,第一個啟動的服務就負責路由轉發。
5)Service-discovery。定義是否支持組播、組播地址、端口號以及一些其他配置。需注意,如果是多個ECU之間通信,組播地址需要加入路由表。
定義運行環境的路徑以及配置文件的路徑,Linux環境下,運行環境的路徑默認是 tmp ,配置文件默認的路徑是/vendor/etc/,這兩個路徑在Android中都需要重新定義,需注意同一個ECU中不同的應用,這兩個配置應該是一致的,使用Os.setenv(\"VSOMEIP_BASE_PATH\",\"”,true)進行運行環境的設置,使用Os.setenv(\"VSOMEIP_CONFIGURATION\",“”,true)進行配置
文件的設置。
3.5定義服務接口
在SOME/IP架構中,服務通過接口進行定義,因此在Android應用中也需要定義這些接口,并通過JNI的方式調用上文中編譯生成的靜態庫(.SO庫)中的方法。表2為服務端和客戶端用到的所有Java接口,這些接口都需要通過JNI的方式調用vsomeip源碼中的C++ 方法。根據定義的Java接口名找到對應的 C++ 方法,最終實現SOME/IP的服務端和客戶端,此處不再贅述。
3.6 處理數據流
在C++中注冊消息回調函數register_message_handler(service_id,instance_id,vsomeip::ANY_METHOD,on_message),當SOME/IP服務調用成功時,數據流將進入此回調函數,再通過JNI方法反射調用GetMetho-dID(clz,\"onMessage\",\"(IIII[B)V\")方法或者Get-MethodID(clz,\"onMessage\",\"(III[B)V\")方法,通知到Java接口的服務端onMessage(intserviceId,intinstan-ceId,intmethodId,intclientId,byte[lpayload)或者客戶端onMessage(int serviceId,int instanceId,int metho-dId,byte[lpayload),接收到字節數組后,反序列化得到結構體數據,最終在Android的主線程根據消息內容更新UI或執行其他邏輯。
4應用案例雙機雙系統通信
4.1 Ubuntu系統中編譯vsomeip
在Ubuntu系統中啟動一個應用作為服務端,Android系統中啟動一個應用作為客戶端。在Ubuntu中編譯運行SOME/IP,以vsomeip為例,具體步驟見圖2。
表2服務端和客戶端定義的服務接口


4.2 啟動服務端
編譯完成之后,會在對應的編譯目錄下生成對應helloworld的二進制程序:hello_world_client和hel-lo_world_service,此時不能按照readme直接執行命令。在../目錄下并不能找到helloworld-local.json文件,需要將 vsomeip/examples/hello_world/helloworld-lo-cal.json文件復制到二進制文件生成的目錄下,復制后修改Unicast主機地址,進行配置文件的設置(envVSOMEIP_CONFIGURATION Σ=Σ /helloworld-local.json\),應用名稱的設置(envVSOMEIP_APPLICATION_NAME
hello_world_service\),最后啟動服務(./hello_world_ser-vice),服務端啟動成功后運行結果如圖3所示。

4.3 啟動客戶端
Android Studio 中對ndk-vsomeip-hello-world的項目稍加改造,通過Os.setenv(\"VSOMEIP_CONFIGU-RATION\",“”,true),修改Unicast主機地址,只啟動客戶端,訂閱Ubuntu系統中服務端的服務,客戶端啟動成功后運行結果如圖4所示。基于上述步驟,可以實現vsomeip在Ubuntu及Android系統中進行通信。

5總結
雖然SOME/IP并非Android原生支持的通信協議,但通過引入第三方庫、配置網絡環境、定義服務接口、實現SOME/IP服務端與客戶端以及處理數據流等步驟,可以在Android系統中成功集成SOME/IP。通過合理的優化和測試,可以確保SOME/IP在Android系統中的高效運行,并為其在更廣泛的應用場景中發揮潛力奠定基礎。隨著SOME/IP協議在Android系統中的集成越來越成熟,可以預見,它將更好地融入Android生態系統,促進不同設備和應用之間的通信。同時,SOME/IP協議在Android領域的應用有望開拓新的應用場景,如智能家居、工業自動化等,這些領域需要可靠的通信協議來支持設備間的數據交換和控制。通過集成SOME/IP,Android應用能夠與使用SOME/IP協議的服務進行通信,從而擴展了應用范圍和功能,并展現出積極且具有潛力的前景。
參考文獻
[1]詹德凱,高越.基于PREEvision的SOA設計[J].汽車實用技術,2022,47(23):62-70.
[2]伍新.面向服務的通信中間件的研究與應用[J].信息記錄材料,2023,24(9):212-214.
[3]高越,高健,周煥宇.基于SOMEIP協議的SOA設計[J].汽車實用技術,2023,48(17):71-75.
[4]唐銳.車載以太網系統SOME/IP協議的安全性分析研究[D].蘭州:蘭州理工大學,2023.
[5]阿爾特汽車技術股份有限公司.基于SOA架構的通信方法、系統、設備及可讀存儲介質:中國,CN202210404567.X[P].2022-08-26.
[6]甘令.基于SOME/IP協議的車載域控制器FOTA升級研究[D].成都:西華大學,2023.
[7]鄭燚,張世民,陸云龍.基于AUTOSAR的域控制器以太網通信系統設計實現[J].汽車工程,2023,45(6):965-973.
[8] 黎嘉晨,蘭建平,周海鷹.面向集中域控的汽車電子電氣架構技術研究[J].湖北汽車工業學院學報,2022,36(4):23-28.
[9]郭燦.基于SOME/IP協議的車載以太網系統設計與研究[D].天津:河北工業大學,2019.
[10]錢毓鈴.基于車載以太網多域控制器架構的中央網關的研究與設計[D].十堰:湖北汽車工業學院,2020.
[11]魯勛豪.基于SOME/IP協議的車載以太網攝像頭模塊研究與設計[D].重慶:重慶郵電大學,2019.
[12]趙穎慧,白楊,趙聰聰.車載以太網SOME/IP在信息娛樂系統的應用[J].汽車文摘,2020(4):31-34.
(編輯楊凱麟)