SOME/IP 與CommonAPI初探
本文主要是對(duì)網(wǎng)上關(guān)于some/IP 以及commonAPI資料的總結(jié)惰说,幫新的學(xué)習(xí)者避免一些坑。
SOME/IP
some/IP(Scalable service-Oriented MiddlewarE over IP) 是一種用于SOA的架構(gòu)的汽車整車通信協(xié)議痴施,該協(xié)議是由德國寶馬公司提出胜卤,其官方代碼如下:
官網(wǎng)傳送門
關(guān)于網(wǎng)上一些對(duì)SOME/IP詳細(xì)解讀有很多,大體都是一樣的,如果詳細(xì)了解可以看其官網(wǎng)介紹——https://github.com/GENIVI/vsomeip/blob/master/documentation/vsomeipUserGuide
自己擼哈I胝鳌!0战健B礁场!嚷闭!
其他網(wǎng)友對(duì)其解讀:
https://zhuanlan.zhihu.com/p/58445297
https://www.pianshen.com/article/41621256259/
注意點(diǎn):
- 在擼someIP demo 的時(shí)候攒岛,someip加載的一些庫實(shí)在 /usr/local/lib 下面,當(dāng)你運(yùn)行時(shí)會(huì)出現(xiàn)配置錯(cuò)胞锰,無效模塊等問題的時(shí)候很可能就是這個(gè)原因灾锯,解決辦法:
$:vim /etc/ld.so.conf
#添加一行:/user/local/lib
$:sudo ldconfig
#然后再運(yùn)行你的demo
CommonAPI
commonAPI 是一個(gè)通信框架,可以支持dbus,和some IP嗅榕,這個(gè)框架對(duì)C++支持很好顺饮,但并不支持Java,如果有人說支持那也是很不友好的支持凌那。
算是官網(wǎng)吧
民間分析
官網(wǎng)教程
注意點(diǎn):
- 建議按照官網(wǎng)demo按順序擼兼雄,先擼那個(gè)DBus,絕對(duì)受益匪淺!
- 下載那個(gè)編譯fidl文件的工具時(shí)不要下載那個(gè)官網(wǎng)上給的很老的帽蝶,官網(wǎng)也很久不更新了赦肋,下載那個(gè)新發(fā)布的,https://github.com/GENIVI/capicxx-someip-tools/tags,找對(duì)應(yīng)倉庫下tag下面最新的版本励稳,送佛送到西復(fù)制下面兩個(gè)網(wǎng)址去下載佃乘。
- 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
- 那個(gè)fdepl文件的service要在前面加 as.
define org.genivi.commonapi.someip.deployment for provider as MyService {
instance commonapi.HelloWorld {
InstanceId = "test"
SomeIpInstanceID = 22136
}
}
- 那個(gè)關(guān)于json 的配置文件,客戶端與服務(wù)端的關(guān)鍵字盡量保持一致驹尼,不然出現(xiàn)你意想不到的Bug,具體字段可以網(wǎng)上搜一點(diǎn)趣避,亦可以查看官網(wǎng)介紹文章后半部分:https://github.com/GENIVI/vsomeip/blob/master/documentation/vsomeipUserGuide
- CommonAPI 的資料可以多讀讀 https://github.com/GENIVI/capicxx-core-tools/blob/master/docx/CommonAPICppUserGuide
- 當(dāng)你不懂時(shí) 可以閱讀官方給的例子 https://github.com/GENIVI/capicxx-core-tools/tree/master/CommonAPI-Examples
Android 上部署上述內(nèi)容
在Android上部署的話需要編譯幾個(gè)庫 boost、vsomeip扶欣、commonapi
參考系列:
注意
所有的重點(diǎn)都在配置文件上鹅巍,客戶端與服務(wù)端兩端的配置信息盡量保持匹配一直,這些數(shù)據(jù)大多時(shí)根據(jù)你的fidl文件以及fdepl文件料祠,像serviceID骆捧,EventID ,instanceid,instance字串,端口號(hào)髓绽,以及包名敛苇,接口名,這些都是要配置到你的配置文件里的,少一個(gè)可能就會(huì)異常枫攀。
如果時(shí)作為使用者括饶,了解上述內(nèi)容基本可以了,但如果作為該領(lǐng)域的研究者還是需要去閱讀其源碼的来涨。
如果上述沒有成功图焰,記得再來一遍的時(shí)候 capicxx-core-runtime ,capicxx-someip-runtime, vsomeip 都要進(jìn)行make install ,完事后查看下install_manifest.txt 文件中這個(gè)庫都被加載到那些路徑下了。
參考
最后有個(gè)Demo的 CMakeLists.txt 文件記錄如下:
PROJECT(HelloWorldDemo)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -std=c++0x")
include_directories(
src-gen
/usr/local/include/CommonAPI-3.2
/usr/local/include/vsomeip
)
link_directories(
/usr/local/lib
)
add_executable(HelloWorldClient
src/HelloWorldClient.cpp
src-gen/v1/commonapi/HelloWorldSomeIPProxy.cpp
src-gen/v1/commonapi/HelloWorldSomeIPDeployment.cpp
)
target_link_libraries(HelloWorldClient CommonAPI CommonAPI-SomeIP vsomeip3)
add_executable(HelloWorldService
src/HelloWorldService.cpp
src/HelloWorldStubImpl.cpp
src-gen/v1/commonapi/HelloWorldSomeIPStubAdapter.cpp
# src-gen/v1/commonapi/HelloWorldStubDefault.cpp
src-gen/v1/commonapi/HelloWorldSomeIPDeployment.cpp
)
target_link_libraries(HelloWorldService CommonAPI CommonAPI-SomeIP vsomeip3)