기본 이미지 생성은 Yocto 프로젝트의 핵심 기능 중 하나로, 사용자가 자신만의 맞춤형 운영체제 이미지를 생성할 수 있게 한다. 이 섹션에서는 Yocto 프로젝트를 사용하여 기본 이미지를 생성하는 방법을 단계별로 설명한다.
빌드 환경 설정
이미지 생성을 시작하기 전에, Yocto 프로젝트의 빌드 환경을 설정해야 한다. 이를 위해 아래의 명령어 및 절차를 따른다.
-
Yocto 프로젝트의 Poky 체크아웃
sh git clone git://git.yoctoproject.org/poky cd poky
-
빌드 디렉토리 설정
sh source oe-init-build-env
위 명령어를 실행하면build
디렉토리가 생성되고 빌드 환경이 설정된다.
빌드 구성 변경
Yocto 프로젝트는 높은 수준의 커스터마이즈가 가능한 설정 파일을 제공한다. 주요 설정 파일들은 build/conf
디렉토리에 위치해 있다.
local.conf
파일 수정
local.conf
파일에서는 빌드 타겟, 머신 등의 설정을 할 수 있다. 기본적인 설정은 아래와 같다.
sh
nano conf/local.conf
-
MACHINE 설정: 빌드할 타겟 머신을 지정한다. 예를 들어, qemuarm을 설정하려면 다음과 같이 입력한다.
MACHINE = "qemuarm"
-
DL_DIR 설정: 소스 파일을 다운로드할 디렉토리를 지정한다.
DL_DIR ?= "${TOPDIR}/downloads"
-
SSTATE_DIR 설정: 공유 상태 캐시 디렉토리를 지정한다.
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
-
bblayers.conf
파일 수정
BBLayers 설정 파일을 통해 사용 가능한 레이어를 지정한다. Poky 디렉토리의 레이어를 기본으로 설정할 수 있다.
sh
nano conf/bblayers.conf
기본 설정은 아래와 같이 한다.
plaintext
BBLAYERS ?= " \
${TOPDIR}/../meta \
${TOPDIR}/../meta-poky \
${TOPDIR}/../meta-yocto-bsp \
"
이미지 생성
빌드 환경이 설정되었으면, 본격적으로 이미지를 빌드한다. 일반적으로 사용되는 이미지는 core-image-minimal
이다. 아래와 같은 명령어를 통해 이미지를 빌드할 수 있다.
bitbake core-image-minimal
이 명령어는 Yocto 빌드 시스템이 필요한 모든 소스 코드를 다운로드하고, 패키지를 생성하며, 최종적으로 이미지를 생성한다.
빌드 결과는 build/tmp/deploy/images/<machine>
디렉토리에 생성된다. 여기서 <machine>
은 local.conf
파일에서 설정한 MACHINE
변수에 해당하는 값이다.
생성된 이미지 확인
생성된 이미지는 아래와 같이 확인할 수 있다.
ls build/tmp/deploy/images/qemuarm/
이 디렉토리에는 생성된 커널 이미지, 파일 시스템 이미지, 디버깅 심볼 등의 파일이 포함되어 있다.
이미지 커스터마이징
기본 이미지를 생성한 후, 사용자의 필요에 맞게 이미지를 커스터마이징할 수 있다. Yocto 프로젝트에서는 레시피와 레이어를 통해 이미지 구성 요소를 관리하고 변경할 수 있다.
레시피 추가 및 수정
레이어를 통해 패키지 레시피를 관리하고, 이미지 레시피에 추가할 수 있다. 예를 들어, 새로운 애플리케이션을 포함하고자 한다면 관련 레시피를 작성하고 이미지에 포함시켜야 한다.
- 새로운 레시피 생성
예를 들어, meta-custom
이라는 새로운 레이어를 생성하고, 그 안에 사용자 정의 애플리케이션 레시피를 추가하는 방법이다. 먼저 meta-custom
레이어를 추가한다.
sh
bitbake-layers create-layer meta-custom
- 레이어 디렉토리 구조
생성된 meta-custom
레이어의 디렉토리 구조는 아래와 같다.
plaintext
meta-custom/
├── conf
│ └── layer.conf
├── recipes-example
│ └── example
│ └── example_1.0.bb
- 레시피 작성
recipes-example/example/example_1.0.bb
파일을 작성한다. 가장 기본적인 형태는 아래와 같다.
```plaintext SUMMARY = "Example recipe" LICENSE = "MIT"
SRC_URI = "file://example-1.0.tar.gz"
S = "${WORKDIR}/example-1.0"
do_install() { install -d {D}{bindir} install -m 0755 example {D}{bindir} } ```
- 레시피 추가
생성된 레이어를 bblayers.conf
파일에 추가한다.
plaintext
BBLAYERS ?= " \
${TOPDIR}/../meta \
${TOPDIR}/../meta-poky \
${TOPDIR}/../meta-yocto-bsp \
${TOPDIR}/../meta-custom \
"
- 이미지 레시피 수정
커스터마이즈된 이미지를 만들기 위해 core-image-minimal.bb
파일을 수정하거나 새로운 이미지 레시피를 작성한다.
sh
nano meta-custom/recipes-core/images/core-image-custom.bb
```plaintext
require recipes-core/images/core-image-minimal.bb
IMAGE_INSTALL += "example"
```
- 이미지 빌드
이미지를 다시 빌드한다.
sh
bitbake core-image-custom
이 명령어는 새로운 레시피를 포함한 커스터마이즈된 이미지를 생성한다.
빌드 최적화
Yocto 빌드 시스템은 다양한 최적화 옵션을 제공한다. 빌드를 가속화하고, 출력 이미지를 최적화하려면 local.conf
에서 몇 가지 설정을 변경할 수 있다.
-
PARALLEL_MAKE: 빌드 중 사용할 CPU 코어 수를 지정한다.
plaintext PARALLEL_MAKE = "-j4"
-
BB_NUMBER_THREADS: BitBake가 동시에 실행할 수 있는 작업 수를 설정한다.
plaintext BB_NUMBER_THREADS = "4"
-
INHERIT += "rm_work": 빌드 완료 후 워크 디렉토리의 불필요한 파일을 제거하여 디스크 공간을 절약한다.
plaintext INHERIT += "rm_work"
이미지 디버깅 및 테스트
이미지 생성 후, 디버깅과 테스트는 안정적이고 기능적인 OS 이미지를 보장하는 데 필수적인 과정이다.
- QEMU를 사용한 테스트
빌드된 이미지를 QEMU를 사용하여 에뮬레이션할 수 있다. 예를 들어, qemuarm 이미지를 테스트하려면 아래의 명령어를 사용한다.
sh
runqemu qemuarm
- 디버깅 툴 사용
Yocto 프로젝트는 다양한 디버깅 툴을 제공한다. 예를 들어, GDB를 사용하여 에러를 추적할 수 있다.
- 로그 파일 분석
빌드 과정에서 생성된 로그 파일을 분석하여 문제점을 파악할 수 있다. 로그 파일은 build/tmp/log
디렉토리에 저장된다.