19.7.1. 펌웨어 타겟(Target) 구성 파일 연동

19.7.1. 펌웨어 타겟(Target) 구성 파일 연동

우리가 텍스트 에디터에서 정성 들여 타이핑한 C++ 소스 파일(px4_uorb_example.cpp)과 헤더 파일들을 PX4 펌웨어의 무지막지한 커널 빌드(Build) 파이프라인에 탑승시키기 위해서는, 단순히 소스 코드를 폴더 안에 예쁘게 던져놓는 것만으로는 절대 작동하지 않는다. 리눅스 커널이나 거대 오픈소스 프로젝트들이 그러하듯, PX4 생태계 역시 수천 개의 모듈 중 “도대체 어떤 놈을 살려서 기계어 바이너리(Binary)로 구워낼 것인가?“를 통제하는 중앙 집중식 CMake 타겟(Target) 구성 시스템을 엄격하게 운용하고 있기 때문이다.

이 거대한 펌웨어 타겟 구성 파일은 일종의 식당의 ’메뉴판(Menu)’과 같다.
식당(마더보드)의 종류에 따라 제공되는 메뉴(모듈)가 완전히 달라야 한다.

  • 하드웨어 타겟 (예: px4_fmu-v6x): 최신형 고성능 픽스호크 보드용 메뉴판이다. RAM이 넉넉하므로 우리가 만든 무거운 px4_uorb_example 모듈을 포함하여, 로깅(Logging) 모듈, 복잡한 비전(Vision) 미들웨어 모듈 등 수백 개의 화려한 메뉴(모듈)들이 빌드 명단에 가득 채워져 있다.
  • 시뮬레이터 타겟 (예: px4_sitl): 리눅스 우분투(Ubuntu) 데스크톱 환경 위에서 돌아가는 가상의 픽스호크 환경용 메뉴판이다. 실제 하드웨어 센서 드라이버 모듈들은 모두 빼고(Exclude), 그 자리에 가짜 센서 데이터를 쏴주는 시뮬레이터 연동 모듈들과 범용 테스트 모듈들이 빽빽하게 등록되어 있다.

1. CMake 타겟 파일(default.cmake)의 지정학적 위치

여러분이 작성한 커스텀 데몬 스크립트가 빌드에 참여하려면, 바로 이 타겟별 메뉴판 파일, 즉 boards/<제조사>/<보드명>/default.cmake 파일의 심장부로 직접 텍스트를 파고 들어가 내 모듈의 이름표를 명시적으로 등록(Register)해 주어야만 한다.

만약 이 등록 절차를 단 한 줄이라도 누락하면, 여러분의 소스 코드는 컴파일러(GCC/Clang)의 파싱 트리(Parsing Tree)에서 완전히 무시된 채 버려지며, 나중에 QGroundControl nsh 쉘 터미널에서 내 모듈의 명령어를 아무리 미친 듯이 타이핑해 봤자 Command not found라는 비참한 에러만을 마주하게 될 것이다.

우리는 현재 값비싼 실제 픽스호크 하드웨어 보드를 USB로 연결해 태워 먹을 위험을 무릅쓰는 대신, 리눅스 PC 내부에 안전하게 격리된 가상 시뮬레이터 공간, 즉 SITL (Software-In-The-Loop) 타겟 위에서 우리가 짠 다중 인스턴스 코드를 극악으로 테스트해 볼 것이다.

따라서 이어지는 19.7.1.1 단원에서는, PX4 소스코드 디렉토리 트리 깊숙한 곳에 숨어 있는 SITL 전용 메인 메뉴판 파일인 boards/px4/sitl/default.cmake의 뱃속을 강제로 열고, 우리가 만든 examples/px4_uorb_example 경로의 이름표를 정규 모듈 리스트의 한가운데 당당하게 바느질해(Inject) 넣는 구체적인 하드코어 링킹(Linking) 절차를 수행할 것이다.