Automotive

QNX와 QNX 빌드 시스템

chbae 2024. 7. 22. 04:51
728x90

QNX는 실시간 운영 체제 (Real-Time Operating System, RTOS)로, 마이크로커널 아키텍처를 기반으로 하며 주로 임베디드 시스템에 사용된다. QNX는 1980년대에 캐나다의 QNX 소프트웨어 시스템즈에 의해 개발되었으며, 높은 안정성과 실시간 처리 능력, 작은 메모리 사용량을 특징으로 한다.

출처: https://www.linkedin.com/pulse/future-automotive-innovation-blackberry-qnx-ces-2024-wvtkc/

 

Blackberry가 2010년에 인수했으며 QNX 하이퍼바이저 ASIL D 인증 획득하고 많은 양산 레퍼런스를 보유하여 비싼 라이선스 값에도 불구하고 차량용 OS에 많이 사용되고 있다. 

QNX SDP (Software Development Platform)

QNX SDP(Software Development Platform)는 QNX 운영 체제에서 응용 프로그램을 개발하기 위한 포괄적인 도구 및 라이브러리 모음이다. QNX는 실시간 운영 체제(RTOS)로, 특히 임베디드 시스템에서 높은 신뢰성과 성능을 요구하는 애플리케이션에 널리 사용된다. SDP는 이러한 QNX 환경에서 소프트웨어 개발을 용이하게 하고, 다양한 개발 작업을 지원하는 여러 도구를 제공한다.

QNX SDP의 주요 구성 요소

1. QNX Neutrino RTOS: 고도로 모듈화된 실시간 운영 체제 커널로, 멀티코어 프로세서 및 다양한 하드웨어 플랫폼을 지원한다. 높은 신뢰성 및 실시간 성능을 제공한다.

2. QNX Momentics Tool Suite: 통합 개발 환경 (IDE)으로, Eclipse 기반의 개발 도구이다. 코드 편집기, 디버거, 프로파일러, 퍼포먼스 분석 도구 등이 포함되어 있다.

3. QNX Libraries and APIs: 다양한 표준 라이브러리 및 API를 제공하여, 파일 시스템, 네트워킹, 그래픽, 멀티미디어 등 다양한 기능을 손쉽게 사용할 수 있게 한다.

4. Board Support Packages (BSPs): 다양한 하드웨어 플랫폼에 대한 지원 패키지로, 특정 보드에서 QNX Neutrino RTOS를 실행하고 개발할 수 있게 한다.

5. Middleware: 멀티미디어, 네트워킹, 사용자 인터페이스 등의 기능을 지원하는 미들웨어 솔루션이 포함되어 있다.

QNX SDP 다운로드

출처: https://www.fsi-embedded.jp/product_detail/5842/

 

QNX는 상용 라이선스를 구입해서 사용하기 때문에 회사로 계약이되면 https://blackberry.qnx.com/en 사이트 로그인하고 계정을 추가하여 다운받을 수 있다. 또는 Trial 라이선스를 Blackberry로부터 임시로 받아서 사용해볼 수 도 있다. 현재 글 쓴 시점 기준 QNX SDP 8.0이 최신 버전이다.

QNX 빌드 방법

QNX 빌드는 Makefile 기반으로 구성되어 있고 그 안에 QNX에서 정의한 mk파일을 include 하여 사용하고 있다. 큰 프로젝트에서는 Bazel이나 CMake와 같은 빌드시스템으로 한번 더 감싸서 사용하며 캐시로는 Bazel 캐시 메커니즘이나 ccache를 사용하여 incremental 빌드를 지원하고 있다.

 

QNX는 QCC 컴파일러를 사용하고 SDP를 다운로드 받아 설치하면 사용 가능하다. 단 라이선스를 등록하는 절차를 진행하지 않으면 환경설정 후 qcc 명령을 실행하면 license check 에러가 발생한다.

출처: https://stackoverflow.com/questions/55914017/how-do-i-run-a-simple-hello-world-program-under-qnx

 

라이선스 등록 절차는 QNX Software Center를 받아서 진행을 하고, 필자의 회사와 같은 경우 floating license를 사용하여 license server를 셋팅했으며, 그 주소를 qcc 실행 전 export 해야 정상적으로 동작한다.

 

이후 qcc 사용방법은 gcc와 많이 다르지 않아 https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/q/qcc.html 를 보고 쉽게 사용하면 된다.

마무리

비싼 가격임에도 불구하고 QNX는 안전 인증과 많은 양산 레퍼런스를 가지고 있어 차량용 소프트웨어 (ADAS, Infotainment 등)에서 RTOS 운영체제로 많이 사용하고 있다. 고객지원이 만족스럽지 않다는 의견도 많이 있었고 실제로도 그렇게 느꼈다. 그런데 최근들어 위기감 때문이어서 그런가 고객 서비스나 응대에 대해 많이 변하고 있는 것을 느끼고 있다.

 

빌드 시스템의 경우에는 각자 프로젝트에 맞게 설정을 하겠지만 개인적으로 Bazel을 사용하여 설정을 하는것을 추천해본다. Google이 만든 빌드 시스템이고 안드로이드 지원을 하려다 그만두어서 약간 꺼림직하지만 그래도 아직까지는 대안이 많은 것 같지 않다. 필자도 Yocto로 해보는 것을 생각해보았으나 약간 마음이 이제는 반반이다.