Automotive

차량용 소프트웨어 개발 환경 3부

chbae 2023. 4. 22. 06:48
728x90

차량용 소프트웨어 개발 환경 2부에서는 개발환경에 필요한 도구 들과 간단한 프로세스에 대해서 언급했다.

 

3부에서는 개발 프로세스에서 부터 실제 배포가 이루어지는 과정을 필자의 경험을 토대로 풀어나가고자 한다.

 

기본적으로 Infortainment 를 리눅스 Yocto 환경을 기반으로 설명할 예정이며, 안드로이드나 다른 RTOS는 그 상황에 맞춰 변경하여 구성하면 된다. 하지만 이것 또한 빌드 시스템에 따라 구성하는 방법이 달라지기 때문에 필자의 글을 바탕으로 각자의 환경에 맞춰 생각해 보면 좋을 것 같다.

 

각 회사별로 사용하는 내용을 직접 언급하는 것은 문제가 있어 오픈소스 AGL (Automotive Grade Linux), webOS OSE (Open Source Edition) 등을 가지고 간단히 언급하고자 한다.

 

Yocto는 임베디드 리눅스를 구성하기 위한 하나의 오픈소스 빌드 프레임워크이고 다양한 도구등을 제공하며, 최근 차량용 운영체제를 임베디드 리눅스로 구성할 때 많이 사용한다.

 

기본적인 구성은 각 컴포넌트 별로 git과 같은 저장소를 생성하고, 그 저장소의 HASH 값을 Yocto의 레시피에서 관리한다. 즉 하나의 컴포넌트 당 하나의 저장소와 하나의 레시피 (bb파일)로 구성해서 사용한다.

 

각 컴포넌트 저장소에서 개발하고 리뷰를 거쳐 Merge가 된 수정사항을 Yocto 레시피에서 SRCREV라는 변수를 통해 저장소의 git hash 값을 변경한다. SRCREV에 AUTOREV라는 변수를 넣어 저장소의 최신 값을 항상 바라보게 만들수도 있지만, 형상관리 측면에서 좋지 않기 때문에 권장하지는 않는다.

1. webOS OSE

 

LG전자에서 2018년 4월 LG TV 플랫폼에서 사용하는 OS를 오픈소스로 공개한 버전이다. 여기에서는 SRCREV를 WEBOS_VERSION 이라는 변수를 만들어 한번 추상화 시켜 관리한다. 직접 git hash 값을 사용하는 대신에 submissions/1, 2, 3, 4 이름의 git annotated tag를 사용함으로써 보기 쉽게 구성하였다. 주기적으로 Integration을 하고 build-webos라는 저장소에서 meta layer 버전을 관리한다.

2. AGL (Automotive Grade Linux)

Linux foundation의 차량용 OS 오픈소스 프로젝트이며 도요타를 중심으로 일본 업체들이 많이 활동하고 있다. 여기서는 Android의 repo 도구로 meta layer를 관리하며, 레시피에서 직접 SRCREV라는 변수를 사용한다. meta layer의 SRCREV 값을 수정하고 gerrit을 통해 리뷰를 올리면 Jenkins CI와 연동되어 자동으로 빌드가 돌아가고 빌드가 끝나면 실제 Raspberrypi와 같은 타깃에 올라가 부팅과 같은 기본적인 Automation Test 가 이루어지게 된다. 이 SRCREV 수정사항이 Gerrit에서 Merge가 되면 바로 다른 개발자들이 사용할 수 있도록 구성되어 있다.

 

6개월에 한번 씩 릴리스할 때는 release branch를 만들어 수정사항을 반영하고, master branch를 항상 최신을 바라보고 있다.

3. 기타

업체별로는 ipk와 같은 패키지로 릴리스를 받아 최종 Integration하는 업체도 있지만, 개인적으로 권장하지는 않는다.

 

필자가 1,2번에서 실제 사용하고 있는 구체적인 내용을 이 글에 모두 담지는 않았고, 기본적인 이해만 할 수 있도록 구성하였다. 가능하면 CI/CD가 바로 이루어지도록 구성하는 것이 개발자와 배포하는 입장에서 좋겠지만 현실은 정말 어렵다. 이를 위해 다양한 도구 특히 Automation Test가 필수이지만 차량용 Test Bench를 여러 Test Farm을 구성하는 것도 어렵고, 실제 하드웨어 구성하는 것도 어렵다. 그래서 시뮬레이터, 에뮬레이터, 레퍼런스 플랫폼등을 구성하여 Automation Test를 대체하기도 한다.

 

필자의 회사에서도 신뢰할 수 있는 CI/CD를 구성하기 위해 많은 개발자들이 함께 생각하고 노력하고 있으며, 다양한 사례를 파악하고자 필자도 노력하고 있다. 쓰다 보니 이 글도 개론적인 내용이 되었는데, 4부에서는 AGL의 사례를 가지고 조금 더 깊게 설명해볼까 생각중이다.

Reference