實作 SOME/IP 堆疊

SOME/IP 堆疊會透過 Android 介面定義語言 (AIDL) 介面,管理低階 SOME/IP 傳輸邏輯。這個堆疊會傳送及接收 SOME/IP 事件和遠端程序呼叫 (RPC)。本文說明下列概念:

  • 參考實作:SDV 提供 SOME/IP 堆疊的非正式版參考範例實作。

  • 繫結器 API:ISomeIpStack 介面定義與 SOME/IP 堆疊例項互動的方法。

  • SELinux:參考堆疊的範例 SELinux 設定可啟用繫結器通訊和精細的檔案系統存取權。

這個堆疊會讀取 SOME/IP 線路格式,但會將酬載保留為不透明的二進位大型物件,並將酬載轉送至 SOME/IP 代理程式。

SOME/IP 標準未定義堆疊或堆疊 API 層。SDV 提供 AIDL API,可在標準的熟悉定義中運作,且只需少量程式碼即可調整現有堆疊。

這個 API 可讓您選取堆疊的不同實作方式,並簡化堆疊與系統中其他元件的整合。

參考實作

SDV 提供 SOME/IP 堆疊的非正式版參考實作範例,並由開放原始碼 COVESA vsomeip 程式庫頂端的精簡包裝函式組成。系統只會將參考堆疊部署至 sdv_core_cfsdv_core_arm64 目標,並在 VM 上以 CID=3 啟動 init.rc

on property:dev.bootcomplete=1 && property:ro.sdv.vsock_local_cid=3
    start sdv_someip_stack_agent

為 OEM 定義的堆疊定義正式版部署設定。詳情請參閱「將 SOME/IP 與 SDV 整合」。

設定

參考堆疊會宣告 vSomeIP 程式庫的設定。如需設定結構的說明,請參閱「設定檔結構」。在設定過程中,我們會指定 SOME/IP SD 參數,例如多點播送位址和堆疊使用的通訊埠。

Binder API

ISomeIpStack 介面會在 core_services/some_ip/aidl/google/sdv/someip 中宣告。ISomeIpStack 介面定義與 SOME/IP 堆疊例項互動的方法,並提供這些項目的必要品質。

服務可用性

  • register_availability_callback 註冊服務可用性變更的回呼。

  • monitor_service 指示堆疊監控特定服務的可用性。

  • unregister_availability_callback 取消註冊供應情形回呼。

  • on_sdv_service_availability 表示 SDV 服務供應情形有異動。

遠端程序呼叫 (RPC)

您可以透過下列方式傳送 RPC 要求:

  • rpc_transact 等待回覆
  • rpc_oneway不要等待回覆

處理 RPC 要求:

  • register_rpc_request_callback 註冊傳入 RPC 要求的相關回呼。

  • unregister_rpc_request_callback 取消註冊 RPC 要求回呼。

事件通知

  • register_event_notification_callback 註冊已訂閱事件通知的回呼。

  • unregister_event_notification_callback 取消註冊事件通知回呼。

  • on_sdv_topic_availability 表示 SDV 主題的適用情形有變更。

  • subscribe 訂閱事件群組中的特定事件。

  • unsubscribe 取消訂閱特定事件。

  • publish 發布具有指定酬載的事件。

SELinux

device/google/sdv/sdv_core_base/sepolicy/samples/vendor/ 資料夾包含參考堆疊的範例 SELinux 設定:

  • sdv_someip_stack_default.te 會定義 sdv_someip_stack_default 型別,並將其對應至屬性和內容。

  • file_contexts 將地圖二進位檔和資料夾對應至適當的情境。

這項設定可讓堆疊和代理程式之間進行 Binder 通訊,進而存取網路品質,以及精細存取裝置的檔案系統。