카테고리 없음

i.mx Real Time Edge Linux - RT linux

jhinux 2025. 11. 3. 13:08

IMX Real Time Edge Software — Development Guide

Table of Contents


Yocto Real Time Edge Software 개발 환경 구축

본 장에서는 Yocto 개발 환경구축관련 기능을 설명한다.

yocto git repo 설치

git repo download

#curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
#chmod a+x ~/bin/repo
#mkdir /yocto-realtime-edge
#cd yocto-realtime-edge
#repo init -u https://github.com/nxp-real-time-edge-sw/yocto-real-time-edge.git -b real-time-edge-walnascar -m real-time-edge-3.2.0.xml
#repo sync

git repo 수정

packagegroup-real-time-edge-rtos 그룹은 freeeRTOS 등을 필요로 하는 것으로 구성 되어있다.

이 부분은 필요 없어서 삭제한다.

또한 컴파일시에 8시간 이상 소요되며 환경에 따라 컴파일 에러가 발생한다.

packagegroup-harpoon 패키지는 가상화를 지원하지 않아 삭제한다.

이미지 생성시에 필요로 하는 유틸리티를 추가한다.

nxp-image-real-time-edge.bb 파일을 아래와 같이 수정한다.

project sources/meta-real-time-edge/
diff --git a/recipes-nxp/images/nxp-image-real-time-edge.bb b/recipes-nxp/images/nxp-image-real-time-edge.bb
index f4fd17a..8bd066a 100644
--- a/recipes-nxp/images/nxp-image-real-time-edge.bb
+++ b/recipes-nxp/images/nxp-image-real-time-edge.bb
@@ -1,7 +1,8 @@
 # Copyright 2021-2022 NXP
 # Released under the MIT license (see COPYING.MIT for the terms)

-real-time-edge-IMAGE_BASE ?= "recipes-fsl/images/imx-image-multimedia.bb"
+#real-time-edge-IMAGE_BASE ?= "recipes-fsl/images/imx-image-multimedia.bb"
+real-time-edge-IMAGE_BASE ?= "recipes-fsl/images/imx-image-minimum.bb"
 real-time-edge-IMAGE_BASE:qoriq = "recipes-fsl/images/fsl-image-networking.bb"

 require ${real-time-edge-IMAGE_BASE}
@@ -10,12 +11,16 @@ SUMMARY = "Real-time Edge image to be used for development and evaluation"

 LICENSE = "MIT"

+inherit core-image
+
 export IMAGE_BASENAME = "nxp-image-real-time-edge"

 IMAGE_FSTYPES:qoriq = "${SOC_DEFAULT_IMAGE_FSTYPES}"

 PACKAGE_ARCH = "${MACHINE_ARCH}"

+TOOLCHAIN_TARGET_TASK:remove = "target-sdk-provides-dummy"
+
 IMAGE_INSTALL:append = " \
     packagegroup-real-time-edge-networking \
-    packagegroup-real-time-edge-system \
@@ -27,14 +32,21 @@ IMAGE_INSTALL:append:ls1028ardb = " \
     packagegroup-real-time-edge-multimedia \
 "
 IMAGE_INSTALL:append:imx-nxp-bsp = " \
-    packagegroup-real-time-edge-rtos \
-    packagegroup-harpoon \
+    mmc-utils \
+    ethtool net-tools iptables iperf3 iproute2 busybox bridge-utils tcpdump \
+    e2fsprogs-mke2fs \
+    e2fsprogs-resize2fs \
+    parted \
+    i2c-tools can-utils memtester util-linux sqlite3 tftp-hpa libgpiod \
+    tzdata \
     imx-test \
     packagegroup-imx-core-tools \
     curl \
     ${CLINFO} \
 "

+
 CLINFO              ?= ""
 CLINFO:imxgpu        = "clinfo"
 CLINFO:mx8mm-nxp-bsp = ""

recipes-fsl/images/imx-image-multimedia.bb 를 recipes-fsl/images/imx-image-minimum.bb 으로 복사하거나 파일을 변경한 후 multimedia 관련 기능을 삭제 한다 ex) wayland

recipes-fsl/images/imx-image-minimum.bb 내용 

# Copyright (C) 2015 Freescale Semiconductor
# Copyright 2017-2021 NXP
# Released under the MIT license (see COPYING.MIT for the terms)

DESCRIPTION = "NXP Image to validate i.MX machines. \
This image contains everything used to test i.MX machines including GUI, \
demos and lots of applications. This creates a very large image, not \
suitable for production."
LICENSE = "MIT"

inherit core-image

### WARNING: This image is NOT suitable for production use and is intended
###          to provide a way for users to reproduce the image used during
###          the validation process of i.MX BSP releases.

## Select Image Features
IMAGE_FEATURES += " \
    tools-profile \
    tools-sdk \
    package-management \
nfs-client \
    tools-debug \
    ssh-server-openssh \
    tools-testapps \
    hwcodecs \
    allow-empty-password \
    allow-root-login \
    empty-root-password \
    post-install-logging \
"

V2X_PKGS = ""
V2X_PKGS:mx8dxl-nxp-bsp = "packagegroup-imx-v2x"

DOCKER ?= ""
DOCKER:mx8-nxp-bsp = "docker"

G2D_SAMPLES              = ""
G2D_SAMPLES:imxgpu2d     = "imx-g2d-samples"
G2D_SAMPLES:mx93-nxp-bsp = "imx-g2d-samples"
G2D_SAMPLES:mx943-nxp-bsp = "imx-g2d-samples"

CORE_IMAGE_EXTRA_INSTALL += " \
    packagegroup-core-full-cmdline \    
    packagegroup-fsl-tools-testapps \
    packagegroup-fsl-tools-benchmark \
    packagegroup-imx-isp \
    packagegroup-imx-security \
    firmwared \
"

% 가이드 링크

nxp.com/docs/en/user-guide/REALTIMEEDGEUG.pdf

% compiler-rt 컴파일러시에 에러 처리 방법 링크

[1/2] compiler-rt: Use clang for native compile as well - Patchwork

yocto 머신 설정

imx93evk MACHINE에서 커스텀 보드에 대하여 수정할 예정이며 다음과 같이 빌드 환경을 구성한다.

MACHINE=imx93evk DISTRO=nxp-real-time-edge source ./real-time-edge-setup-env.sh -b build-edge

bitbake 컴파일

환경 변수 업데이트 2.3 항에서 imx93evk MACHIN으로 빌드 환경을 구성하였으며 다음과 같이 빌드 환경 변수를 업데이트 해야 한다.

$ source setup-environment build-edge

$ source setup-environment build-edge
Welcome to Real-Time Edge

Real-time Edge software Yocto Project, provides support to build
NXP's Real-time Edge image, both for i.MX and QorIQ platforms.

The project web:
https://www.nxp.com/design/software/development-software/real-time-edge-software:REALTIME-EDGE-SOFTWARE

You can now run 'bitbake <target>'

Supported targets are:
    nxp-image-real-time-edge
    nxp-image-real-time-edge-plc

$ bitbake nxp-image-real-time-edge

nxp-image-real-time-edge 이미지를 생성하면 부트로더 와 커널의 임시 소스 코드가 존재하지 않음으로 local.conf 파일을 다음과 같이 수정한다

local.conf 파일은 빌드 폴더(build-edge)에 conf 폴더에 존재한다.

# Exclude u-boot and kernel recipes from rm_work cleanup
RM_WORK_EXCLUDE += "u-boot-imx linux-imx"

% 이 방법이 필요 없을 수도 있음

local.conf 에

커스텀 부트 로더 개발

$bitbake -f -c compile u-boot-imx

강제로 u-boot-imx 를 컴파일한다.

강제로 컴파일 이후 다음에 폴더에 소스코드가 존재한다.

$PRJ/build-edge/tmp/work/imx93evk-poky-linux/u-boot-imx/2025.04/git

Patch 적용

다음의 폴더에 커스텀 커널의 패치파일을 작성한다.

$PRJ/sources/meta-real-time-edge/dynamic-layers/imx-layer/recipes-bsp/u-boot/u-boot-imx/0001-board-custom.patch
$PRJ/sources/meta-real-time-edge/dynamic-layers/imx-layer/recipes-kernel/linux/linux-imx_%.bbappend

파일에 패치적용을 작성한다.

FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
SRC_URI += " \
        file://0001-board-custom.patch \
"

커스텀 커널 개발 개발

$bitbake -f -c compile linux-imx

강제로 linux-imx 를 컴파일한다.

강제로 컴파일 이후 다음에 폴더에 소스코드가 존재한다.

$PRJ/ build-edge/tmp/work/imx93evk-poky-linux/linux-imx/6.12.20+git

Patch 적용

다음의 폴더에 커스텀 커널의 패치파일을 작성한다.

$PRJ/sources/meta-real-time-edge/dynamic-layers/imx-layer/recipes-kernel/linux/linux-imx/0001-board-custom.patch
$PRJ/sources/meta-real-time-edge/dynamic-layers/imx-layer/recipes-bsp/u-boot/u-boot-imx_%.bbappend

파일에 패치적용을 작성한다.

FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
SRC_URI += " \
        file://0001-board-custom.patch \
"

dtb 수정

disto (배포) 시에 생성되는 dtb 를 커스텀 커널만 나오도록 수정한다.

ex) imx93-custom.dtb 를 추가하고 불필요한 항목을 삭제한다.

$PRJ/sources/meta-real-time-edge/conf/distro/include/real-time-edge-base.inc

KERNEL_DEVICETREE:append:imx93evk = "freescale/imx93-custom.dtb "
#KERNEL_DEVICETREE:append:imx93evk = " freescale/imx93-11x11-evk-uart-sharing-cm33.dtb \
#                                     freescale/imx93-11x11-evk-virtio-net-ca55.dtb \
#                                     freescale/imx93-11x11-evk-virtio-net-cm33.dtb \
#                                     freescale/imx93-11x11-evk-dsa.dtb \
#                                     freescale/imx93-11x11-evk-dsa-enetc.dtb \
#                                     freescale/imx93-11x11-evk-dsa-fec-swp0.dtb \
#                                     freescale/imx93-11x11-evk-dsa-fec-swp3.dtb \
#                                     freescale/imx93-11x11-evk-dpdk.dtb \
#                                     freescale/imx93-11x11-evk-multicore-rpmsg.dtb \
#                                     freescale/imx93-11x11-evk-multicore-rtos.dtb"
.... 중략 

$PRJ/sources./meta-imx/meta-imx-bsp/conf/machine/imx93evk.conf

# Include device trees for other boards for internal test
KERNEL_DEVICETREE += " \
     freescale/imx93-custom.dtb \
#    freescale/imx93-11x11-evk-pmic-pf0900.dtb \
#    freescale/imx93-11x11-evk-pmic-pf0900-aud-hat.dtb \
#    freescale/imx93-11x11-evk-pmic-pf0900-boe-wxga-lvds-panel.dtb \
…. 중략

각각의 보드별로 imx93-11x11 로 시작하는 inc , conf 파일에서 필요시 삭제 한다.

빌드중에 불필요한 에러 발생과 이미지 생성 에러가 발생할 경우는 build-edge/tmp/deploy/images 폴더를 삭제 하고 build-edge/tmp/stamps 폴더를 삭제 하면 패키지를 검사하여 처음부터 이미지를 체크한다.

build-edge/tmp/deploy/images/imx93evk 에 생성된 이미지를 확인할 수 있다.

[이메일 삭제]:~/yocto-real-time-edge/build-edge/tmp/deploy/images/imx93evk$ ls -lh nxp-image-real-time-edge-imx93evk.rootfs-20251004073455.wic.zst
-rw-r--r-- 2 edge edge 474M 10월  4 16:43 nxp-image-real-time-edge-imx93evk.rootfs-20251004073455.wic.zst

이미지 생성 결과 및 장입

build-edge/tmp/deploy/images/imx93evk에 생성된 이미지를 SD 카드에 장입힌다.

SD 카드 장입

wic.zst 는 압축 파일 이며 wic 인 img 형태로 압축을 해제 한다.

/build-edge/tmp/deploy/images/imx93evk$ zstd -d nxp-image-real-time-edge-imx93evk.rootfs-20251004073455.wic.zst

nxp-image-real-time-edge-imx93evk.rootfs-20251004073455.wic.zst: 4304260096 bytes

압축이 해제된 파일을 리눅스 dd 명령어 혹은 윈도우에서 win32diskimager 툴을 이용해서 SD 카드에 삽입할수 있다.

sudo dd if=nxp-image-real-time-edge-imx93evk.rootfs-20251004073455.wic of=/dev/sdb bs=1M status=progress
1664090112 bytes (1.7 GB, 1.5 GiB) copied, 4 s, 416 MB/s

EMMC 장입

% 저번 imx93-frdm 에서 확인되어서 생략 하며 이미지 최소화에 대하여 설명한다.

용량 부족은 관련은 images/nxp-image-real-time-edge.bb 에서 불필요한 항목을 이미지에 추가되지 않게 설정한다.

또한 packagegroup-real-time-edge-xxx.bb 에서 불필요한 항목을 찾아서 삭제혹은 위와같이 추가되지 않게 설정한다.

IMAGE_INSTALL:remove = "\
    psplash \
    jailhouse \
    imx-gpu-viv \
    nxp-wlan-sdk \
    kernel-module-nxp-wlan\
"

SDK 배포

응용 프로그램 개발을 위해 SDK (크로스 컴파일러) 환경을 제공한다.
커스텀 보드 포팅과 무관하게 파일시스템에서 필요로 하는 라이브러리 설정이 끝나면 SDK를 생성해서 배포할 수 있다.