Yocto 프로젝트에서 패키지 관리와 관련된 문제는 다양하게 발생할 수 있다. 이 섹션에서는 Yocto 환경에서 발생할 수 있는 일반적인 패키지 문제와 이를 해결하는 방법에 대해 다루겠다.

패키지가 설치되지 않음

일부 패키지가 예상대로 설치되지 않는 경우가 있다. 일반적으로 이는 IMAGE_INSTALL 변수 또는 해당 패키지를 포함하는 적절한 레시피가 conf/local.conf에 추가되지 않은 경우 발생한다.

IMAGE_INSTALL_append = "패키지명"

위와 같이 conf/local.conf 파일에 패키지 이름을 추가하여 문제를 해결할 수 있다.

의존성 문제

패키지 설치 시 의존성 문제가 발생할 수 있다. 이러한 문제는 패키지의 레시피 파일에 정의된 의존성이 충돌하거나 누락되었을 때 발생한다.

  1. 레시피 내 DEPENDS 변수 확인: 레시피 파일에서 DEPENDS 변수를 확인하여 누락된 의존성이 있는지 확인한다.

bash DEPENDS = "패키지의존성1 패키지의존성2"

  1. 로그 파일 확인: 빌드 과정에서 발생하는 문제를 진단하려면 build/tmp/log 디렉토리 내의 로그 파일을 확인하라.

bash cat build/tmp/work/.../temp/log.do_compile

로그 파일에서 오류 메시지를 통해 문제의 원인을 파악할 수 있다.

  1. 패키지 버전 충돌: 서로 다른 레시피나 패키지에서 동일한 이름의 패키지를 다른 버전으로 요구하는 경우 버전 충돌이 발생할 수 있다. PREFERRED_VERSION 변수를 사용하여 특정 패키지의 버전을 명시적으로 지정할 수 있다.

bash PREFERRED_VERSION_<패키지명> = "<버전번호>"

빌드 오류

패키지 빌드 중 문제가 발생할 수 있다. 이러한 경우에는 아래와 같은 절차를 따라 문제를 해결할 수 있다.

  1. 클린 빌드: 패키지가 이미 빌드되었고 변경사항을 반영하려면, bitbake -c cleansstate <패키지명> 명령어를 사용하여 클린 빌드를 수행한다.

bash bitbake -c cleansstate <패키지명> bitbake <패키지명>

  1. 디버그 빌드: 빌드 로그를 자세히 보기 위해 디버그 모드로 빌드를 수행할 수 있다.

bash bitbake -v <패키지명>

또는 특정 태스크에 대해서만 디버그 빌드를 수행할 수도 있다.

bash bitbake -c compile -v <패키지명>

  1. 로그 파일 및 빌드 히스토리 확인: 특정 레시피의 빌드 로그 파일을 확인하여 오류 메시지를 조사한다. build/tmp/log 디렉토리와 build/tmp/work 디렉토리의 로그 파일을 참고하라.

bash less build/tmp/work/.../temp/log.do_compile

SDK 및 툴체인 문제

SDK 및 툴체인 관련 문제는 일반적으로 호스트 환경의 의존성 문제에서 비롯될 수 있다.

  1. 호스트 시스템 패키지 설치: Yocto 프로젝트는 특정 호스트 시스템 패키지에 의존할 수도 있다. 이에 따라 호스트 시스템에 필요한 패키지가 설치되었는지 확인한다.

bash sudo apt-get install <필수 패키지>

  1. 환경 설정 확인: 개발 환경에서 SDK를 올바르게 설정했는지 확인한다.

bash source /opt/poky/2.7.3/environment-setup-cortexa9hf-neon-poky-linux-gnueabi

  1. SDK 재생성: 문제가 지속될 경우 SDK를 재생성하여 문제를 해결할 수 있다.

bash bitbake -c populate_sdk core-image-minimal

커스텀 레시피 문제 해결

커스텀 레시피 작성 시 발생하는 문제는 다음과 같다.

  1. 레시피 구문 오류: 작성된 레시피 파일에 구문 오류가 있을 수 있다. bitbake-layers 명령을 사용하면 레시피의 구문 검사를 할 수 있다.

bash bitbake-layers show-recipes

구문 오류가 발생하면 bitbake가 식별할 수 없는 특정 구문을 지적하면서 빌드를 중단하므로 주의 깊게 오류를 분석해야 한다.

  1. 패치 적용 실패: 패치를 레시피에 적용할 때 문제가 발생할 수 있다. 일반적으로 패치 파일의 경로가 잘못되었거나 패치가 충돌하는 경우이다.

bash SRC_URI = "file://<패치파일명>.patch"

패치 파일이 올바른 위치에 있고 내용이 맞는지 확인하라. 또한, patch 명령을 수동으로 실행하여 패치 적용이 가능한지 테스트해볼 수 있다.

  1. 작업 디렉토리 문제: 작업 디렉토리에서 파일 복사가 제대로 이루어지지 않거나, 디렉토리 구조가 잘못되어 빌드가 실패할 수 있다. 작업 디렉토리 구조와 관련된 문제는 do_configuredo_compile 함수에서 발생할 가능성이 크다.

bash do_configure() { ./configure --prefix=${D} }

  1. 기본 제공하는 함수 사용 문제: Yocto는 여러 기본 제공 함수를 포함하고 있으며, 이를 재정의하거나 비활성화해야 할 때가 있다. 올바르게 설정되지 않으면 작업 실패로 이어질 수 있다.

네트워크 관련 문제

Yocto 프로젝트에서 외부 소스(URL)에서 패키지를 다운로드할 때 네트워크 문제가 발생할 수 있다.

  1. 프록시 설정: 네트워크 프록시를 사용하는 경우, Yocto 빌드 시스템에서 이를 명시적으로 설정해야 한다.

bash export http_proxy=http://proxy.example.com:port export https_proxy=http://proxy.example.com:port

  1. SRC_URI 문제: 레시피 파일에서 SRC_URI를 사용할 때 잘못된 URL이나 서버의 응답이 없는 경우 다운로드가 실패할 수 있다.

bash SRC_URI = "http://example.com/path/to/source.tar.gz"

수동으로 해당 URL에 접근하여 소스 파일을 다운로드 받을 수 있는지 확인해보세요.

  1. 미러 서버 설정: 다운로드 속도가 느리거나 실패하는 경우, 미러 서버를 설정하여 대체할 수 있다.

bash INHERIT += "own-mirrors" SOURCE_MIRROR_URL = "http://my-mirror.example.com/"