이전에는 Chip Vendor의 Yocto를 가져다 사용하다보니, Yocto Version에 크게 신경을 쓰지 않았으나,
처음부터 Yocto를 전체 구성하려면 어쩔수 없이 호환성 부터 체크를 해야겠다는 생각이 들어 아래와 같이 정리한다.
1.1 Yocto 의 Version 정보확인
Yocto의 Main이라고 할 수 있는 Poky의 각각의 Version을 알아보도록하자.
이외 OpenEmbbedded 관련부분도 알아보도록 하자.
- Yocto Poky Version (Branch)
Codename | Yocto Project Version | Release Date | Current Version | Support Level | Poky Version | BitBake branch |
---|---|---|---|---|---|---|
Gatesgarth | 3.2 | Oct 2020 | Dreaming | 24.0 | 1.48 | |
Dunfell | 3.1 | April 2020 | Dev | 23.0 | 1.46 | |
Zeus | 3.0 | October 2019 | 3.0.2 | Stable | 22.0 | 1.44 |
Warrior | 2.7 | April 2019 | 2.7.3 | Stable | 21.0 | 1.42 |
Thud | 2.6 | Nov 2018 | 2.6.4 | Community | 20.0 | 1.40 |
Sumo | 2.5 | April 2018 | 2.5.3 | EOL | 19.0 | 1.38 |
Rocko | 2.4 | Oct 2017 | 2.4.4 | EOL | 18.0 | 1.36 |
Pyro | 2.3 | May 2017 | 2.3.4 | EOL | 17.0 | 1.34 |
Morty | 2.2 | Nov 2016 | 2.2.4 | EOL | 16.0 | 1.32 |
Krogoth | 2.1 | Apr 2016 | 2.1.3 | EOL | 15.0 | 1.30 |
Jethro | 2.0 | Nov 2015 | 2.0.3 | EOL | 14.0 | 1.28 |
Fido | 1.8 | Apr 2015 | 1.8.2 | EOL | 13.0 | 1.26 |
Dizzy | 1.7 | Oct 2014 | 1.7.3 | EOL | 12.0 | 1.24 |
Daisy | 1.6 | Apr 2014 | 1.6.3 | EOL | 11.0 | 1.22 |
Dora | 1.5 | Oct 2013 | 1.5.4 | EOL | 10.0 | 1.20 |
Dylan | 1.4 | Apr 2013 | 1.4.3* | EOL | 9.0 | 1.18 |
Danny | 1.3 | Oct 2012 | 1.3.2 | EOL | 8.0 | 1.16 |
Denzil | 1.2 | Apr 2012 | 1.2.2 | EOL | 7.0 | 1.15 |
Edison | 1.1 | Oct 2011 | 1.1.2 | EOL | 6.0 | 1.13 |
Bernard | 1.0 | Apr 2011 | 1.0.2 | EOL | 5.0 | 1.11 |
- Yocto(Poky) Release 관련사항
https://wiki.yoctoproject.org/wiki/Releases
- Yocto(Poky) Branch(version) 와 Tag 파악
https://git.yoctoproject.org/cgit/cgit.cgi/poky/refs/
1.2 Yocto 관련부분 정리한 부분
우선적으로 직접 정리한 부분을 링크
- Yocto의 기본정보 와 동작 전체적인 흐름파악 (필요환경설정값 확인)
처음에 반드시 동작방식을 알아야함 (중요)
https://ahyuo79.blogspot.com/2015/10/yocto.html
https://ahyuo79.blogspot.com/2018/02/raspberry-pi-systems-with-yoctohtml.html
https://ahyuo79.blogspot.com/2015/10/yocto.html
- Yocto (Poky) 기반으로 직접 내가 구성한 예
https://ahyuo79.blogspot.com/2018/02/raspberry-pi-systems-with-yoctohtml.html
1.3 Yocto 관련된 정리된 외부 Manual
Yocto 관련된 정리되 Manual들을 링크했으며, 처음보기에는 Bootlin의 Manual이 가장 쉽게 잘 정리되어 나와있다.
- bootlin의 Yocto Reference Manual
TI의 BeagleBone 과 ST의 STM 예제
https://bootlin.com/training/yocto/
https://bootlin.com/doc/training/yocto/
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips
https://www.wolfssl.com/docs/yocto-openembedded-recipe-guide/
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#ref-variables-glossary
2. Yocto 의 Recipe/Config 의 기본지식
Yocto 의 경우 Layer의 config 를 비롯하여 각각의 recipes 및 User Configuration을 수정할 때 거의 동일한 것이 기본적인 환경변수의 Operator 지식이다.
이를 비롯하여 환경변수에 확장되는 Suffix 부분을 비롯하여 OVERRIDE부분을 알아두자.
2.1 Recipe/Config의 기본 Operators
상위 중 거의 쉽게 이해가 가는데, expand 개념만 이해가 가지 않아 예제로 정리
내 생각에 주의해야할 것은 recipe를 전체 Parsing할 때 동일한 이름의 변수가 있는 것들이 문제가 될수 있을 것 같다.
expand operator 관련예제
https://www.yoctoproject.org/pipermail/yocto/2012-March/005640.html
https://books.google.co.kr/books?id=t9L8AwAAQBAJ&pg=PT123&lpg=PT123&dq=yocto+operators&source=bl&ots=vFEXcnCGEZ&sig=ACfU3U1pVLs35QUeINgp55iD9dU_wJ4XHA&hl=ko&sa=X&ved=2ahUKEwiiv9_m76LoAhWEfd4KHYK2CqIQ6AEwBHoECAkQAQ#v=onepage&q=yocto%20operators&f=false
+=, =+, .= and =. 의 사용은 $BUILDDIR/conf/local.conf 피하라고 하는데, 이유는 Parsing순서문제이다 (세부사항은 bootlin 문서참조 or 아래링크참조)
https://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-IMAGE_INSTALL
2.2 환경변수의 일반 Suffix 기능
환경변수 or Task function Suffix 의 이름에 각각의 이름이 존재하며, 이부분은 Operator로 동작한다.
2.3 OVERRIDES의 기본개념 및 활용
value에 suffix "_"와 함께 소문자로 확장되어있는 것이 많이 존재하는데, 이부분은 OVERRIDES라는 것을 이용
주의해야할 것은 "-"로 확장되는것하고 다르므로 착각주의해야 할 것 같다
ex.1
ex.2
OVERRIDES 관련설명
FILESOVERRIDES : OVERRIDES의 세부설정이며, FILE에 적용
DISTROOVERRIDES: OVERRIDES의 세부설정이며 DISTRO 기준으로 적용
상위 3개의 OVERRIDES들의 설정은 최종 OVERRIDES에 포함적용되므로 세부적용시에는 상위 OVERRIDES를 사용하자.
3. Configuration 설정 과 Recipe 설정
Yocto의 Configuration은 아래의 Manual을 보면, Distro , Machine , Local 이지만, 각각 사용되는 곳을 보면 약간씩 달라진다.
Yocto의 Configuration 관련내용
https://www.yoctoproject.org/docs/2.4/ref-manual/ref-manual.html#ref-varlocality-configuration
https://bootlin.com/doc/training/yocto/
Yocto Slide PDF 문서들
https://bootlin.com/doc/training/yocto/yocto-slides.pdf
https://bootlin.com/doc/training/yocto/yocto-labs.pdf
https://bootlin.com/doc/training/yocto/yocto-slides.pdf
https://bootlin.com/doc/training/yocto/yocto-labs.pdf
- OpenEmbedded Layer의 Recipes 관련검색
- 다양한 Yocto Recipe 예제 (Xilinx Yocto의 예제)
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips
- recipe 작성방법 및 user configuration 설정방법
https://www.wolfssl.com/docs/yocto-openembedded-recipe-guide/
https://wiki.yoctoproject.org/wiki/Building_your_own_recipes_from_first_principles
- recipe 쉽게 작성방법 (recipetool 과 devtool 사용법)
주로 recpipetool 과 devtool 사용하지만, 나의 경우는 거의 직접 작성하는게 편하다.
https://www.yoctoproject.org/docs/latest/dev-manual/dev-manual.html#new-recipe-locate-or-automatically-create-a-base-recipe
https://www.lynxbee.com/creating-a-yocto-recipe-using-recipetool-script/
https://www.lynxbee.com/creating-a-yocto-recipe-using-recipetool-script/
reciptetool 이용법
http://embeddedguruji.blogspot.com/2019/03/yocto-recipetool-tutorial.html
1.4 Yocto 의 공식 Manual
https://www.yoctoproject.org/docs/current/bsp-guide/bsp-guide.html
https://www.yoctoproject.org/docs/current/bitbake-user-manual/bitbake-user-manual.html#basic-syntax
http://embeddedguruji.blogspot.com/2019/03/yocto-recipetool-tutorial.html
1.4 Yocto 의 공식 Manual
- Yocto Project Quick Build
- Yocto의 Reference Manual
- Yocto 의 Kernel 관련설정
- Yocto 의 BSP Manual
https://www.yoctoproject.org/docs/current/bsp-guide/bsp-guide.html
- Yocto 의 Bitbake User Manual
https://www.yoctoproject.org/docs/current/bitbake-user-manual/bitbake-user-manual.html#basic-syntax
- Yocto 관련 Manual 의 Variable 관련내용
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#ref-variables-glossary
2. Yocto 의 Recipe/Config 의 기본지식
Yocto 의 경우 Layer의 config 를 비롯하여 각각의 recipes 및 User Configuration을 수정할 때 거의 동일한 것이 기본적인 환경변수의 Operator 지식이다.
이를 비롯하여 환경변수에 확장되는 Suffix 부분을 비롯하여 OVERRIDE부분을 알아두자.
2.1 Recipe/Config의 기본 Operators
- Recipe 의 Value에 사용되어지는 Operators
- '=' expand the value when using the variable,
- ':=' immediately expand the value
- "+=" append (with space)
- "=+" prepend (with space)
- ".=" append (without space)
- "=." prepend (without space)
- "?=" assign if no other value was previously assigned, 이전에 할당이 없으면, 기본값
- "??=" same as previous, with a lower precedence, 상위와 같지만 우선순위 더 떨어짐
상위 중 거의 쉽게 이해가 가는데, expand 개념만 이해가 가지 않아 예제로 정리
- expand 와 immediately expand의 이해
내 생각에 주의해야할 것은 recipe를 전체 Parsing할 때 동일한 이름의 변수가 있는 것들이 문제가 될수 있을 것 같다.
ex.1 A = "11" B = "B:${A}" # 상위 A의 11을 미적용하고 마지막에 적용된 A로 적용 A = "22" C := "C:${A}" echo $C # C:22 echo $B # B:22
ex.2 T = "123" # 현재 값은 가지고 있지만,다시 T가 expand되며 그 값으로 대체 A := "${B} ${A} test ${test}" # 현재위치에서 즉시 expand B = "${T} bval" T = "456" C = "cval" C := "${C}append" # 이전값에 append를 즉시 추가 echo $A # test 123 # :=로 즉식 expand 해서 T가 123로 출력 echo $B # 456 bval # 마지막 expand된 값으로 출력 echo $C # cvalappend # 즉시 expand로 적용
expand operator 관련예제
https://www.yoctoproject.org/pipermail/yocto/2012-March/005640.html
https://books.google.co.kr/books?id=t9L8AwAAQBAJ&pg=PT123&lpg=PT123&dq=yocto+operators&source=bl&ots=vFEXcnCGEZ&sig=ACfU3U1pVLs35QUeINgp55iD9dU_wJ4XHA&hl=ko&sa=X&ved=2ahUKEwiiv9_m76LoAhWEfd4KHYK2CqIQ6AEwBHoECAkQAQ#v=onepage&q=yocto%20operators&f=false
+=, =+, .= and =. 의 사용은 $BUILDDIR/conf/local.conf 피하라고 하는데, 이유는 Parsing순서문제이다 (세부사항은 bootlin 문서참조 or 아래링크참조)
https://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-IMAGE_INSTALL
2.2 환경변수의 일반 Suffix 기능
환경변수 or Task function Suffix 의 이름에 각각의 이름이 존재하며, 이부분은 Operator로 동작한다.
- 환경변수의 Suffix 기능(_preprend/_append/_remove)
- IMAGE_INSTALL_prepend: 상위 Operator 기능과 동일(without space)
- IMAGE_INSTALL_append: 상위 Operator 기능과 동일(without space)
- IMAGE_INSTALL_remove: 환경값 삭제
- 상위 operator 와 suffix 기능의 우선순위
ex. 3 A = "1" A_append = "2" A_append = "3" A += "4" A .= "5" # 우선 operator 먼저 실행된 후 _append는 나중에 실행됨 # A 값은 "1 4523" 된다고 한다.
- Task Function의 Suffix operators
- do_configure() { }: config 설정
- do_configure_prepend() { }: do_configure 전에 실행
- do_configure_append() { }: do_configure 후에 실행
- do_compile() { }: do_compile 부분 실행
- do_install() { }: do_install 부분실행
- 이외 생략
- IMAGE_FSTYPES의 경우
2.3 OVERRIDES의 기본개념 및 활용
value에 suffix "_"와 함께 소문자로 확장되어있는 것이 많이 존재하는데, 이부분은 OVERRIDES라는 것을 이용
주의해야할 것은 "-"로 확장되는것하고 다르므로 착각주의해야 할 것 같다
ex.1
# Selecting a Variable , 즉 변수의 선택이 가능 # OVERRIDES를 이용하여 여러 변수 중 선택이 가능하며 반드시 소문자로만 작성 OVERRIDES = "arch:os:machine" # :로 분리되며, arch/os/machine 설정 # TEST_A 의 값이 아래와 같이 3개 존재하면 상위 OVERRIDES를 설정해서 arch or os or machine 중으로 설정 TEST_A = "testdefault" TEST_A_os = "testos" # OVERRIDES로 os 가 존재하므로 이를 설정되며, TEST = TEST_os 와 동일 TEST_A_none = "testnone" ##TEST_A의 값은 "testos" 사용 # TEST_B의 값 중 arch or os or machine 존재하지 않아서 기본값설정 TEST_B = "testdefault" TEST_B_del = "testdel" TEST_B_none = "testnone" ##TEST_B의 값은 "testdefault" 사용 # TEST_C의 값 중 os or machine 존재하지만 두개가 선택된 후 최종 마지막 선택된 machine선택 TEST_C = "testdefault" TEST_C_os = "testos" TEST_C_machine = "testmachine" TEST_C_none = "testnone" ##TEST_C의 값은 "testmachine" 사용
ex.2
# Appending and Prepending 에 확장 DEPENDS = "glibc ncurses" OVERRIDES = "mahcine:local # :로 분리되며, machine/local 설정 #DEPENDS_append 2개 존재하며, OVERRIDES로 machine을 설정했을 경우만 2번째 것은 설정가능 DEPENDS_append = "libxxx" # 상위 DEPENDS 에 libxxx 추가 DEPENDS_append_machine = "libmad" # OVERRIDES에 machine이 있어 동작 # 최종 DEPENDS 값은 "glibc ncurses libxxx libmad "
OVERRIDES 관련설명
- OVERRIDES 의 확장
# 주석 MACHINE ?= "arm9" MACHINEOVERRIDES ?= "${MACHINE}" SRC_URI = "file://test0.config " SRC_URI_append = "file://test1.config " SRC_URI_append_arm9 = "file://test2.config " # 최종 SRC_URI 값은 "file://test0.config file://test1.config file://test2.config "
FILESOVERRIDES : OVERRIDES의 세부설정이며, FILE에 적용
DISTROOVERRIDES: OVERRIDES의 세부설정이며 DISTRO 기준으로 적용
상위 3개의 OVERRIDES들의 설정은 최종 OVERRIDES에 포함적용되므로 세부적용시에는 상위 OVERRIDES를 사용하자.
3. Configuration 설정 과 Recipe 설정
Yocto의 Configuration은 아래의 Manual을 보면, Distro , Machine , Local 이지만, 각각 사용되는 곳을 보면 약간씩 달라진다.
- User Configuration 설정: Build Directory 에 위치하며, 기본으로 두개의 설정 구성
- Distro Configuration 설정: 아래의 Layer Configuration 과 구성되고, 별도로 구성
- Machin Configuration 설정: BSP를 위해서 Layer Configuration 구성되고 별도구성
- Layer Configuration 설정: 각 Layer마다 설정되는 기본 Configuration
- Recipe 설정
Yocto의 Configuration 관련내용
https://www.yoctoproject.org/docs/2.4/ref-manual/ref-manual.html#ref-varlocality-configuration