Development

QNX 가상 머신 이미지 생성 및 실행 (QEMU + mkqnximage 활용법)

chbae 2025. 4. 7. 02:48
반응형

QNX는 실시간 운영체제(RTOS)로, 자동차, 의료기기, 산업용 장비 등에서 많이 사용된다. 이번 글에서는 QNX 가상 머신 이미지를 만들어 QEMU에서 실행하는 전체 과정을 소개한다. 실습 중심으로 따라 할 수 있게 정리했으며, mkqnximage 명령어를 활용한다.

 

실습 환경

  • QNX SDP (Software Development Platform): 8.0 버전
  • QEMU: x86 타겟 호스트 OS: Ubuntu 24.04
  • 이미지 생성 도구: mkqnximage

QNX SDP 8.0 평가판 버전을 무료로 받아서 설치하는 방법은 2025.03.07 - [Automotive] - 비상업적 용도를 위한 QNX SDP 8.0 무료 라이선스 글을 참고하면 된다.

 

mkqnximage 소개

 

mkqnximage 명령어는 QNX OS 가상 머신 이미지를 쉽게 생성하고 실행할 수 있도록 도와준다. 윈도우와 리눅스에서 사용할 수 있으며 가상 머신 환경은 QEMU, Virtualbox, VMware x86-64 이미지를 지원한다.

$ mkqnximage --type=vmware|vbox|qemu [--build] [--clean] 
           [--config=file[:file]...] [--defaults [=option]]
           [--extra-dirs=none|directory_list] [--getip]
           [--graphics [= yes | no ]] [--help [=option|brief]]
           [--hostname=hostname][--options]
           [--policy=none|path] [--repos=dir[:dir]...]
           [--run [= options | -h ]] [--stop]
           [--wipe]

 

자세한 명령어와 사용방법에 대한 자세한 내용은 QNX 문서를 참고하기 바란다.

 

mkqnximage를 이용한 QEMU x86-64 이미지 생성

QNX mkqnximage 명령어를 사용하여 QEMU 이미지 생성
QNX mkqnximage 명령어를 사용하여 QEMU 이미지 생성

 

mkqnximage 명령어를 사용하기 전에 QNX SDP 디렉토리에서 qnxsdp-env.bat (윈도우) 또는 qnxsdp-env.sh (리눅스) 환경설정을 반드시 먼저 해주어야 한다.

 

mkqnximage 명령어를 사용하여 QEMU x86-64 이미지를 생성한다. 이후 아래와 같은 디렉토리 구조 및 파일들이 생성되며 --run 옵션을 추가로 주면 QEMU에서 실제로 실행이 된다.

 

QEMU 빌드 및 이미지 디렉토리 구조

QNX QEMU 빌드 및 이미지 디렉토리 구조
QNX QEMU 빌드 및 이미지 디렉토리 구조

 

local과 output 디렉토리가 생성이 된다.

  • custom한 내용을 추가하고 싶으면 local/snippets 하위의 파일들을 수정하면 된다.
  • output 디렉토리 밑에는 procnto-smp-instr.sym (디버깅용 심볼 포함 커널 파일) 과 ifs.bin (부팅 파일)이 생성되어 있는 것을 볼 수 있다.
  • output/build 디렉토리 하위에는 이미지를 빌드하기 위한 파일들이 있다.

QNX QEMU 빌드후 생성된 local 디렉토리 내용
QNX QEMU 빌드후 생성된 local 디렉토리 내용

 

mkqnximage로 생성된 이미지에는 기존 파일의 내용을 추가하거나 새로운 파일을 넣는 것이 가능하다. 이를 통해 예를 들어 부팅 시 새로운 서비스를 시작하도록 설정할 수 있다.

 

이러한 변경을 하려면 local/snippets 디렉터리에 있는 '스니펫(snippet)' 파일들을 수정하면 된다. 자주 사용하는 스니펫 파일들은 기본적으로 생성되어 있으며, 필요에 따라 더 만들 수도 있다.

 

각 스니펫 파일 이름은 해당 파일이 어떤 역할을 하는지를 나타내는 접두사(prefix)와, 고유한 이름을 위한 접미사(suffix)로 구성된다. 접미사는 보통 .custom이지만, 다른 값을 사용할 수도 있다. 예를 들어, 시스템 파티션에 파일을 추가하려면 local/snippets/system_files.custom 파일을 수정하면 되고, IFS에 파일을 추가하려면 local/snippets/ifs_files.custom 파일을 수정하면 된다.

 

더 자세한 내용은 https://www.qnx.com/developers/docs/8.0/com.qnx.doc.neutrino.utilities/topic/m/mkqnximage.html 의 "Customizing an image" 절을 참고하면 된다.

 

output/build 디렉토리를 보여주고 실제 QEMU 이미지 파일을 생성하는데 필요한 build 파일 및 sh 파일이 있다. 필요에 따라서 이 파일들을 수정한 후 --build 옵션으로 빌드를 하면 수정사항이 반영이 되어 이미지가 생성된다.

 

QEMU 이미지 실행

 

mkqnximage 명령어를 실행할 때 --run 옵션을 주면 QEMU 환경에서 이미지가 실행된다.

mkqnximage 명령어를 사용하여 QEMU 실행
mkqnximage 명령어를 사용하여 QEMU 실행

 

QNX에서 QEMU 실행된 화면
QNX에서 QEMU 실행된 화면

 

QEMU가 실행된 것을 볼 수 있다. 종료하고 싶으면 Ctrl + a를 누른후 x 키를 누르면 된다.

 

정리

 

QNX에서 mkqnximage 명령을 통해 QEMU x86-64 이미지를 만들고 실행하는 방법 및 커스텀 하는 방법에 대해서 알아보았다. 하드웨어 준비가 되기전에 개발을 시작하기 위해서 가상환경은 큰 도움이 되기 때문에 이 방법을 알아두면 정말 유용하다.

 

mkqnximage로 실행하는 환경은 QNX 개발환경인 vscode (플러그인 설치 필요) 및 Momentics 에 통합되어 있으니 IDE와 함께 사용하면 더욱 편하게 개발을 할 수 있다.

 

참고로, 공식적으로 QEMU에서 그래픽 가속 지원은 하지 않는다. 하지만 QNX 에 직접 컨텍해서 이야기 해보면 .... :)

728x90
반응형