2/24/2020

Yocto 의 User Configuration

1. Yocto 의 User Configuration 

Yocto는 처음 build space를 만들고 설정이 되어야 bitbake를 사용이 가능하다.
아래와 같이 보통 Yocto의 Build space를 설정하면서 User configuration도 같이 자동으로 설정이 된다.

  • build space 설정
source에서 아래와 같이 build space를 설정하면 자동으로 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에 대해 좀 더 자세히 알아보자 

  • bblayers.conf
각 Yocto의 Layer의 위치와 Layer를 추가 /삭제를 담당하며 이외 SUB 설정도 가능하다.
이곳에서 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
Build directory의 전체 환경설정으로 Build 관련설정을 비롯하여, 기본적인 MACHINE 설정 DISTRO 설정 기타 Package 관련설정등 다양한 설정이 가능하다.

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

$ 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 을 찾을 수 있다

$ 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마다 조금씩 다르므로 주의하자