SW/Yocto

yocto 비트베이크 메타 데이터 나누기와 프로젝트를 이용한 개발에 대해 알아볼까요?

얇은생각 2018. 12. 11. 08:00
반응형

메타데이터 사용

Configuration(.conf) : 환경설정 파일은 전역으로 영향을 미치는 파일로 classes 레시피의 동작을 위한 정보를 제공한다.

Classes(.bbclass ) : classes 전체 시스템에서 이용할  있고 쉬운 유지보수와 코드 중복을 피하기 위해 레시피에 의해 상속될  있다.

Recipes(.bb .bbappend) : 레시피와 클래스는 파이썬과  스크립트 코드가 혼합되어 작성된다.


 

메타데이터 작업

비트 베이크의 환경 변수 옵션을 사용하면  변수의 값을 확인할  있다.


$: bitbake -e <recipe> | grep <variable>


 

기본 변수 설정

FOO = "bar"

변수 FOO값은 bar이다.


 

변수 확장

비트베이크는 변수참조를 지원한다문법은 거의  스크립트와 같다.

A = "aval"

B = "pre${A}post"

B preavalpost 결과를 갖는다한가지 명심해야될 점은 실제 사용될 시점에 변수 확장이 실행된다.


 

?= 사용한 기본  설정

기본값을 제공할 필요가 있을  연산자 ?= 사용될  있다.

A ?= "aval"


 

?? 사용한 기본값 설정

기본값을 제공하기 위한  다른 방법은 ??= 연산자를 사용하는 것이다. ??= 가지면 파싱절차가 끝날때까지 적용되지 않는다.


 

즉시 변수 적용

변수를 바로 적용할 필요성이 있을  := 연산자를 사용한다.


 

앞뒤 추가

  추가 연산자 두가지를 제공한다. +=  =+ 이다.


 

조건을 가진 메타데이터 집합

비트베이크는 조건을 가진 메타데이터 설정을 매우 쉬운 방법으로 제공한다Overrides를 호출함으로써 메커니즘이 완성된다.


 

조건적 추가

비트베이크는 overrides 있는 어떤 값을 기반으로 변수의 /뒤에 추가하는 것을 지원한다.


 

파일 포함

비트베이크는 파일을 포함하기 위한 두가지 방법을 제공한다.


Include 사용하면 비트베이크는  위치에 있는 파일을 추가하는 것을 시도한다추가 라인에서 특정 경로가 상대 경로이면 비트메이크는 bbpath내에서 찾을  있는 첫번째 것을 포함시킨다참조된 파일을 찾을  없어도 파싱이 실패되지 않는다.


Required에서 required 파일을 찾을  djqtedmaus PARSEERROR 보여준다이외의 다른 모든 관점에서 required include 사용하는 것과 같다. 



파이썬 변수 설정

비트베이크는 다음 문법을 사용함으로써 변수 설정  쉽게 파이썬 코드를 사용할  있다.

VARIABLE = "${<python-command>}"


 

실행가능한 메타데이터 정의

메타데이터 레시피(.bb) 클래스(.bbclass) 파일들은 다음과 같이  스크립트를 이용하여 만들  있다.


Do_mytask(){

Echo "hello, world

}


변수가 실행가능한 셸코드가 되는 것을 제외하고는 변수를 설정하는 것과 동일하다 스크립트를 작설할  bash또는 zsh 같이 셸에 특화된 코드를 사용하지 않도록 주의해야 한다확신이 안선다면 테스트 하기 위해서 dash 셸을 사용하는 것이 안전하다.



전역 네임스페이스에서 파이썬 함수 정의

변수나  다른 사요을 위한 값을 만들어 내기 위해 파이썬 함수를 사용할 필요가 있다보통 파이썬 함수를 작성할  비트베이크 데이베이스에 접근할 필요가 있다모든 메타데이터 사이에 규약은 d변수가 비트베이크의 데이터베이스를 가리키는데 사용하는 것이다.

 


상속시스템

InHerit 레시피에서 클래스를 사용하는 방법이다그것은 상속의 가장 기본적인 형식이다Autoconf automake 관련된 작업을 쉽게 추상화시킬수 있고 그것을 레시피에서 사용하기 위해 .bbclass 넣을  있다가장 흔히 사용되는 autoconf 또는 automake 기반의 프로젝트들을 쉽게 작업을 하기 위해 기본적으로 제공하도록 비트베이크는 autotools.bbclass 상속받도록 가리킨다.



소프트웨어 개발키트

소프트웨어 개발 키트는 개발과 디버깅을 하기 위한 파일과 툴의 모음이다툴은 검파일러링커디버거외부 라이브러리 헤더를 포함하고 특정 유틸리티나 애플리케이션들을 포함할   있다보통 이러한 프로그래밍 툴을 툴체인이라 부른다포키가 비트베이크를 이용해 태스크들을 실행할  타깃을 위한 바이너리를 컴파일하고 링크하기 위해 툴체인이 필요하다 툴은 빌드 시스템 내부에서 사용되기 떄문에 내부 툴체인이라 불린다 툴은 외부용으로 준비되지 않아 외부용으로 사용되면 안되지만특수한 경우에는  용도로 사용할 수도 있다.


 

포키 SDK 이용

포키 환경을 이용해 외부에서 사용할  있는 툴체인을 만들  있따포키는 포키가 설치된 환경과 독립적인 컴퓨터에 설치될  있는 SDK 패키지를 만들어낸다추가로 설치된 툴체인은 내부 툴체인과 호환 가능하다. sdk 우리의 목적에 맞게 헤더와 라이브러리 파일들을 제공할 수도 있다.


 

이미지 기반 SDK 이용

이미지 기반의 SDK 만들기 위해 다음 명령어를 실행한다.


$: bitbake core-image-full-cmdline -c populate_sdk


생성된 스크립트는 사용하기 전에 설치되어야 한다.




범용적 SDK : meta-toolchain

SDK 만드는 다른 방법은 크로스 컴파일러디버그 기본 헤더와 라이브러리를 포함하는 범용적 SDK 만드는 것이다이를 meta-toolchain이라 부르고보통 커널과 부트로더의 개발과 디버그를 위해 이용된다.


$: bitbake meta-toolchain



SDK 이용

커스텀 애플리케이션을 빌드하기 위해 SDK 사용해본다Hello-world.c 예로들어 arm 아키텍처를 타깃으로 빌드할  있다.


$: source /opt/poky/1.6/environment-setup-armv5te-poky-linux-gnueabi

{CC} hello-world.c -o hello-world

 

생성된바이너리가 원하는 타깃 아키텍처에 맞게 생성됐는지 확인하려면 다음과 같이 file 유틸리티를 사용한다.


File hello-world


일반적으로 이용되는  다른 프로젝트는 리눅스 커널이다리눅스 커널은 링킹을 위해 ld 유틸리티를 이용하기 떄문에 gcc 사용할  디폴드 옵션으로 정의되는 ldflags 변수를 unset 필요가 있다리눅스 커널 소스 코드를 빌드하려면 다음 명령어들을 이용한다.


$: source /opt/poky/1.6/environment-setup-armv5te-poky-linux-gnueabi

Unset ldflags

Make defconfig

Make uimage


 

타깃에서 애플리케이션 개발

타깃에서 개발하기 위한  번째 방법은 외부 툴체인을 이용해 개발 이미지를 만드는 것이다 이미지는 헤더 파일들과 라이브러리 링크들로 구성된다 이미지는 커스텀 애플리케이션을 위한 빌드 환경을 제공하고 커스텀 툴체인이나 욕토 프로젝트 외부 툴체인과 함께 사용될 수도 있다개발 비드 대신 네이티브 빌드를 해야하는 경우포키 환경설정을 통해 sdk이미지를 만들수 있다 이미지는 툴체인과 개발용 패키지를 포함하고 있다 이를 이용하여 실제 환경에서 커스텀 애플리케이션을 빌드실행테스트디버깅할  있다는 의미이다.


 

이클립스와 통합

이클립스는 커스텀 애플리케이션 개발과 디버깅에 매우 널리 쓰이고 있는 강력한 ide이클립스를 포키 sdk 이용하게 설정할  있다지원 가능한 이클립스 버전과 어떻게 설정하는지는 욕토 프로젝트 개발 매뉴얼에 나와 있다또한 욕토 프로젝트 dt 범용적 툴체인에 기반을  이미지도 포함되어 있다또한이클립스와 타깃을 이더넷으로 연결하여 생성된 바이너리를 배포할   있다바이너리 파일들과 필요한 아티팩트를 타깃 루트 파일 시스템에 복사하고 전송 이후 바로 사용할  있다.


반응형