레시피 간단 작성 및 image 적용, 1 컴포넌트 multi recipe 작성 tip

markyang92·2022년 5월 17일
0

yocto

목록 보기
13/53
post-thumbnail

컴포넌트 및 레시피 간단 작성

  • 커스텀 컴포넌트와 커스텀 레시피 작성
  • prerequisite: 당연히 component, recipe는 layer 하위에 있어야함. 따라서 custom layer가 있거나 만듦

컴포넌트 src local관리

  • Custom Layer file tree
    • Layer: meta-mylayer
    • Custom Component: myhello (meta-mylayer/recipes-example/myhello)
    • Custom Component recipe file: myhello_0.1.bb (meta-mylayer/recipes-example/myhello/myhello_0.1.bb)
    • Component Source files: userprog.c (meta-mylayer/recipes-example/myhello/files/userprog.c)

myhello_0.1.bb

  • 컴포넌트 myhello용 레시피 myhello_0.1.bb 작성
  • SRC_URI = "file://userprog.c"
    컴포넌트 소스로컬 파일 시, ${S}= ${WORKDIR}

files/userprog.c

  • 초간단 소스코드

$ bitbake 'component'

  • bitbake 명령으로 component를 빌드해보자.
$ bitbake <Component Name>

e.g.,
$ bitbake myhello

  • 컴포넌트 빌드 성공 -> 이미지에 넣으려면 Image recipe에 이 컴포넌트를 추가해야함
  • 이미지에 이 컴포넌트를 넣으려면

Makefile 이용하기

  • 위에선 컴포넌트 레시피.bb에서 do_compile() TASK 안에서 직접 컴파일 명령을 내렸는데, 이번엔 따로 Makefile을 만들어 이를 이용해 컴파일해본다.

  1. component/files의 파일 들
  • Makefile, userprog.c

  1. Makefile 작성

  1. myhello_0.3.bb(컴포넌트用 레시피) 에서
    2-1. SRC_RUI = Makefile 위치
    2-2. do_compile() task에는 Makefile 명령어

주의!! 이렇게 직접 make 명령어를 내리는 것은 좋지 않다!!
OE환경에서는 oe_runmake 대신 make를 직접 call하는 것은 좋지 않음

2-3. 그냥 oe_runmake를 믿기로 하고 do_compile() task를 없애자

  • do_compile() task 없앰

  1. $ bitbake빌드

  1. ${WORKDIR}/temp에서 로그를보자


patch

  • component_directory/files/source를 일일히 수정하는 것으로는 bitbake가 알아먹지 못하기에, component_directory/files/source를 수정 후, local commit.
  1. $ git format-patch -1 = 0001-My-First-Patch.patch(커밋 메시지로 이름 지어지음)
  2. 0001-My-First-Patch.patch => component_directory/filesMV
  3. 컴포넌트 레시피에 SRC_URI = file://0001-My-First-Patch.patch 추가

굉장히 짜증나는 일이니까, source는 따로 git으로 관리해 아래처럼, remote git repository를 활용하자.


컴포넌트 src git으로 관리

  1. 당연히 매우 다수의 컴포넌트들은 git으로 관리된다.
    local로 관리하고 patch하고.. 너무 힘듬

  1. 특정 repository를 사용한다

  1. bitbake build
$ bitbake myhello
  1. Image 생성
  • do_rootfs는 위 과정에서 만들어진 패키지들을 설치한 Image의 rootfs를 생성한다.
    • IMAGE_INSTALL: 우리가 만든 Package 모음(Package Feeds area)에서 이미지에 포함시킬 패키지를 리스트업한다.
    • PACKAGE_EXCLUDE: 설치되지 말아야할 것들을 리스트업 한다.
    • PACKAGE_CLASSES: 사용할 패키지들의 종류(rpm, deb, ipk)를 선택한다.
    • PACKAGE_INSTALL: 이미지에 설치할 최종 패키지 리스
  • do_image
    • do_image_*를 통해 Filesystem마다 다른식으로 이미지를 만들 수 있도록 한다.

1 Component, Multiple recipes

  • 1개 컴포넌트에서 다수의 레시피를 사용하는 예는 아주 많지만 (python, qt)..
    • openembedded-core/meta/recipes-devtools/python을 예로 든다.
    • component: python내부에 python-*_'각version'.bb 파일들이 엄청 많다.
    • Yocto 에서는 하나의 레시피 단위로 접근 및 산출물을 만들어 낸다.
      $ bitbake python3 -> work/<arch>/python3
      $ bitbake python3-pip -> work/<arch>/python3-pip

  • 따라서 공통 되는 내용이 많다면, .inc 파일을 만들고, 각 레시피에서 require 하자.
# <layer>/recipes-A/A/A-component.bb
require <recipes-A>/A/A.inc

# Insert Command
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글