Yocto는 처음 build space를 만들고 설정이 되어야 bitbake를 사용이 가능하다.
아래와 같이 보통 Yocto의 Build space를 설정하면서 User configuration도 같이 자동으로 설정이 된다.
- build space 설정
$ source poky/oe-init-build-env build // 일반적인 설정 or $ source fsl-setup-release.sh -b build-fb // BSP 기반의 다른 설정 //자동으로 build space로 이동 $ ls conf/ bblayers.conf bblayers.conf.org local.conf local.conf.org local.conf.sample sanity_info templateconf.cfg
Yocto 의 Version 정보와 기본문법
Yocto의 각 Version 정보들과 각 Confugration을 비롯하여, 기본문법을 확인하고 보도록하자
https://ahyuo79.blogspot.com/2020/01/raspberry-pi3-linux-yocto.html
1.1 Build의 User Configuration 설정
Yocto에서 Build directory에 존재하며, 각각 bblayer 와 local 전체 환경변수를 설정을 담당한다.
bblayer.conf 와 local.conf에 대해 좀 더 자세히 알아보자
https://ahyuo79.blogspot.com/2020/01/raspberry-pi3-linux-yocto.html
1.1 Build의 User Configuration 설정
Yocto에서 Build directory에 존재하며, 각각 bblayer 와 local 전체 환경변수를 설정을 담당한다.
bblayer.conf 와 local.conf에 대해 좀 더 자세히 알아보자
- bblayers.conf
이곳에서 BBFILES는 의미가 없으며, 실제 Layer configuration에서 설정되어진다.
아래의 BSPDIR은 python으로 동작되며, 다른곳에서는 없을 수도 있으며, BBLAYERS를 절대 PATH로 사용해도 상관없다.
bblayers.conf 관련 Reference Manual 참조
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#structure-build-conf-bblayers.conf
$ cat conf/bblayers.conf // Build space 에서 bblayers.conf LCONF_VERSION = "6" BBPATH = "${TOPDIR}" ## 아래와 같이 Python으로 작성도 가능 ## d.getVar('FILE', True) ## $ bitbake -e | grep ^FILE= 와 동일 (bblayer.conf 위치찾기) '/../..' 를 expand하여 source 위치를 찾음 #BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}" BSPDIR := "/home/jhlee/yocto" ## 이곳에서 BBFILES의 선언은 무의미하며, Layer Configuration에서 설정 BBFILES ?= "" ## BBLYAERS를 이용하여 현재 존재하는 Layer들을 추가 BBLAYERS = " \ ${BSPDIR}/sources/poky/meta \ ${BSPDIR}/sources/poky/meta-poky \ \ ${BSPDIR}/sources/meta-openembedded/meta-oe \ ${BSPDIR}/sources/meta-openembedded/meta-multimedia \ \ ${BSPDIR}/sources/meta-freescale \ ${BSPDIR}/sources/meta-freescale-3rdparty \ ${BSPDIR}/sources/meta-freescale-distro \ " # i.MX Yocto Project Release layers BBLAYERS += " ${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-bsp " BBLAYERS += " ${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-sdk " BBLAYERS += " ${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-ml " BBLAYERS += "${BSPDIR}/sources/meta-browser" BBLAYERS += "${BSPDIR}/sources/meta-rust" BBLAYERS += "${BSPDIR}/sources/meta-openembedded/meta-gnome" BBLAYERS += "${BSPDIR}/sources/meta-openembedded/meta-networking" BBLAYERS += "${BSPDIR}/sources/meta-openembedded/meta-python" BBLAYERS += "${BSPDIR}/sources/meta-openembedded/meta-filesystems" BBLAYERS += "${BSPDIR}/sources/meta-qt5" ## /var/log 인 경우 보통 /tmpdir 즉 ramdisk 기반으로 되지만 이를 사용하지 않는다는 의미 ## not used /var/log tmpdir VOLATILE_LOG_DIR = "no"
- local.conf
local.conf 관련 Reference Manual 참조
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#structure-build-conf-local.conf
local.conf에서 사용되어지는 설정이며 이 내용과 아래내용을 같이 보도록하자
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#ref-varlocality-config-local
이외에도 Build 에 세부설정도 가능
https://stackoverrun.com/ko/q/11519947
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#ref-varlocality-config-local
$ cat conf/local.conf // Build space 에서 local.conf ## MACHINE을 선택을 해야 MACHINE Layer가 동작하므로 중요 (Device Tree 및 Kernel/Uboot Config에 영향) MACHINE ??= 'imx6sxsabresd' ## DISTRO를 선택해야 배포하는 Distro Layer 설정이 되므로 중요 DISTRO ?= 'fsl-imx-fb' ## PACKAGE 방식의 선택 rpm /ipk / deb PACKAGE_CLASSES ?= 'package_rpm' EXTRA_IMAGE_FEATURES ?= "debug-tweaks" USER_CLASSES ?= "buildstats image-mklibs image-prelink" PATCHRESOLVE = "noop" ## Disk Monitor 이며, 각각의 Directory의 제한을 둘 수가 있다. BB_DISKMON_DIRS ??= "\ STOPTASKS,${TMPDIR},1G,100K \ STOPTASKS,${DL_DIR},1G,100K \ STOPTASKS,${SSTATE_DIR},1G,100K \ STOPTASKS,/tmp,100M,100K \ ABORT,${TMPDIR},100M,1K \ ABORT,${DL_DIR},100M,1K \ ABORT,${SSTATE_DIR},100M,1K \ ABORT,/tmp,10M,1K" PACKAGECONFIG_append_pn-qemu-system-native = " sdl" PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl" CONF_VERSION = "1" ## 각 DL_DIR를 이용하여 Download의 위치를 마음대로 변경할 경우 직접설정 #DL_DIR ?= "${BSPDIR}/downloads/" DL_DIR ?= "${BSPDIR}/../../downloads/" #ACCEPT_FSL_EULA = "1" ## ## UBOOT_CONFIG 설정은 아래에서 다시 설정 ## #UBOOT_CONFIG = "emmc"
이외에도 Build 에 세부설정도 가능
https://stackoverrun.com/ko/q/11519947
BLACKLIST를 만들어서 설정가능
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-SDK_LOCAL_CONF_BLACKLIST
i.MX6 기준으로 build/conf/local.conf 설정의 예
Build에 관련된 부분을 추가하여 설정 local.conf
https://ahyuo79.blogspot.com/2015/10/imx6.html
1.2 Source 의 User Configuration 확인 및 수정
원래는 아래와 같이 검색을 하면, 각각의 Build의 원래 User Configuration 을 찾을 수 있다
특정 Vendor의 BSP의 경우 직접 Shell Script을 만들어서 내부에서 만들어 구성하므로, 상위 i.MX의 경우 fsl-setup-release.sh를 분석하면 된다.
각각의 Yocto마다 그리고 Chip Vendor마다 조금씩 다르므로 주의하자
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-SDK_LOCAL_CONF_BLACKLIST
i.MX6 기준으로 build/conf/local.conf 설정의 예
Build에 관련된 부분을 추가하여 설정 local.conf
https://ahyuo79.blogspot.com/2015/10/imx6.html
1.2 Source 의 User Configuration 확인 및 수정
원래는 아래와 같이 검색을 하면, 각각의 Build의 원래 User Configuration 을 찾을 수 있다
$ cd sources // Sources 로 이동 $ find . -name local.conf* // Sources 에서 User config의 local.conf 찾기 ./meta-rust/conf/local.conf.sample ./poky/meta-poky/conf/local.conf.sample ./poky/meta-poky/conf/local.conf.sample.extended $ find . -name bblayers.conf* // Sources 에서 User config의 bblayers.conf 찾기 ./base/conf/bblayers.conf ./meta-rust/conf/bblayers.conf.sample ./poky/bitbake/lib/layerindexlib/tests/testdata/build/conf/bblayers.conf ./poky/meta-poky/conf/bblayers.conf.sample
특정 Vendor의 BSP의 경우 직접 Shell Script을 만들어서 내부에서 만들어 구성하므로, 상위 i.MX의 경우 fsl-setup-release.sh를 분석하면 된다.
$ vi fsl-setup-release.sh // User Configuration 설정 .......... # modified exited Layers and checked recipes related to new packages echo "" >> $BUILD_DIR/conf/bblayers.conf echo "BBLAYERS += \"\${BSPDIR}/sources/meta-browser\"" >> $BUILD_DIR/conf/bblayers.conf echo "BBLAYERS += \"\${BSPDIR}/sources/meta-rust\"" >> $BUILD_DIR/conf/bblayers.conf echo "BBLAYERS += \"\${BSPDIR}/sources/meta-openembedded/meta-gnome\"" >> $BUILD_DIR/conf/bblayers.conf echo "BBLAYERS += \"\${BSPDIR}/sources/meta-openembedded/meta-networking\"" >> $BUILD_DIR/conf/bblayers.conf echo "BBLAYERS += \"\${BSPDIR}/sources/meta-openembedded/meta-python\"" >> $BUILD_DIR/conf/bblayers.conf echo "BBLAYERS += \"\${BSPDIR}/sources/meta-openembedded/meta-filesystems\"" >> $BUILD_DIR/conf/bblayers.conf echo "BBLAYERS += \"\${BSPDIR}/sources/meta-qt5\"" >> $BUILD_DIR/conf/bblayers.conf # BUILD_DIR가 상위 Build Space PATH # # added 새롭게 만든 Layer 별도추가 (상위 Build의 bblayers.conf 적용) # echo "" >> $BUILD_DIR/conf/bblayers.conf echo "# Lora Project Release layers" >> $BUILD_DIR/conf/bblayers.conf echo "BBLAYERS += \"\${BSPDIR}/sources/meta-lora-net\"" >> $BUILD_DIR/conf/bblayers.conf # # # 각 기본설정 변경 VOLATILE_LOG_DIR = "no" 추가 (상위 Build의 bblayers.conf 적용) # echo "" >> $BUILD_DIR/conf/bblayers.conf echo "VOLATILE_LOG_DIR = \"no\"" >> $BUILD_DIR/conf/bblayers.conf # # 각 기본설정 변경 UBOOT_CONFIG = "emmc" 추가 (상위 Build의 loca.conf 적용) # # # changed boot mode echo "UBOOT_CONFIG = \"emmc\"" >> conf/local.conf ...........
각각의 Yocto마다 그리고 Chip Vendor마다 조금씩 다르므로 주의하자