한국어
Embedded
 

yocto 프로젝트는 임베디드 리눅스 시스템 이미지 및 루트파일시스템, SDK를 만들기위해 일련의 도구 및 여러 패키지들을 제공하는 빌스시스템프로젝트이다.

 

임베디드 시스템을 위한 내용이므로 범용 개발 시스템이 필요한 경우 Raspbian과 같이 이미 사용자에게 친숙한 배포판을 사용하는 것이 좋다.

 

yocto는 메타레이어라는 개념을 이용하여 시스템을 구축하는데 메타레이어에는 bitbake라는 기본 빌드도구가 사용하는 메타데이터들, 즉 레시피와 클래스 및 구성 파일들이있다.

 

이 글에서는 yocto 프로젝트를 이용해서 라즈베리파이3를 위한 Qt + 임베디드 리눅스 시스템을 구축하는 것을 목표로하므로 이에 필요한 간단한 레이어를 직접 만들어보고 구성해볼 것이다.

 

먼저 Linux 기반 호스트 시스템이 있어야한다. 아래는 현재 공식적으로 지원하는 리눅스 배포판이다. (필자의 경우 우분투 18.04에서 진행하였다.)

 

Ubuntu 16.04 (LTS)

Ubuntu 18.04

Fedora 28

CentOS 7.x

Debian GNU/Linux 8.x (Jessie)

Debian GNU/Linux 9.x (Stretch)

OpenSUSE 42.3

 

그리고 공식적인건 아니지만 빌드시스템의 권장사양은 아래와 같다.

60~70GB이상의 여유공간 (공식적으론 50GB)

4GB이상의 메모리

쿼드코어 이상의 CPU

최근 빌드 환경에서 꽤 높은 사양으로 가능했다. 특히 메모리 관련해서... 

 

필수 패키지 설치

build-essential
chrpath
diffstat
gawk
libncurses5-dev
texinfo

 

우분투 16.04 이상이라면 파이썬 2.7도 설치해야한다.

python2.7

 

파이썬을 2.7로 링크

sudo ln -sf /usr/bin/python2.7 /usr/bin/python
sudo ln -sf /usr/bin/python2.7 /usr/bin/python2

 

clone

처음에 잠깐 얘기했듯이  yocto는 메타 레이어개념을 바탕으로 결과물을 만들어낸다. 그렇기 때문에 라즈베리파이를 위한 임베디드 리눅스 시스템 및 Qt 레이어를 정의해줘야한다.

 

현재 yocto 프로젝트에는 많은 레이어들이 있으며 아래 링크를 방문하여 참고하자.

https://www.yoctoproject.org/software-overview/layers/

http://layers.openembedded.org/layerindex/branch/master/layers/

 

우선 yocto핵심 레이어와 추가적으로 meta-openembedded, meta-qt5, meta-raspberrypi레이어가 필요하다.

 

욕토 프로젝트 브랜치는 thud(yocto2.6.x)를 사용한다. 

 

@ubuntu:~/workspace$ git clone -b thud git://git.yoctoproject.org/poky.git

@ubuntu:~/workspace/poky$ git clone -b thud git://git.openembedded.org/meta-openembedded

@ubuntu:~/workspace/poky$ git clone -b thud https://github.com/meta-qt5/meta-qt5

@ubuntu:~/workspace/poky$ git clone -b thud git://git.yoctoproject.org/meta-raspberrypi

 

meta-raspberrypi 레이어와 달리 meta-qt5 레이어는 이미지에 추가 할 수있는 일련의 레시피만 제공하고 이미지 자체는 제공하지 않는다.

 

폴더 생성 및 환경 설정

@ubuntu:~/workspace/poky$ cd ..

@ubuntu:~/workspace$ mkdir build

@ubuntu:~/workspace$ source poky/oe-init-build-env build/

 

이제 정말 간단한 레이어를 생성해본다.

 

메타레이어 생성

새로운 메타 레이어 생성을 위해 bitbake-layers create-layer 명령을 뒤에 meta-<레이어이름> 을 붙여 실행한다.

 

pjk@ubuntu:~/workspace/build$ bitbake-layers create-layer meta-mylayer

NOTE: Starting bitbake server...

Add your new layer with 'bitbake-layers add-layer meta-mylayer'

 

bblayers.conf파일 수정

비트베이크는 bblayers.conf 에 정의된 레이어들을 데이터베이스화 시키므로 이파일에 사용할 레이어들을 정의한다.

 

@ubuntu:~/workspace/build$ vim conf/bblayers.conf 

# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
 
BBPATH = "${TOPDIR}"
BBFILES ?= ""
 
BBLAYERS ?= " \
  /home/pjk/workspace/poky/meta \
  /home/pjk/workspace/poky/meta-poky \
  /home/pjk/workspace/poky/meta-openembedded/meta-oe \
  /home/pjk/workspace/poky/meta-openembedded/meta-multimedia \
  /home/pjk/workspace/poky/meta-openembedded/meta-networking \
  /home/pjk/workspace/poky/meta-openembedded/meta-perl \
  /home/pjk/workspace/poky/meta-openembedded/meta-python \
  /home/pjk/workspace/poky/meta-qt5 \
  /home/pjk/workspace/poky/meta-raspberrypi \
  /home/pjk/workspace/build/meta-mylayer \
  "

 

local.conf 수정

빌드 타겟머신을 정의하기위해 local.conf을 열고 아래처럼 수정한다.

 

@ubuntu:~/workspace/poky/build/conf$ vim local.conf

MACHINE = "raspberrypi3"

 

이미지 레시피 작성

새로운 이미지를 정의하기 위해 basic-qt5-image.bb의 이름의 파일을 만들고 아래처럼 작성한다.

 

@ubuntu:~/workspace/build/meta-mylayer$ mkdir -p recipes-core/images

@ubuntu:~/workspace/build/meta-mylayer/recipes-core/images$ vim basic-qt5-image.bb

SUMMARY = "A basic Qt5 dev image"
 
include recipes-core/images/rpi-basic-image.bb
 
QT_BASE = " \
    qtbase \
    qtbase-dev \
    qtbase-mkspecs \
    qtbase-plugins \
    qtbase-tools
"
 
QT_PKGS = " \
    qt3d \
    qt3d-dev \
    qt3d-mkspecs \
    qtcharts \
    qtcharts-dev \
    qtcharts-mkspecs \
    qtconnectivity-dev \
    qtconnectivity-mkspecs \
    qtquickcontrols2 \
    qtquickcontrols2-dev \
    qtquickcontrols2-mkspecs \
    qtdeclarative \
    qtdeclarative-dev \
    qtdeclarative-mkspecs \
    qtgraphicaleffects \
    qtgraphicaleffects-dev \
"
 
IMAGE_INSTALL += " \
    ${QT_BASE} \
    ${QT_PKGS} \
"
 
export IMAGE_BASENAME = "basic-qt5-image"

 

패키지 추가 레시피 작성

레이어를 생성할때 기본으로 있던 example_0.1.bb 파일의 이름을 아래와 같이 변경한다. 이것은 기존의 qt레이어를 사용하면서 필요한 패키지를 추가하기 위함이다. 아래 예제는 Qt응용프로그램을 eglfs로 동작될 수 있도록 정의한것이다.

 

@ubuntu:~/workspace/build/meta-mylayer/recipes-example/example$ mv example_0.1.bb qtbase_git.bbappend

@ubuntu:~/workspace/build/meta-mylayer/recipes-example/example$ vim qtbase_git.bbappend

SUMMARY = "bitbake-layers recipe"
DESCRIPTION = "Recipe created by bitbake-layers"
LICENSE = "MIT"
 
PACKAGECONFIG_append = " eglfs fontconfig gles2"
DEPENDS += "userland"

※ userland : Raspberry Pi GPU를 위한 EGL, GLESv2 등을 제공한다.

 

빌드 실행

이제 직접 생성한 레이어를 빌드하기위해 아래처럼 명령어를 입력하자. 그러면 비트베이크에 의해 task가 스케줄링 되고 빌드를 수행할 것이다. (오랜 시간이 소요되므로 참고기다리자)

 

@ubuntu:~/workspace/build$ bitbake basic-qt5-image

 

SD카드에 이미지 쓰기

완료되면 build/tmp/deploy/images/raspberrypi3 경로에 이미지 및 rootfs등이 생성된다. sd카드 이미지(rpi-sdimg)가 있는지 아래처럼 sd에 이미지를 write한다.

 

@ubuntu:~/workspace/build/tmp/deploy/images/raspberrypi3$ sudo umount /dev/<장치명>

@ubuntu:~/workspace/build/tmp/deploy/images/raspberrypi3$ sudo dd if=basic-qt5-image-raspberrypi3.rpi-sdimg of=/dev/sdb

[sudo] password for pjk:

1130496+0 records in

1130496+0 records out

578813952 bytes (579 MB, 552 MiB) copied, 485.783 s, 1.2 MB/s

@ubuntu:~/workspace/build/tmp/deploy/images/raspberrypi3$ sync

 

라즈베리파이 부팅

photo_2019-02-01_21-15-55.jpg

 

윈도우시스템이 없고 가벼운 임베디드 리눅스 시스템을 구축하였다.

photo_2019-02-01_21-16-04.jpg

 

다음 포스트에는 이 시스템을 위한 SDK를 만들고 간단한 Qt응용프로그램을 빌드, 실행시켜 볼것이다.

 

이 글과 연관된 다른 글
  1. [2019/11/13] 라즈베리파이3에서 Boot to Qt 실행해보기 by makersweb (31)
  2. [2019/09/29] Yocto를 이용한 wandboard BSP 및 Qt5 SDK 빌드 by makersweb (156)
  3. [2019/06/24] 라즈베리파이 4(Raspberry Pi 4 Model B) 발표 by makersweb (150)
  4. [2019/06/21] yocto의 몇가지 중요한 용어 및 개념 by makersweb (239)
  5. [2019/03/19] 욕토 프로젝트를 이용한 Qt SDK 빌드 for 라즈베리파이3 by makersweb (626)
번호 제목 글쓴이 날짜 조회 수
33 ESP32 블루투스 스피커(A2DP Sink) file makersweb 2019.10.29 36
32 ESP-IDF 의 A2DP리뷰 (ESP32) file makersweb 2019.10.28 183
31 임베디드 리눅스 부팅 절차 file makersweb 2019.10.21 82
30 mainline 커널 및 etnaviv 를 사용하는 Wandboard(Freescale i.MX6Q)에서 eglfs를 사용 makersweb 2019.10.17 83
29 Yocto를 이용한 wandboard BSP 및 Qt5 SDK 빌드 file makersweb 2019.09.29 156
28 STM32 & LibOpenCM3, printf함수사용 file makersweb 2019.08.08 263
27 STM32(Cortex-M3) LED Blink with PlatformIO file makersweb 2019.08.05 137
26 블루투스(Bluetooth) 기초 file makersweb 2019.08.02 202
25 STM32(Cortex-M3) 개발환경구축 with PlatformIO file makersweb 2019.07.26 186
24 STM32(Cortex-M3) 개발 - Firmware Flashing file makersweb 2019.07.23 147
23 libopencm3 활용, Cortex-M 펌웨어 개발 makersweb 2019.07.14 84
22 yocto의 몇가지 중요한 용어 및 개념 makersweb 2019.06.21 239
21 라즈베리파이3와 PC간 Serial 통신 테스트 file makersweb 2019.05.20 969
20 욕토 프로젝트를 이용한 Qt SDK 빌드 for 라즈베리파이3 file makersweb 2019.03.19 626
» yocto project, 라즈베리파이를 위한 Qt + 임베디드리눅스 빌드 file makersweb 2019.02.01 1626
18 STM32(Cortex-M3) 개발환경구축 with Eclipse file makersweb 2018.11.08 688
17 ST, STM32 MCU용 ‘통합 개발 환경(IDE)’ 무료 제공 makersweb 2015.03.04 8276
16 USB OTG 기술의 개념 file pjk 2014.11.03 6204
15 USB 핀아웃 file pjk 2014.10.11 4191
14 시리얼 인터페이스 커넥터를 위한 핀아웃 file pjk 2014.10.10 4081