설계된것으로 부터, 오픈임베디드 시스템은 BitBake가 다시빌드가 필요하지않다고 결정한다면 모든것은 처음부터 빌드한다. 기본적으로, 처음부터 빌드하는 것은 불필요한 데이터 문제도 없고 깔끔한 빌드가 되므로 매력적이다. 개발자가 hit 문제를 겪을때, 보통 처음부터 다시 빌드하므로 처음부터 상황의 상태를 알 수 있다.
처음부터 이미지를 빌드하는것은 프로세스에서 장점이자 단점일 수 있다. 이전 단락에서 언급했듯이, 처음빌딩하는것은 모든것을 최신 상태로 유지하고 알려진 상태(known state)에서 시작할 수 있다. 그러나, 처음빌드 하는것은 일반적으로 재구성 할 필요가 없다는 것을 다시 빌드하는 것을 의미하느로 훨씬 오래걸린다.
욕토 프로젝트는 추가적인 빌드를 지원하는 공유된 상태의 코드를 구현한다. 공유 상태 코드의 구현은 오픈임베디드 증가 빌드 서포트 시스템과 기본적인 장애물에 대한 아래의 질문에 답한다:
- 어떤 시스템이 변경되었고, 어떤시스템은 변경되지 않았냐?
- 어떤 소프트웨어가 변경되었거나 제거되었냐?
- 사용할 수 있을 때 처음부터 다시 빌드 할 필요가 없는 미리 빌드 된 구성 요소는 어떤 방식이냐??
네이티브와 크로스패키지는 빌드호스트에서 작동한다. 그러나, 크로스패키지는 타켓 아키텍처에 대한 출력을 생성한다. |
체크섬은 따라서 WORKDIR을 배재해야 한다. 작업폴더를 배재시키는것에 대한 간단한 접근법은 몇개의 값을 WORKDIR에 설정하고 "실행"스크립트에 채크섬을 설정하는 것 이다.
또 다른 문제점은 "실행"스크립트가 호출되거나 수신되지 않을 수 있는 기능을 포함하고 있기 때문이다. 증분 빌드 해결책에는 디펜던시(dependencies)와 쉘 함수(shell function) 을 파악하는 코드가 있다.
이코드는 "run"스크립트를 최소집합으로 줄이기위해 사용된다. 그렇게 해서 앞서 언급한 문제를 해결하고 보너스로 "run"스크립트를 훨씬 더 읽기 쉽게 만들어 준다.
쉘 스크립트의 해결책에 대해 어느정도 알아보았다. 파이썬 작업에 대해서는 어떻냐? 같은 관점이지만 이 작업은 더 복잡하다. 이 프로세스는 파이썬 함수의 접근 변수를 알아야 하고 어떤 함수를 부르는지 알아야 한다. 게다가, 증분 빌드 해결책은 먼저 변수 및 함수 종속성(dependencies)를 파악한 코드가 들어있으며 작업의 입력에 사용된 데이터의 체크섬을 생성한다.
WORDIR 경우에는, 종속성(dependencies)을 무시해야 하는 상황이다. 이 경우에는, 아래의 명령어로부터 의존성을 거부하는 빌드 프로세스를 지시할수 있다.
PACKAGE_ARCHS[vardepsexclude] = "MACHINE" |
이 예는 MACHINE(예: QEMUARM, QEMUX86, QEMUX86-64)의 값에 의존하지않는 PACKAGE_ARCHS변수를 보장한다.
마찬가지로, BitBake가 찾을 수 없는 종속성을 추가해야하는 경우가 있다. 아래 라인처럼 입력해서 해낼 수 있다.
PACKAGE_ARCHS[vardeps] = "MACHINE" |
이 예는 분명하게 PACKAGE_ARCHS 에 종속성(dependencies)처럼 MACHINE 변수를 추가한다.
즉시 처리하는(in-line)파이썬의 경우를 생각해보면, 예를들어 BitBake는 의존성(dependencies)를 파악할 수 없다. 디버그모드를 실행했을 때(예 : -DDD를 사용할때), BitBake는 종속성을 파악할 수 없는것을 발견하면 출력을 생성한다. Yocto 프로젝트 팀은 현재 이 의존성(dependencies)에 대해 자세히 관리하지 않고 이 상황을 고치는것이 필요하다.
지금까지, 이부분에는 작업에서 직접 입력하는것에 대한 논의가 제한적이였다. 직접입력기반 정보는 코드에서 "basehash"라고 한다. 그러나, 작업의 간접입력에 대한 질문은 여전히 남아있다 - 이러한 것들은 이미 Build Directory 에 언급되어있다. 이 작업을 위한 체크섬(또는 시그니처)는 각 작업에 의존하는 모든 것들의 해쉬를 추가하는 것이 필요하다. 추가할 종속성을 선택하면 정책은 결정이된다. 그러나, 이 효과는 작업 종속성의 해쉬(hash)와 basehash를 포함하는 마스터 체크섬(master checksum)을 생성한다.
코드레벨에선, basehash 와 종속작업(dependent task) 둘다 영향을 받을 수 있는 다양한 방법이 있다. BitBake구성파일과 함께, BitBake가 basehash를 만드는데 도움이 되는 몇 가지 추가 정보를 제공할 수 있다. 아래의 구문은 결과적으로 전역 변수 의존성 배제(global variable dependency exclude) 리스트를 생성한다 - 변수는 절때 어느 체크섬에도 포함되지 않는다 :
BB_HASHBASE_WHITELIST ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH DL_DIR \ SSTATE_DIR THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL TERM \ USER FILESPATH STAGING_DIR_HOST STAGING_DIR_TARGET COREBASE PRSERV_HOST \ PRSERV_DUMPDIR PRSERV_DUMPFILE PRSERV_LOCKDOWN PARALLEL_MAKE \ CCACHE_DIR EXTERNAL_TOOLCHAIN CCACHE CCACHE_DISABLE LICENSE_PATH SDKPKGSUFFIX" |
위에 예에서는 WORKDIR이 제외되었으므로 해당 변수는 실제로 허용 목록에 있는 TMPDIR 내의 경로로 생성됩니다. 종속성 체인(dependency chain)을 통해 포함하는 의존 작업의 해시를 결정하는 룰은 매우 복잡하고 보통 파이썬 함수로 실행된다. meta/lib/oe/sstatesig.py에서 코드는 이 예제에서의 두가지를 보여주고 또한 원하는 경우 시스템에 자신의 정책을 삽입하는 방법을 보여줍니다. 이 파일은 OE-Core가 사용하는 "OE-Basic"과 "OEBasicHash". 기본적으로,
'옥탑방주인 > Yocto' 카테고리의 다른 글
Yocto Project Reference manual chap3 - 3.5 (0) | 2017.08.31 |
---|---|
Yocto Project ref-manual chapter3 (0) | 2017.08.28 |
라즈베리파이3(Raspberry Pi3)에 Yocto Project 설치 (0) | 2017.08.28 |
Yocto Project manual set (0) | 2017.08.21 |