Yocto 프로젝트 Dunfell 에서 Kirkstone 로 마이그레이션 작업 중 다음과 같은 에러 메시지를 마주 했다.
Variable do_install_append contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake.
connman-conf.bb 레시피에 재정의된 함수는 다음과 같았다.
# Kernel IP-Config is perfectly capable of setting up networking passed in via ip=
do_install_append() {
...
}
Yocto 프로젝트 3.4 릴리스(honister) 와 함께 중요한 변경 사항이 있다.
이 릴리스에서 :
(콜론)은 가장 일반적으로 변수의 조건부 할당을 수행할 때 재정의를 참조하기 위해 _
(언더스코어)의 사용을 대체한다.
따라서 다음과 같은 항목은
SRC_URI_qemux86 = "file://somefile"
이제 다음과 같아야 한다.
SRC_URI:qemux86 = "file://somefile"
다음과 같은 qemux86 재정의 구문 예는
SRC_URI_append = " file://somefile"
SRC_URI_append_qemux86 = " file://somefile2"
SRC_URI_remove_qemux86-64 = "file://somefile3"
SRC_URI_prepend_qemuarm = "file://somefile4 "
FILES_${PN}-ptest = "${bindir}/xyz"
IMAGE_CMD_tar = "tar"
BASE_LIB_tune-cortexa76 = "lib"
SRCREV_pn-bash = "abc"
BB_TASK_NICE_LEVEL_task-testimage = '0'
이제 다음과 같아야 한다.
SRC_URI:append = " file://somefile"
SRC_URI:append:qemux86 = " file://somefile2"
SRC_URI:remove:qemux86-64 = "file://somefile3"
SRC_URI:prepend:qemuarm = "file://somefile4 "
FILES:${PN}-ptest = "${bindir}/xyz"
IMAGE_CMD:tar = "tar"
BASE_LIB:tune-cortexa76 = "lib"
SRCREV:pn-bash = "abc"
BB_TASK_NICE_LEVEL:task-testimage = '0'
이는 데이터 저장소에 대한 변수 쿼리에도 적용된다. 예를 들어 getVar
등을 사용할 때 d.getVar("RDEPENDS_${PN}")
는 d.getVar("RDEPENDS:${PN}")
가 된다.
이들 중 일부는 MACHINE 및 DISTRO 재정의와 같이 상당히 명백하지만 일부는 덜 명확하다. 예를 들어 RDEPENDS, FILES 등과 같은 패키징 변수는 패키지 이름(예: ${PN}
, ${PN}-ptest
)을 재정의로 사용한다.
이러한 재정의는 항상 OVERRIDES에 있는 것은 아니지만 패키징과 같은 특정 컨텍스트에서 조건부로 적용된다. task-<taskname>
은 또 다른 컨텍스트별 재정의이며, 이 경우 컨텍스트는 특정 작업이다.
레이어 마이그레이션을 돕기 위해 OE-Core에 변환 스크립트가 제공된다. 재정의로 구성된 후 레이어에서 사용된다면 다음과 같이 실행할 수 있다.
<oe-core>/scripts/contrib/convert-overrides.py <layerdir>
💡 단, 모든 경우를 100% 처리할 것으로 예상되지 않으므로 스크립트의 메모를 읽어보자. 특히 레이어가 사용하는 오버라이드(일반적으로 머신 및 배포판 이름)를 알려야 한다.
참고로 이 변환은 BitBake가 오버라이드가 무엇인지 아닌지를 보다 안정적으로 결정할 수 있게 해주기 때문에 중요하다. 언더스코어는 오버라이드하려는 의도 없이 변수 이름에도 사용되기 때문이다.
LZ4 및 Zstandard 압축 기능을 지원하려면 이제 lz4c, pzstd 및 zstd 명령을 빌드 호스트에 설치해야 한다. 이들은 일반적으로 대부분의 Linux 배포판에서 lz4 및 zstd 패키지로 제공된다. 우분투 배포판의 경우 다음과 같이 설치 할 수 있다.
sudo apt-get install zstd liblz4-tool # for Ubuntu Bionic or older
sudo apt-get install zstd lz4 # for Ubuntu Focal or newer
또는 배포판에서 제공하지 않는 경우 buildtools tarball의 일부로 사용할 수 있다. 자세한 내용은 빌드 호스트에 필요한 패키지를 참조한다.
더 많은 정보는 이곳에서 자세하게 안내하고 있다.