i.mx Real Time Edge Linux - RT linux
IMX Real Time Edge Software — Development Guide
Table of Contents
- IMX Real Time Edge Software
- Yocto Real Time Edge Software 개발 환경 구축
- yocto git repo 설치
- git repo download
- git repo 수정
- % 가이드 링크
- % compiler-rt 컴파일러시에 에러 처리 방법 링크
- yocto 머신 설정
- bitbake 컴파일
- $ source setup-environment build-edge
- % 이 방법이 필요 없을 수도 있음
- 커스텀 부트 로더 개발
- $bitbake -f -c compile u-boot-imx
- Patch 적용
- 커스텀 커널 개발 개발
- $bitbake -f -c compile linux-imx
- Patch 적용
- dtb 수정
- 이미지 생성 결과 및 장입
- SD 카드 장입
- EMMC 장입
- SDK 배포
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를 생성해서 배포할 수 있다.