준비
우분투에 필요한 패기지 설치
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev
라즈베리파이4 타겟으로 빌드
yocto 프로젝트를 설치한다.
poky를 git로 클론한다.
$ mkdir -p ~/Projects/Yocto/
$ cd ~/Projects/Yocto
$ git clone git://git.yoctoproject.org/poky
$ git checkout denfell
raspberrypi용 BSP 레이어와 의존 레이어를 git에서 추가한다.
$ cd ~/Projects/Yocto/poky
$ git clone git://git.yoctoproject.org/meta-raspberrypi -b dunfell
$ git clone git://git.openembedded.org/meta-openembedded -b dunfell
oe-init-build-env를 실행하여 환경을 설정한다.
$ source oe-init-build-env ~/Projects/Yocto/raspberrypi4
raspberrypi용 BSP레이어와 의존 레이어를 추가한다.
conf/bblayers.conf를 직접 편집해도 좋다.
$ bitbake-layers add-layer ../poky/meta-raspberrypi
$ bitbake-layers add-layer ../poky/meta-openembedded/meta-oe
$ bitbake-layers add-layer ../poky/meta-openembedded/meta-python
$ bitbake-layers add-layer ../poky/meta-openembedded/meta-multimedia
$ bitbake-layers add-layer ../poky/meta-openembedded/meta-networking
conf/local.conf 파일을 편집한다.
MACHINE ?= "raspberrypi4-64"
DL_DIR ?= "/home/user/Yocto/downloads"
SSTATE_DIR ?= "/home/user/Yocto/sstate"
## configure username and password
INHERIT_append = " extrausers"
EXTRA_USERS_PARAMS = "usermod -P root root; useradd -P user user;"
# configure build image to wic
IMAGE_FSTYPES = "wic"
# add additional image
## gdbserver for remote debugging
IMAGE_INSTALL_append = " gdbserver"
## ssh server for remote login
EXTRA_IMAGE_FEATURES += "ssh-server-openssh"
## text editor and mc
IMAGE_INSTALL_append = " nano"
IMAGE_INSTALL_append = " mc"
# add sdk on Yocto / not for kernel build
IMAGE_FEATURES += "dev-pkgs tools-debug"
IMAGE_INSTALL_append = " packagegroup-core-buildessential "
TOLLCHAIN_HOST_TASK += "nativesdk-cmake"
크로스 개발을 위한 SDK로 빌드한다.
$ bitbake core-image-minimal
$ bitbake core-image-minimal -c populate_sdk
빌드가 완료하면 ~/Projects/Yocto/raspberrypi4/tmp/deploy/images/raspberrypi4-64에 OS이미지가 만들어진다.
bmaptool 명령어를 사용하여 core-image-base-raspberrypi4-64.wic.bz2를 SD카드에 붙여넣는다.
$ cd ~/Projects/Yocto/raspberrypi4/tmp/deploy/images/raspberrypi4-64
$ sudo apt install -y bmap-tools
$ sudo bmaptool copy core-image-base-raspberrypi4-64.wic.bz2 /dev/sdX #sd 카드 디바이스 이름
간단한 레시지를 작성
간단하게 소스코드를 작성하여 컴파일한 실행파일을 설치하는 방법을 소개한다.
아래의 문서를 참고한다.
Creating a General Layer Using the bitbke-layers Script
$ cd ~/Projects/Yocto/poky
$ bitbake-layers create-layer meta-hello
$ ls meta-hello/
COPYING.MIT README conf recipes-example
$ cd ~/Projects/Yocto/raspberrypi4
$ bitbake-layers add-layer ../poky/meta-hello/
$ cat conf/bblayers.conf
$ cd ~/Projects/Yocto/poky/meta-hello
$ mkdir -p recipes-hello/hello && cd recipes-hello/hello
$ mkdir files && cd files
$ vim hello.c
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("Hello, world!\n");
return 0;
}
다음에 레시피(패키지 빌드하기 위해 사용하는 메타 데이터)를 작성한다.
$ cd ~/Projects/Yocto/poky/meta-hello/recipes-hello/hello
$ vim hello_1.0.bb
레시피 파일 작성방법은 아래 링크를 참조한다.
그러나, 이대로 빌드하면 실패하므로 TARGET_CC_ARCH += "${LDFLAGS}"을 추가한다.
Default Linker Hash Style Changed
LIC_FILES_CHKSUM 의 md5 를 모를 때는 공백으로 설정하여 빌드 에러 발생과 동시에 올바른 값이 표시되므로 수정하면 된다.
SUMMARY = "Simple helloworld application"
SECTION = "hello"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
TARGET_CC_ARCH += "${LDFLAGS}"
SRC_URI = "file://hello.c"
S = "${WORKDIR}"
do_compile() {
${CC} hello.c -o hello
}
do_install() {
install -d ${D}${bindir}
install -m 0755 hello ${D}${bindir}
}
local.conf 파일을 수정하여 이미지 추가를 지정한다.
IMAGE_INSTALL_append = " hello" # hello 앞에 공백을 넣어야 한다
$ bitbake core-image-minimal
로그인해서 hello 명령어를 실행하면 Hello, World! 가 표시된다.
'Yocto' 카테고리의 다른 글
레이어와 레시피가 있기 때문에 툴을 쉽게 설치할 수 있다. (0) | 2022.09.24 |
---|---|
Local.conf 수정하여 툴 추가 설치하기 (0) | 2022.09.24 |
Yocto 패키지 구성하기 (0) | 2022.09.19 |
툴체인 만들기 (1) | 2022.09.19 |