Yocto

Yocto (OpenEmbedded) 의존성 관리

chbae 2023. 9. 22. 21:30
728x90
반응형

Yocto 프로젝트에서 의존성 관리하는 방법과 의존성을 쉽게 추출하여 볼 수 있는 도구가 있어 간단히 소개하고자 한다.

의존성 (Dependency) 관리

의존성에는 크게 런타임 의존성과 빌드타임 의존성이 있다. 말 그대로 런타임 의존성은 실제 시스템 동작시 필요한 의존성이다. 예를 들면 시스템에서 실행 중 A라는애플리케이션에서 버튼을 눌러 특정 동작을 하라고 명령을 내리면 IPC를 통해 다른 프로세스로 실행중인 B라는서비스의 API를 실행할 A 애플리케이션은 B 서비스에 런타임 의존성을 가진다고 할 수 있다. 빌드 타임 의존성은 빌드 과정중에 필요한 의존성으로 빌드할 때 필요한 라이브러리가 그 하나의 예가 될 수 있다.

 

Yocto에서는 각 레시피에서 DEPENDS와 RDEPENDS 변수를 통해 빌드타임, 런타임 의존성을 정의한다. DEPENDS 변수에는 레시피 이름으로 빌드 타임 의존성을 설정하고, RDEPENDS 변수에는 패키지 이름으로 런타임 의존성을 정의한다. 레시피에 정의된 대로 각 컴포넌트는 Yocto 빌드 시 다음과 같은 순서로 task가 실행 된다.

 

 

빌드 타임 의존성은 DEPENDS에 의존성 있는 recipes들을 정의하고 실제로 do_fetch 이후 do_configure전에 do_prepare_recipe_sysroot 로 정의되어 실행된다. 이 단계에서는 의존성 있는 recipes의 sysroot에 들어가는 파일들을 가지고 온다.

 

런타임 의존성은 RDEPENDS_${PN}이나 ${PN}자리에 현 recipe에서 생성되는 다른 package 이름 (ex, ${PN}-tools) 적을 수 있다. DEPENDS에서 정의하는 recipe 이름과 달리 여기서는 package 이름을 정의한다.

 

의존성 관리를 잘해야지 빌드 시간을 단축할 수 있고, 이 의존성을 잘 설정하도록 아키텍처를 잘 잡아야한다. 불필요하게 의존성을 설정해버리면 의존성이 실제로 없지만 정의된 의존성으로 인해 다른 컴포넌트가 빌드되는 불상사(?)가 일어날 수 도 있다.

 

의존성을 알아내는 방법은 어려가지가 있다. bitbake [컴포넌트 이름] -g 를 하면 여러가지 파일이 나오는데 그중 task-depends.dot 파일을 열어보면 각 의존성이 dot 그래프 형식으로 나열되어 있다.

 

보기 어려울 수 있어 필자는 oe-deptools 를 사용하고 있고 버전이 오래되어 필자가 fork해서 https://github.com/chbae/oe-deptools에서 약간 수정해서 사용하고 있다.

 

 

help를 보면 사용하는데 큰 어려움은 없을 것이다. task-depends.dot 파일을 개발자가 조금 더 보기 편하게 변환해주는 툴로 생각하면 된다. 

728x90