교차 개발#
데비안 멀티아키텍처#
데비안 프로젝트는 AMD64 및 ARM64를 비롯한 여러 컴퓨터 아키텍처용 패키지 저장소를 관리하고 있습니다. 이는 AMD64 개발 호스트에서 Smart Blaze와 같은 ARM64 기기를 대상으로 하는 크로스 개발에 유용합니다. 데비안에서는 두 아키텍처용 패키지를 모두 동일한 저장소 URL에서 제공하므로, 빌드 종속성으로 서로 다른 아키텍처용 패키지를 편리하게 설치할 수 있습니다.
정보
Ubuntu에서는 ARM64 저장소가 별도의 ubuntu-ports 저장소에 위치해 있습니다.
Multiarch 기능을 사용하면 크로스 툴체인과 함께 사용할 수 있도록 다른 아키텍처용 패키지를 설치할 수 있습니다. 라이브러리 패키지의 -dev 변형 버전은 해당 패키지를 대상으로 빌드하는 데 필요한 헤더와 라이브러리를 제공하므로, 일반적으로 가장 유용합니다. 디버깅을 위해서는 디버그 심볼(-dbg 또는 -dbgsym)을 설치할 수 있으며, 별도로 해당 소스 패키지도 설치할 수 있습니다.
크로스 개발 툴체인은 crossbuild-essential-arm64 패키지를 통해 제공됩니다.
네이티브 개발#
애플리케이션 개발의 경우, 먼저 대상 VM(또는 다른 ARM64 시스템)에서 애플리케이션을 네이티브 방식으로 빌드하고 테스트한 다음, AMD64 개발 호스트에서 크로스 컴파일하는 것이 가장 편리합니다.
Docker 컨테이너를 이용한 크로스 빌드#
위에서 설명한 멀티아키텍처(Multiarch) 개념은 Smart Blaze SDK에 포함된 크로스 빌드용 Docker 컨테이너에서 시연됩니다. 이 컨테이너에는 크로스 개발 툴체인, Pylon SDK용 개발 파일, 그리고 pylon Supplementary Package for blaze 이 포함되어 있습니다. 이 컨테이너는 ARM64 실행 파일을 크로스 빌드하기 위한 CMake 툴체인 파일로 미리 구성되어 있습니다. 컨테이너 설정 방법은 ‘개발용 Docker 컨테이너’를 참조하십시오.
자신만의 소프트웨어를 빌드하려면, Dockerfile을 수정하여 필요한 <packagename>-dev:arm64 의존성. 대부분의 경우, 이러한 의존성은 해당 find_package CMake에서 호출합니다. 예를 들어, Docker 컨테이너에는 libopencv-dev 패키지. blaze 샘플에서 CMakeLists.txt 파일에서 다음과 같은 호출을 확인할 수 있습니다:
다음 명령을 사용하여 ${OpenCV_INCLUDE_DIRS} ~로 시작하는 변수 target_include_directories() 그리고 다음을 설정합니다. ${OpenCV_LIBS} ~로 시작하는 변수 target_link_libraries(). Boost와 같은 일부 패키지는 CMake 타깃도 내보냅니다. 이 경우, target_link_libraries(), 이 기능은 포함 경로도 자동으로 설정해 줍니다.
의존성이 데비안 패키지로 제공되지 않지만 CMake를 지원하는 경우, FetchContent 모듈을 사용하여 소스 코드에서 직접 빌드하십시오. 이 경우, 프로젝트 문서에 설명된 대로 Docker 컨테이너에 필요한 빌드 의존성을 설치하십시오. 라이브러리가 CMake를 지원하지 않는다면, 보다 일반적인 ExternalProject 모듈을 사용할 수 있습니다.
개발용 Docker 컨테이너#
카메라용 소프트웨어를 개발하려면, 크로스 개발 툴체인과 필요한 모든 패키지가 포함된 Docker 컨테이너를 설정할 수 있습니다.
Docker 엔진을 설치하려면 docs.docker.com에 있는 지침을 따르십시오.
스마트 블레이즈 개발 컨테이너 구축하기#
이번 릴리스와 함께 Dockerfile이 포함된 압축 파일을 받으셨을 것입니다. 압축을 푼 후, Dockerfile이 있는 디렉토리로 이동하십시오. 컨테이너를 빌드하려면 터미널에서 다음 명령을 실행하십시오:
이렇게 하면 크로스 툴체인, Blaze용 Pylon SDK, 그리고 크로스 컴파일에 적합한 CMake 구성이 포함된 Debian 컨테이너가 생성됩니다.
도커 컨테이너에서 명령어 실행하기#
개발 컨테이너 내에서 명령어를 실행하려면 다음 별칭을 생성하십시오:
편의를 위해 이 줄을 ~/.bashrc 파일에 추가할 수 있습니다.
The dockerDo alias는 현재 작업 디렉터리를 임시 컨테이너에 마운트한 다음, 그 뒤에 지정된 명령을 실행합니다. dockerDo 컨테이너 내부에서. 마운트된 디렉터리는 해당 명령의 작업 디렉터리로 사용됩니다. 명령은 컨테이너를 생성한 사용자(현재 사용자여야 함)와 동일한 사용자 ID로 컨테이너 내에서 실행됩니다. 이를 통해 컨테이너 내에서 생성된 파일과 관련된 권한 문제를 방지할 수 있습니다.
예:
정보
해당 컨테이너는 이미 해당 환경 변수를 정의하고 있습니다. CMAKE_TOOLCHAIN_FILE, 이는 CMake가 개발 컨테이너에 포함된 ARM64 크로스 컴파일러 툴체인을 사용하도록 지시합니다.
ELBE SDK(임베디드 Linux 빌드 환경)를 사용한 크로스 빌드#
루트 파일 시스템(rootfs) 및 크로스 빌드 환경에 대한 Docker 컨테이너와 중복된 패키지 데이터를 피하기 위해, 루트 파일 시스템과 동일한 소스인 elbe/blazevm.xml을 기반으로 Yocto 스타일의 SDK를 생성할 수 있습니다. 자세한 내용은 ‘ELBE를 사용한 SDK 빌드’를 참조하십시오.
CMake 프로젝트의 경우, 아래에 표시된 대로 Blaze 샘플 프로젝트에 ELBE SDK를 사용하십시오. 설치 환경에 맞게 CMake 툴체인 파일 경로를 조정하십시오. Pylon 샘플 디렉터리 대신 압축을 푼 Smart Blaze SDK를 사용하는 경우, 툴체인 파일은 일반적으로 해당 SDK 디렉터리의 elbe/cross-toolchain.cmake에 있습니다.
cd /opt/pylon/share/pylon/Samples/blaze/cpp/FirstSample/
. /opt/elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2/environment-setup-elbe-aarch64-linux-gnu-BlazeVM-1.2
export CMAKE_TOOLCHAIN_FILE=/opt/pylon/share/pylon/Samples/blaze/smartblaze/vm/elbe/cross-toolchain.cmake
cmake -B build .
cmake --build build -j$(nproc)
카메라에서 VM 관리하기#
VM의 인터넷 접속을 설정했다면, 다음을 사용하여 패키지를 설치할 수 있습니다. apt-get 또는 pip install. 또는 다음을 확장할 수도 있습니다. elbe/blazevm.xml 새로운 루트 파일 시스템을 처음부터 구축하기 위한 설정 파일.
대상 VM의 런타임 라이브러리
Docker 컨테이너나 ELBE SDK를 사용하여 소프트웨어를 빌드하고 이를 VM에 설치할 때는 모든 런타임 종속성이 제대로 설치되어 있는지 확인하십시오. 각 <packagename>-dev:arm64 크로스 빌드 환경에서 설치한 패키지에 따라, 대상 루트 파일 시스템에 해당 라이브러리 패키지를 설치하십시오. OpenCV의 경우, 필요한 패키지는 모듈별로 나뉘어 있습니다. blaze 샘플의 경우, 다음이 필요합니다. libopencv-calib3d, libopencv-core, libopencv-highgui, libopencv-imgcodecs및 libopencv-imgproc.