본문 바로가기

개발일지

Jetson 에서 Yocto Linux 탑재하기

H/W 선정

이번 프로젝트에서 사용될 Nvidia 社 의 Jetson-agx-xavier-industrial 모델과 해당 모델을 통해 개발을 하기위한 캐리어보드를 같이 구매했다.

캐리어보드는 하드웨어를 커스터마이징해서 프로젝트에 맞게 재구성할 예정이지만.. 체험을 위해 에버미디어 社의 캐리어보드를 미리 준비하여 다루어보았다.

캐리어 보드에는 기본적으로 전원을 넣기위한 파워 어댑터,  USB Port, HDMI Port 등 기본적인 인터페이스가 구성되어있어 바로 개발해볼 수 있다.

Jetson agx xavier 형상
캐리어보드 형상

 

L4T Ubuntu vs Yocto Linux

Nvidia 에서는 Jetson 을 좀 더 쉽게 쓸수있게 공식적으로 L4T Ububtu 를 제공한다. 이를 사용하여 별도의 운영체제를 구성할 필요없이 바로 사용할 수도 있다.

아래 사진처럼 Nvidia 에서 제공중인 SDK Manager 를 이용하여 현재사용중인 Jetson 과 원하는 버전의 JetPack 을 선택하여 쉽게 OS를 설치하고 자신이 원하는 APP 을 개발하거나 진행할 수 있다.

Nvidia SDK Manager

쉽고 편함에도 불구하고 왜 Yocto Linux를 선정하였는가 하면 바로맞춤형 경량 이미지를 구축할 수 있다는 점이다.

Jetson을 사용한다는 것은 한정된 하드웨어를 사용한다는 뜻인데, 이 한정된 하드웨어 자원에서 최대한의 퍼포먼스를 기대하기 위해서는 그만큼 불필요한 패키지를 제외한 가벼운 이미지가 유리하기 때문이다.

또한 하드웨어 인터페이스 구성을 입맛에 맞게 바꾸는것이 좀 더 수월하며 OS 업데이트에 따른 리스크또한 줄일 수 있다.

 

Poky 

Yocto Linux를 구성하기 위한 첫단추이다.

여기서 Poky 란 Yocto Build System의 Reference Distribution 이자 Yocto Linux 를 만들기 위한 핵심요소이다.

Yocto Linux를 빌드하기 위한 도구인 Bitbake 와 기본적인 Meta 레이어를 포함하고 있어 Yocto 를 시작하기위한 기본 환경으로 볼 수 있다.

Poky는 여러가지 브랜치를 운영중인데 그중에 나는 kirkstone 브랜치를 선정하였다.

2022년 출시된 브랜치로써 어느정도 안정성이 검증되었고 그만큼 얻을 수 있는 정보와 레이어, 패키지등의 풀이 넓을것으로 생각되었다.

가장 먼저 Poky를 git에서 clone 해주었다.

 

$ git clone -b kirkstone git://git.yoctoproject.org/poky.git poky

 

 

Poky를 clone 하고 나면 위와 같이 구성요소들이 들어있습니다.

 

Bitbake : Bitbake는 Yocto 빌드의 핵심엔진으로써 레시피파일을 읽고 각 패키지들을 어떻게 빌드할건지 결정하며, 빌드 절차를 진행한다.

meta : 이 레이어는 Yocto의 가장 기본이 되는 레이어로써 기본 라이브러리, 유틸리티 그리고 필수 시스템 패키지들로 구성되어있다.

그 밖에도 레이어의 뼈대 및 예제가 되는 skeleton 레이어도 있고 빌드 환경을 초기화하는 oe-init-build-env 스크립트 등 Yocto 이미지 생성을 위한 것들로 구성되어있다.

 

Meta-tegra

다음은 Yocto 프로젝트에서 NVIDIA 하드웨어를 지원하기 위한 BSP 레이어인 meta-tegra 레이어를 클론해주자

jetson이 타겟 디바이스로 해당 레이어는 필수적이다.

 

$ git clone -b kirkstone https://github.com/OE4T/meta-tegra.git

 

GitHub - OE4T/meta-tegra: BSP layer for NVIDIA Jetson platforms, based on L4T

BSP layer for NVIDIA Jetson platforms, based on L4T - OE4T/meta-tegra

github.com

 

 

다음과 같이 nvidia 하드웨어에 Yocto Linux를 구성하여 이용할 수 있도록 구성되어있다.

 

Build

여기까지 준비했다면 이제 빌드를 시작해보자.

먼저 빌드환경 구성을 위해 스크립트를 실행

$ source oe-init-build-env build

스크립트를 실행한다면 빌드가능한 이미지의 종류들이 출력되며 /poky 경로 내에 /build 경로가 생성된다.

빌드가 가능한 이미지 종류
/build 경로 내 빌드 config를 위한 .conf 파일들

 

core-image-minimal : 최소한의 루트 파일 시스템을 제공하는 Yocto 이미지로, 기본적인 시스템만 구동

core-image-full-cmdline : 커맨드 라인 환경을 제공하는 이미지

core-image-sato : Sato( 임베디드 장치를 위한 경량 데스크탑 환경) 용 이미지

core-image-weston :  Wayland 프로토콜을 사용하는 그래픽 서버를 제공하는 이미지

 

/biild 경로내에 .conf 파일들을 수정하여 내가 원하는 이미지를 빌드하기위한 설정을 진행한다.

bblayers.conf 

BBLAYERS ?= " \
  /mnt/hdd1/yocto/poky/meta \
  /mnt/hdd1/yocto/poky/meta-poky \
  /mnt/hdd1/yocto/poky/meta-yocto-bsp \
  /mnt/hdd1/yocto/poky/meta-tegra \
  "

poky내의 어떤 레이어를 빌드에 포함시킬 것인지를 설정

 

local.conf

MACHINE ?= "jetson-agx-xavier-industrial"
DISTRO_FEATURES = "x11 opengl wayland"
IMAGE_CLASSES += "image_types_tegra"
IMAGE_FSTYPES = "tegraflash"
DL_DIR ?= "/mnt/hdd1/yocto/downloads"

 

 

 

MCHINE : 타겟 HW 플랫폼 어떤 종류인지

DISTRO_FEATURES : 이미지에서 지원하는 기능 설정

IMAGE_CLASSES : nvidia용 특수 이미지로 생성

IMAGE_FSTYPES : 파일 시스템은 nvidia jetson 보드 형식

DL_DIR 의 경로에 Yocto 빌드 시스템이 레시피에 명시된 소스코드를 다운받을 디렉토리 설정

 

그리고 이제 빌드를 실행해보자.

$ bitbake <이미지 이름>

 

위와 같이 .conf 를 설정하고 bitbake로 빌드를 실행하면 이제 아래와같이 빌드가 진행된다.

빌드는 상당한 시간이 소요되므로 천천히 기다려주자.

'개발일지' 카테고리의 다른 글

Jetson 에서 Yocto Linux 탑재하기 [2]  (0) 2024.10.25
Jetson 에서 I2C 통신 하기  (0) 2024.10.08
Jetson과 NVRAM 간의 SPI 통신 [2]  (0) 2024.10.07
Jetson과 NVRAM 간의 SPI 통신 [1]  (1) 2024.10.07
YOCTO Project 란 ?  (4) 2024.09.26