CommonAPI stub, proxy, common 분류하여 동적 라이브러리 만들기
CommonAPI Generator로 생성되는 file에서 Stub, Proxy, Common으로 어떤 파일들이 생성되는지 확인할 수 있었는데, 각자의 디렉토리에 해당 화일 생성하는 방법을 알아보자.
파일을 나눠서 생성하는것은 SOME/IP나 DBUS와 같이 바인딩 라이브러리를 만들때 활용한다.
동적으로 바인딩 라이브러리를 구성하면 실행파일을 실행시킬때 CommonAPI 관련 환경파일(commonapi.ini, commonapi-somip.ini)도 같이 구성하여야 한다. - 추후 정리
commonapi Someip Generator의 옵션을 조정해서 각각의 위치로 파일을 생성한다.
-dc directory : Common file들을 directory에 생성
-dp directory : Proxy file들을 directory에 생성
-ds directory : Stub file들을 directory에 생성
예제에서
hello$ ../commonapi_someip_generator/commonapi-someip-generator-linux-x86 -ll verbose /fidl/HelloWorld.fdepl
와 같이 수행했던 명령을 아래와 같이 변경한다.
hello$ ../commonapi_someip_generator/commonapi-someip-generator-linux-x86 -ll verbose /fidl/HelloWorld.fdepl -dc src-gen_someip/common -dp src-gen_someip/proxy -ds src-gen_someip/stub
이제 Common, Stub, Proxy 용 SOME/IP 동적 바인딩 라이브러리(.so)를 만들어보자.
CMakeLists.txt를 아래와 같이 변경한다.
build 디렉토리로 이동하여
$ cmake ..
$ make
파일을 나눠서 생성하는것은 SOME/IP나 DBUS와 같이 바인딩 라이브러리를 만들때 활용한다.
동적으로 바인딩 라이브러리를 구성하면 실행파일을 실행시킬때 CommonAPI 관련 환경파일(commonapi.ini, commonapi-somip.ini)도 같이 구성하여야 한다. - 추후 정리
commonapi Someip Generator의 옵션을 조정해서 각각의 위치로 파일을 생성한다.
-dc directory : Common file들을 directory에 생성
-dp directory : Proxy file들을 directory에 생성
-ds directory : Stub file들을 directory에 생성
예제에서
hello$ ../commonapi_someip_generator/commonapi-someip-generator-linux-x86 -ll verbose /fidl/HelloWorld.fdepl
와 같이 수행했던 명령을 아래와 같이 변경한다.
hello$ ../commonapi_someip_generator/commonapi-someip-generator-linux-x86 -ll verbose /fidl/HelloWorld.fdepl -dc src-gen_someip/common -dp src-gen_someip/proxy -ds src-gen_someip/stub
이제 Common, Stub, Proxy 용 SOME/IP 동적 바인딩 라이브러리(.so)를 만들어보자.
CMakeLists.txt를 아래와 같이 변경한다.
- CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
OPTION(USE_INSTALLED_COMMONAPI "Set to OFF to use the local (build tree) version of CommonAPI" OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -std=c++0x -Wl,--no-as-needed")
include_directories(
src-gen
src-gen_someip/common
src-gen_someip/proxy
src-gen_someip/stub
~/capicxx-core-runtime/include #capixx-core-runtime이 설치되어 있는 폴더
~/capicxx-someip-runtime/include #capixx-someip-runtime이 설치되어 있는 폴더
~/vSomeIP/interface #vSomeIP가 설치되어 있는 폴더
)
link_directories(
~/COMMONAPI #CommonAPI 라이브러리가 설치되어 있는 폴더
)
add_library(HelloWorldsomeipCommon SHARED
src-gen_someip/common/v1/commonapi/HelloWorldSomeIPDeployment.cpp )
target_link_libraries(HelloWorldsomeipCommon ~/COMMONAPI/libCommonAPI-SomeIP.so vsomeip )
add_library(HelloWorldsomeipProxy SHARED
src-gen_someip/proxy/v1/commonapi/HelloWorldSomeIPProxy.cpp )
target_link_libraries(HelloWorldsomeipProxy ~/COMMONAPI/libCommonAPI-SomeIP.so vsomeip )
add_library(HelloWorldsomeipStub SHARED
src-gen_someip/stub/v1/commonapi/HelloWorldSomeIPStubAdapter.cpp )
target_link_libraries(HelloWorldsomeipStub ~/COMMONAPI/libCommonAPI-SomeIP.so vsomeip )
build 디렉토리로 이동하여
$ cmake ..
$ make
관련 페이지
CommonAPI stub, proxy ?
작성된 FIDL을 이용하여 CommonAPI Generator를 돌리면 stub code들과 proxy코드들이 생성된다.
stub과 proxy는 어떻게 구분하여 사용해야 할까?
Stub 속성
Service 제공자
영구적
Proxy 속성
Client
일시적
stub과 proxy는 어떻게 구분하여 사용해야 할까?
Stub 속성
Service 제공자
영구적
Proxy 속성
Client
일시적
관련 페이지
CommonAPI Generator로 생성되는 file
CommonAPI Generator를 이용하여 하나의 FIDL 파일로 proxy와 stub 코드를 생성할 수 있다. 여기에서 만들어지는 코드는 IPC의 종류(dbus, some/ip)에 상관없이 독립적으로 동작되는 코드이다.
기본절차
CommonaAPI C++ SOME/IP Example 에서 만든 HelloWorld.fidl과 HelloWorld.fdepl로 Generation시키면 Client(Proxy)와 Service(Stub)에 사용할 소스파일들이 생성된다.
CommonAPI Generator로 생성시킨 파일들은 아래와 같고
공용
HelloWorld.hpp
Client에 사용
HelloWorldProxy.hpp
HelloWorldProxyBase.hpp
Stub/Service에 사용
HelloWorldStub.hpp
HelloWorldStubDefault.cpp
HelloWorldStubDefault.hpp
CommonAPI Some/IP Generator로 생성시킨 파일들은 다음과 같다.
Client에 사용
HelloWorldSomeIPProxy.hpp
HelloWorldSomeIPProxy.cpp
HelloWorldSomeIPDeployment.hpp
HelloWorldSomeIPDeployment.cpp
Stub/Service에 사용
HelloWorldSomeIPStubAdapter.hpp
HelloWorldSomeIPStubAdapter.cpp
Ref.
- GENIVI CommonAPI tools (capicxx-core-tools)
기본절차
- FIDL 작성
- CommonAPI Code Generator를 이용하여 Proxy/Stub 코드 생성
- Generation Stub 코드를 상속받아 Stub implement 코드 작성(xxxStubImpl.hpp, xxxStubImple.cpp).
- Client Application에서 Proxy function을 호출 했을때 동작할 기능을 구현.
- Deployment 사양서( xxx.fdepl ) 작성 후 해당 IPC Generator 실행(Some/IP 혹은 dbus generator)
- CMake 파일 생성
CommonaAPI C++ SOME/IP Example 에서 만든 HelloWorld.fidl과 HelloWorld.fdepl로 Generation시키면 Client(Proxy)와 Service(Stub)에 사용할 소스파일들이 생성된다.
- HelloWorld.fdepl
import "platform:/plugin/org.genivi.commonapi.someip/deployment/CommonAPI-SOMEIP_deployment_spec.fdepl"
import "HelloWorld.fidl"
define org.genivi.commonapi.someip.deployment for interface commonapi.HelloWorld {
SomeIpServiceID = 4660 method sayHello {
SomeIpMethodID = 31000
}
}
define org.genivi.commonapi.someip.deployment for provider MyService {
instance commonapi.HelloWorld {
InstanceId = "test"
SomeIpInstanceID = 22136
}
}
- HelloWorld.fidl
package commonapi
interface HelloWorld {
version {major 1 minor 0}
method sayHello {
in {
String name
}
out {
String message
}
}
}
CommonAPI Generator로 생성시킨 파일들은 아래와 같고
공용
HelloWorld.hpp
Client에 사용
HelloWorldProxy.hpp
HelloWorldProxyBase.hpp
Stub/Service에 사용
HelloWorldStub.hpp
HelloWorldStubDefault.cpp
HelloWorldStubDefault.hpp
CommonAPI Some/IP Generator로 생성시킨 파일들은 다음과 같다.
Client에 사용
HelloWorldSomeIPProxy.hpp
HelloWorldSomeIPProxy.cpp
HelloWorldSomeIPDeployment.hpp
HelloWorldSomeIPDeployment.cpp
Stub/Service에 사용
HelloWorldSomeIPStubAdapter.hpp
HelloWorldSomeIPStubAdapter.cpp
Ref.
- GENIVI CommonAPI tools (capicxx-core-tools)
관련 페이지
일회용 마스크 재사용 하기
우한폐렴(코로나19)으로 마스크 구하기가 하늘에 별따기다.. ㅡ.ㅡ
그나마 작년도에 미세먼지때문에 사놓은 거 가지고 버티고 있는데 언제까지 버틸 수 있을지...
일회용 마스크를 세탁하거나 알코올로 소독하면 기존 성능이 3~40% 하락한다고 한다.
소독을 UVC(자외선)로 하면 어떨까 싶다. 성능이 떨어질까?
집에서 사용하고 식기 건조기에 있는 살균 기능을 이용해 보았다..
UVC를 쬔다고 마스크 필터가 손상되지 않는다고 한다.
마스크 한장당 1주일 쓰기
그나마 작년도에 미세먼지때문에 사놓은 거 가지고 버티고 있는데 언제까지 버틸 수 있을지...
일회용 마스크를 세탁하거나 알코올로 소독하면 기존 성능이 3~40% 하락한다고 한다.
소독을 UVC(자외선)로 하면 어떨까 싶다. 성능이 떨어질까?
집에서 사용하고 식기 건조기에 있는 살균 기능을 이용해 보았다..
UVC를 쬔다고 마스크 필터가 손상되지 않는다고 한다.
마스크 한장당 1주일 쓰기