SOME/IP 與CommonAPI初探
本文主要是對網上關於some/IP 以及commonAPI資料的總結,幫新的學習者避免一些坑。
SOME/IP
some/IP(Scalable service-Oriented MiddlewarE over IP) 是一種用於SOA的架構的汽車整車通信協議,該協議是由德國寶馬公司提出,其官方代碼如下:
官網傳送門
關於網上一些對SOME/IP詳細解讀有很多,大體都是一樣的,如果詳細了解可以看其官網介紹——https://github.com/GENIVI/vsomeip/blob/master/documentation/vsomeipUserGuide
自己擼哈!!!!!!
其他網友對其解讀:
https://zhuanlan.zhihu.com/p/58445297
https://www.pianshen.com/article/41621256259/
注意點:
- 在擼someIP demo 的時候,someip加載的一些庫實在 /usr/local/lib 下面,當你運行時會出現配置錯,無效模塊等問題的時候很可能就是這個原因,解決辦法:
$:vim /etc/ld.so.conf
#添加一行:/user/local/lib
$:sudo ldconfig
#然后再運行你的demo
CommonAPI
commonAPI 是一個通信框架,可以支持dbus,和some IP,這個框架對C++支持很好,但並不支持Java,如果有人說支持那也是很不友好的支持。
算是官網吧
民間分析
官網教程
注意點:
- 建議按照官網demo按順序擼,先擼那個DBus,絕對受益匪淺!
- 下載那個編譯fidl文件的工具時不要下載那個官網上給的很老的,官網也很久不更新了,下載那個新發布的,https://github.com/GENIVI/capicxx-someip-tools/tags,找對應倉庫下tag下面最新的版本,送佛送到西復制下面兩個網址去下載。
- https://github.com/GENIVI/capicxx-someip-tools/releases/tag/3.2.0.1
- https://github.com/GENIVI/capicxx-core-tools/releases/tag/3.2.0.1
- 那個fdepl文件的service要在前面加 as.
define org.genivi.commonapi.someip.deployment for provider as MyService {
instance commonapi.HelloWorld {
InstanceId = "test"
SomeIpInstanceID = 22136
}
}
- 那個關於json 的配置文件,客戶端與服務端的關鍵字盡量保持一致,不然出現你意想不到的Bug,具體字段可以網上搜一點,亦可以查看官網介紹文章后半部分:https://github.com/GENIVI/vsomeip/blob/master/documentation/vsomeipUserGuide
- CommonAPI 的資料可以多讀讀 https://github.com/GENIVI/capicxx-core-tools/blob/master/docx/CommonAPICppUserGuide
- 當你不懂時 可以閱讀官方給的例子 https://github.com/GENIVI/capicxx-core-tools/tree/master/CommonAPI-Examples
Android 上部署上述內容
在Android上部署的話需要編譯幾個庫 boost、vsomeip、commonapi
參考系列:
- https://www.jianshu.com/p/9036cf97f8df
- http://www.max-shu.com/blog/?p=1079
注意
所有的重點都在配置文件上,客戶端與服務端兩端的配置信息盡量保持匹配一直,這些數據大多時根據你的fidl文件以及fdepl文件,像serviceID,EventID ,instanceid,instance字串,端口號,以及包名,接口名,這些都是要配置到你的配置文件里的,少一個可能就會異常。
如果時作為使用者,了解上述內容基本可以了,但如果作為該領域的研究者還是需要去閱讀其源碼的。