DREAMER

Yocto Kernel - Jetson Nano 본문

프로그래밍/Embedded System

Yocto Kernel - Jetson Nano

연소민 2022. 12. 8. 09:27
728x90

Yocto에서 지원하는 보드만 있다면 이미지를 올려서 플래시까지는 쉽다.

어느정도 임베디드 리눅스 개발에 익숙하다는 전제하에 기초적인 설명은 건너뛰고 간단하게 방법만 작성하였다.

Yocto Manual을 보면 자세하게 설명이 나와있다.

 

Host PC : Ubuntu 18.04

Target Board : Jetson Nano carrier board

AP : Jetson Nano module (eMMC)

 

다음을 참고하면, 현재 AP에 맞는 장치 ID를 알수 있다. 해당 ID는 Recovery Mode에 진입하였을 때 $ lsusb 명령어로 장치 ID를 확인할 수 있다.

7f21 for Jetson Nano (P3448, included in the developer kit)
7f21 for the Jetson Nano (P3448-0020, for production devices)
7019 for Jetson Xavier
7c18 for Jetson TX2
7018 for Jetson TX2i
7418 for Jetson TX2 4GB
7721 for Jetson TX1

 

Yocto 시작

 

[개발환경셋팅]

1. 가장먼저 Yocto Project를 시작하기 위해 Host PC에 필요한 Dependency 설치한다.

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm

* 2023.07.31 추가

* l4t 버전을 올리기 위해서는 아래의 패키지가 추가로 설치되어야 한다.

$ sudo apt-get install zstd

2. Yocto 작업 디렉토리를 생성한다.

$ YOCTO_DIR=$(pwd)/yocto-tegra
$ mkdir $YOCTO_DIR
$ sudo chmod 775 $YOCTO_DIR

3. dunfell 브랜치로 설정한다. (Release 관련은 다음 게시물 참고 : https://yeonsozzz.tistory.com/41)

$ export BRANCH="dunfell"

**************************************************

* 2023.07.31 추가

* 3. 최신 브랜치인 kirkstone으로 설정한다.

export BRANCH="kirkstone"

* 4번은 동일하게 진행한다.

**************************************************

 

4. base meta-layer인 poky를 먼저 다운받는다. (Yocto, poky, open embedded등 추후 게시글 작성 필요)

$ cd $YOCTO_DIR
$ git clone -b ${BRANCH} git://git.yoctoproject.org/poky.git poky

**************************************************

* 2023.07.31 추가

* 5. NVIDIA BSP를 받아야 한다. Nano는 L4T R35.3.1을 지원하지 않으므로 branch를 다르게 설정하여야 한다.

export BRANCH="kirkstone-l4t-r32.7.x"

* L4T R35.3.1을 지원하는 아래의 보드들은 branch명을 kirkstone으로 동일하게 하면 될 듯 하다.

* 나는 Nano로 작업 하였으므로 확인하진 않았다.

Jetson Linux release: R35.3.1 JetPack release: 5.1.1

Boards supported:

    Jetson AGX Xavier development kit
    Jetson Xavier NX Development Kit
    Jetson Xavier NX eMMC module in dev kit or Nano carrier board
    Jetson AGX Orin development kit
    Jetson Orin NX 16GB (p3767-0000) in Xavier NX (p3509) carrier
    Jetson Orin NX 16GB (p3767-0000) in Orin Nano (p3768) carrier
    Jetson Orin Nano development kit

**************************************************

 

5. NVIDIA AP를 사용하므로 관련 BSP를 다운받는다.

$ git clone -b ${BRANCH} https://github.com/OE4T/meta-tegra.git

다음 버전으로 다운이 된다.

  • Jetson TX2-NX module in Xavier NX dev kit carrier
  • Linux4Tegra release: R32.7.2
  • JetPack release: 4.6.2

6. build environment 초기화

$ cd $YOCTO_DIR
$ source poky/oe-init-build-env build

build 디렉터리를 굳이 바꿀 이유가 없어서 보통은 그냥 $ source poky/oe-init-build-env 까지만 한다. 그럼 YOCTO_DIR/build가 생성된다.

 

여기까지는 Yocto Build를 위한 사전 작업이었다. 이 이후 작업부터는 이미지를 빌드하고 플래시를 하는 과정이다.

minimal로 풀 빌드를 한번 진행한 다음부터는 각자 구현하고자 하는 features, 보드 등에 맞게 custom 이미지, recipe 등을 생성하여 확장해 나가면 된다.

 

[Yocto Project]

1. local.conf 수정

MACHINE을 Jetson Nano로 수정한다.

weston 이미지를 빌드하기 위해 DISTRO_FEATURES에 wayland를 추가한다.

downloads 파일 백업을 위해 DL_DIR을 추가한다.

MACHINE ?= "jetson-nano-devkit-emmc"

DISTRO_FEATURES = "x11 opengl wayland "

IMAGE_CLASSES += "image_types_tegra"
IMAGE_FSTYPES = "tegraflash"

DL_DIR ?= "${BSPDIR}/downloads"

2. meta-tegra 레이어 추가

meta-tegra는 NVIDIA의 BSP이지만 yocto 입장에서는 custom layer 이므로 해당 레이어도 참조하라고 알려줘야 한다.

아래 파일에 meta-tegra 레이어를 추가한다.

$YOCTO_DIR/build/conf/bblayers.conf

3. 이미지 빌드

$ bitbake core-image-weston

빌드 시작,

image: core-image-weston
Build Configuration:
BB_VERSION           = "1.46.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "ubuntu-18.04"
TARGET_SYS           = "aarch64-poky-linux"
MACHINE              = "jetson-nano-devkit-emmc"
DISTRO               = "poky"
DISTRO_VERSION       = "3.1.21"
TUNE_FEATURES        = "aarch64 armv8a crc"
TARGET_FPU           = ""
meta-tegra           
meta                 
meta-poky            
meta-yocto-bsp       = "<unknown>:<unknown>"

성공

 

4. 이미지 플래싱

YOCTO_DIR에 deploy.sh 파일을 생성한다.

#!/bin/bash

image=$1
machine=$2

scriptdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
deployfile=${image}-${machine}.tegraflash.tar.gz
tmpdir=`mktemp`

rm -rf $tmpdir
mkdir -p $tmpdir
echo "Using temp directory $tmpdir"
pushd $tmpdir
cp $scriptdir/build/tmp/deploy/images/${machine}/$deployfile .
tar -xvf $deployfile
set -e
sudo ./doflash.sh
popd
echo "Removing temp directory $tmpdir"
rm -rf $tmpdir

해당 파일을 실행하여 플래시를 진행한다.

플래시를 하기위해서는 Jetson AP가 반드시!!!!! Recovery Mode에 진입하여야 한다. $ lsusb로 확인하면 된다.

확인 후 bash 명령어로 실행한다.

$ bash deploy.sh core-image-weston jetson-nano-devkit-emmc

L4T 환경과 마찬가지로 flash가 진행된다.

 

부팅 확인 & weston 배경화면 확인하면 완료.

 

아주 간단하고 쉽다. 여기까지는 막히는게 없어야한다. 그뒤로는 이미지 커스텀, 레시피 수정 등 막히는게 정말 많다.

 

(메모)

* kernel build

$ bitbake -c menuconfig virtual/kernel

$ bitbake -c menuconfig linux-tegra (위와 동일)

 

 

 

 

728x90

'프로그래밍 > Embedded System' 카테고리의 다른 글

[Glossary] Embedded System Glossary  (0) 2023.03.21
invalid use of incomplete type "class qbluetoothdevicediscoveryagent"  (0) 2023.02.08
Jetson Nano  (0) 2021.09.15
HDMI HPD란  (0) 2020.03.19
Comments