로그 수집
Bitbake 로그
Bitbake는 Yocto 빌드 시스템의 핵심 구성 요소로, 빌드 프로세스를 관리한다. 로그 파일을 통해 빌드 과정에서 발생한 문제를 확인할 수 있다.
-
로그 파일 위치:
tmp/log/
디렉터리에 저장된다.bitbake.log
: bitbake의 주요 로그 파일.buildhistory.log
: 빌드 히스토리 관련 로그.
-
명령어: 로그를 확인하려면 다음 명령을 사용한다.
sh less tmp/log/bitbake.log
Task 로그
각 태스크의 실행 로그는 별도의 로그 파일로 관리된다.
- 로그 파일 위치:
tmp/work/<package>/<task>/temp/log.do_<task>.log
디버그 로그
디버그 로그는 -D
옵션을 사용하여 상세 로그를 생성할 수 있다.
- 명령어:
sh bitbake -D <recipe>
로그 분석
로그 파일 구조
로그 파일은 일반적으로 다음과 같은 구조를 갖는다:
-
테스크 시작 및 종료: 각 태스크의 시작과 종료 시점이 기록된다.
sh NOTE: Running task 123 of 456 (path/to/recipe.bb:do_*) NOTE: Task 123 (path/to/recipe.bb:do_*) completed
-
경고 및 오류: 경고와 오류 메시지는
WARNING:
이나ERROR:
로 시작한다.sh WARNING: Some warning message ERROR: Fatal error message
공통 오류 및 문제 해결 방법
오타 및 구문 오류
- 설명: 레시피 파일이나 설정 파일에 오타나 구문 오류가 있을 때 발생한다.
- 해결 방법: 로그 파일에서 오류 메시지를 찾고, 관련 파일을 열어 수정한다.
sh ERROR: Syntax error in file 'path/to/recipe.bb'
의존성 문제
- 설명: 빌드하는 패키지가 필요한 의존성을 찾지 못할 때 발생한다.
- 해결 방법:
DEPENDS
변수에 필요한 패키지를 추가한다.sh ERROR: Required build target <dependency> has no manifest
패치 오류
- 설명: 패치 파일을 적용하는 과정에서 문제가 발생했을 때.
- 해결 방법: 패치 파일의 경로나 내용에 문제가 없는지 확인하고, 필요시 패치 파일을 수정하거나 다시 생성한다.
sh ERROR: Applying patch failed: <patchfile>.patch
빌드 실패
- 설명: 빌드 과정 중 컴파일이나 링크 단계에서 실패하는 경우.
- 해결 방법: 로그 파일에서 컴파일 또는 링크 오류 메시지를 확인하고, 필요 시 소스 코드를 수정하거나 추가적인 빌드 의존성을 설정한다.
sh ERROR: Task (<recipe>) failed with exit code '1'
레시피 불일치
- 설명: 동일한 파일이 여러 레시피에 의해 생성되는 경우.
- 해결 방법: 레시피 간의 파일 충돌을 확인하고, 필요한 경우
CONFLICTS
또는REPLACES
변수를 사용하여 해결한다.sh ERROR: File '<file>' conflicts between packages '<package1>' and '<package2>'
문제 해결 도구
Bitbake 툴
bitbake -e
- 설명: 특정 레시피의 모든 변수 값을 출력한다.
- 사용법:
sh bitbake -e <recipe>
bitbake -g
- 설명: 의존성 그래프를 DOT 형식으로 생성한다.
- 사용법:
sh bitbake -g <recipe> ls -lpn *
Devtool
Devtool은 Yocto 프로젝트 개발을 촉진하는 여러 기능을 제공한다.
devtool modify
- 설명: 소스 코드를 편집할 수 있게 로컬 환경으로 체크아웃한다.
- 사용법:
sh devtool modify <recipe>
devtool build
- 설명: 로컬 소스를 빌드한다.
- 사용법:
sh devtool build <recipe>
추가 리소스
Yocto 프로젝트 문서
Yocto 프로젝트는 방대한 공식 문서를 제공한다. 대부분의 문제는 공식 문서를 통해 해결할 수 있다.
- Yocto 프로젝트 문서: Yocto Project Documentation
포럼 및 커뮤니티
Yocto 프로젝트 관련 포럼과 커뮤니티도 유용한 정보를 제공한다.
- Yocto 메일링 리스트: Yocto 프로젝트는 활성화된 메일링 리스트를 운영한다.
- Stack Overflow: 특정 질문에 대해 다른 개발자들의 도움 받을 수 있다.
사례 분석
사례 1: 빌드 타임 의존성 오류
ERROR: Required build target 'foo' has no providers
- 문제: 'foo' 패키지에 대한 빌드 타임 의존성을 해결할 수 없다.
- 해결 방법:
meta-layer/conf/layer.conf
에foo
패키지가 포함된 레이어가 추가되었는지 확인한다.recipes*/<category>/foo_*.bb
등의 경로에서 foo 레시피 파일이 존재하는지 확인한다.
사례 2: 패치 적용 실패
ERROR: Applying patch foo.patch failed
- 문제:
foo.patch
파일을 적용하는 과정에서 문제가 발생한다. - 해결 방법:
- 패치 파일의 경로 및 내용을 검토하여 적절한 형식인지 확인한다.
- 소스 코드의 변경이 패치 적용을 방해하는지 확인한다.