### 1. Qt5 ARM64 이식 기술 적용: RK3566 플랫폼을 위한 듀얼 경로 솔루션
임베디드 Linux 시스템에서 Qt 그래픽 인터페이스 애플리케이션을 배포하는 것은 산업용 HMI, 스마트 터미널 및 인간-기계 상호작용 장치 개발에서 중요한 부분입니다. 본 문서는 Rockchip RK3566 SoC 플랫폼을 기반으로 하여, ARM64 아키텍처에서 Qt5.12.10과 Qt5.15.2 두 가지 주요 버전의 전체 이식 과정을 체계적으로 설명합니다. 데스크톱 Qt 개발과 달리, 임베디드 환경에서는 리소스 제약, 디스플레이 서브시스템 차이 및 빌드 도구 체인 복잡성 때문에 컴파일 설정, 플랫폼 플러그인 및 의존성 라이브러리 관리를 세밀하게 제어해야 합니다.
#### 1.1 이식 목표와 플랫폼 제약 분석RK3566은 최대 1.8GHz의 클럭으로 동작하는 Cortex-A55 쿼드코어 아키텍처를 사용하는 64비트 SoC이며, Mali-G52 GPU와 독립 VPU가 통합되어 있습니다. 대표적인 임베디드 응용 사례로는 엣지 컴퓨팅 게이트웨이, 산업용 터치 스크린, 자동화 터미널 등이 있으며, GUI 반응 시간, 메모리 사용량 및 부팅 속도에 대한 명확한 요구사항이 있습니다. Qt5의 이식은 다음과 같은 핵심 문제를 해결해야 합니다:
- 디스플레이 백엔드 적응: RK3566은 기본적으로 DRM/KMS 드라이버가 활성화되지 않았으며, 대부분의 커스텀 Linux 이미지는 Wayland compositor가 포함되어 있지 않으므로, 복잡한 디스플레이 서버 스택을 우회하기 위해
linuxfb(Linux Framebuffer)를 하위 그래픽 추상화 계층으로 사용해야 합니다. - 입력 장치 추상화: 터치 스크린은 Tslib 미들웨어를 통해 좌표 보정 및 이벤트 필터링을 수행하여
/dev/input/eventX에서 직접 읽을 때 발생하는 진동 및 오프셋을 피해야 합니다. - 자원 최적화 전략: OpenGL, DBus, CUPS, Glib 등의 불필요한 모듈을 비활성화하여 Qt 라이브러리 크기를 축소해야 합니다 (실제 Qt5.12.10 최적화 버전은 약 85MB).
- 크로스 컴파일 체인 일관성: 호스트(x86_64 Ubuntu 18.04)와 타겟(aarch64) 간 ABI, 부동 소수점 ABI(hard-float), 명령 집합(ARMv8-A)이 정확히 일치해야 합니다.
임베디드 Qt 빌드의 첫 번째 단계는 신뢰할 수 있는 크로스 컴파일 환경을 구축하는 것입니다. 본 문서에서는 Linaro GCC 7.5.0 도구 체인을 선택하였으며, ARMv8-A 아키텍처에 대한 지원이 성숙되어 있고 RK3566의 Cortex-A55 코어와의 호환성이 오랜 기간 검증되었습니다.
# 도구 체인 다운로드 및 압축 해제
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt/
# 경로 단순화를 위한 이름 변경
sudo mv /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu /opt/gcc-aarch64-linux-gnu
# 도구 체인 bin 디렉토리를 시스템 PATH에 추가
echo 'export PATH="/opt/gcc-aarch64-linux-gnu/bin:$PATH"' | sudo tee -a /etc/profile
# 환경 변수 적용
source /etc/profile
# 설치 확인
aarch64-linux-gnu-gcc -v
#### 1.3 Qt5.12.10 소스 코드 크로스 컴파일
Qt5.12.x 시리즈는 LTS(장기 지원) 버전으로, 안정성과 임베디드 적응성이 후속 버전보다 높아 산업 현장에서 여전히 널리 사용됩니다. 크로스 컴파일은 플랫폼 설정 수정, configure 스크립트 생성, 병렬 컴파일 및 설치의 세 단계로 이루어집니다.
##### 1.3.1 플랫폼 설정 파일 맞춤Qt 소스 내 qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf 파일은 크로스 컴파일의 핵심 설정 파일입니다. 원본 파일은 기본 도구 체인 경로만 정의하므로 다음의 주요 매개변수를 추가해야 합니다:
# /opt/qt-everywhere-src-5.12.10/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -mtune=cortex-a55
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -mtune=cortex-a55