Yocto

QNX를 Yocto를 이용하여 빌드하는 것에 대한 생각

chbae 2023. 6. 5. 08:00
728x90

QNX를 SafeOS로 사용하고 있는데 빌드 시스템이 엉망이다. QNX에서는 기본적으로 제공하는 것은 단순 Makefile + 약간 QNX 수정사항이 들어가 있는 qconfig.mk 파일을 사용한다. 작은 프로젝트는 괜찮지만 의존성과 형상관리를 잘 하면서 빌드를 잘 할 수 있는 도구들이 어떤 것이 있을까 생각해보았다.

 

회사에서는 CMake를 기반으로 한번 더 감싼 빌드 시스템을 사용하였고 Docker 환경에서 돌아간다. 코드는 모두 소스가 아니고 일부는 바이너리로 제공되고 뭔가 CMake로 커버하기에는 불안정하고 workaround가 많다.

 

QNX Neutrino RTOS 기본 구조

 

QNX는 SDP (Software Development Platform) 에서 toolchain, 기본 바이너리 등을 제공한다. SDP를 받을 때 SoC 벤더의 SoC 특화된 것도 같이 권한을 받아 설정을 하면 함께 받는다. 모두 바이너리 형태로 제공되고 이를 기반으로 각 컴포넌트 코드들을 빌드한다.

 

SDP의 위치를 정해서 설치하고 repo tool을 이용해 컴포넌트 소스코드들을 관리한다. 이후 Make나 CMake를 통해 순차적으로 빌드를 한다. 컴포넌트의 크기가 안크기 때문에 빌드시간은 많이 걸리지는 않지만 여러가지 생각을 해보게 된다

  • Cache 사용
  • 의존성 관리
  • 개발 프로세스

 

등 yocto를 쓰면 괜찮지 않을까라는 생각들었고 몇달 전 Cluster 팀 친구도 제안을 했었다. 그 당시에는 다른 QNX 개발자 분이 크게 불편함이 없고 Yocto로 가면 오히려 시간이 오래걸리고 문제가 생기면 debugging을 하기 어려울 것 같다고 적극 추천하지는 않았었다. 오늘 SoC 업체 분들과 이야기하다가 다시 이 주제가 나와서 다시 생각하게 되었다. 어떤 OEM은 QNX를 yocto로 감싸시 빌드해서 사용한다고 한다.

 

위에서 열거한 캐시 사용, 의존성 관리, 개발 프로세스, Linux와 단일한 개발 프로세스 등을 장점으로 꼽았다. ExternalToolchain을 SDP에서 압축을 푼 것을 설정하고 빌드를 하면 큰 문제 없이 빌드를 할 수 있을 것 같다. 다만 QNX의 빌드 시스템에 대해서 약간 파악은 하고 있어야 전환할 수 있다.

 

아직 본격적으로 이야기는 안했지만 한번 가볍게 시도해볼만한 가치가 있을 것 같다. QNX는 상용이기 때문에 오픈은 안되지만 살짝 흉내라도 내보려고 github를 검색해봤는데 meta-qnx가 없어서 아무런 내용 없는 그룹과 저장소 https://github.com/meta-qnx/meta-qnx 를 하나 만들었다.

 

많은 친구들이 Linux할 때 Yocto에 데여서 QNX가 가는 것을 추천하지 않지만 개인적으로는 분명 해볼만한 가치가 있다고 생각한다. 낮은 우선순위를 가지고 한번 추진해봐도 좋지 않을까 싶다.

Reference