IMX93 Yocto 빌드 가이드
목차
개요
- MACHINE:
imx93frdm - DISTRO:
fsl-imx-xwayland(Wayland 기반 디스플레이) - Target 이미지 레시피:
/home/imx/sources/meta-imx-frdm/meta-imx-sdk/recipes-fsl/images/imx-image-base.bb→imx-image-base
빌드 환경 초기화:
MACHINE=imx93frdm DISTRO=fsl-imx-xwayland \
source sources/meta-imx-frdm/tools/imx-frdm-setup.sh -b build-imx
빌드 파이프라인
flowchart TD
A[setup: imx-frdm-setup.sh] --> B[build-imx 환경 생성]
B --> C[bitbake imx-image-base]
C --> D{컴포넌트 빌드}
D --> U[U-Boot: u-boot-imx\nconfigure→compile→install→deploy]
D --> K[Linux: linux-imx\nconfigure→compile→install→deploy]
U --> DE[deploy/images]
K --> DE
DE --> E[zstd -d *.wic.zst\n이미지 압축 해제]
E --> F[dd → /dev/sdX\nSD 카드 플래싱]
F --> G[parted / resize2fs\n파티션 확장]
G --> H[부팅 & 검증]
디렉터리 구조
sources/
meta-imx-frdm/
tools/imx-frdm-setup.sh
meta-imx-sdk/
recipes-fsl/images/imx-image-base.bb
build-imx/
tmp/work/imx93frdm-poky-linux/
u-boot-imx/2024.04/git/ # 부트로더 소스(작업 디렉토리)
linux-imx/6.6.36+git/git/ # 커널 소스(작업 디렉토리)
tmp/deploy/images/imx93frdm/ # 최종 이미지(.wic, .wic.zst 등)
tmp/deploy/sdk/ # SDK 설치 스크립트 배포 위치
공용 환경 변수
# file: env_imx93.sh
export MACHINE=imx93frdm
export DISTRO=fsl-imx-xwayland
export BUILD_DIR=~/build-imx
export DEPLOY_IMG_DIR="$BUILD_DIR/tmp/deploy/images/$MACHINE"
export SDK_DIR="$BUILD_DIR/tmp/deploy/sdk"
이미지 압축 해제 + SD 카드 플래싱 + 리사이즈
#!/usr/bin/env bash
# file: flash_sd.sh
# 목적: 최신 .wic(.zst) 이미지 압축 해제 → SD 카드에 기록 → 파티션 확장
# 사용: sudo ./flash_sd.sh /dev/sdX
set -euo pipefail
DEV=${1:-}
if [[ -z "$DEV" ]]; then
echo "[ERROR] 대상 디바이스 경로를 지정하세요. 예) /dev/sdb" >&2
exit 1
fi
# 안전장치: 실제 블록 디바이스인지 확인
if ! lsblk -dno NAME "$DEV" &>/dev/null; then
echo "[ERROR] 유효한 블록 디바이스가 아닙니다: $DEV" >&2
exit 1
fi
echo "[INFO] 대상 디바이스: $DEV"
read -r -p "정말로 $DEV 에 이미지를 기록하시겠습니까? (yes/NO): " ANSW
if [[ "$ANSW" != "yes" ]]; then
echo "[ABORT] 사용자 취소"
exit 1
fi
# 최신 wic(.zst) 이미지 탐색
IMG_DIR="${DEPLOY_IMG_DIR:-./}"
WIC_ZST=$(ls -1t "$IMG_DIR"/*.wic.zst 2>/dev/null | head -n1 || true)
WIC_RAW=$(ls -1t "$IMG_DIR"/*.wic 2>/dev/null | head -n1 || true)
if [[ -n "$WIC_ZST" ]]; then
echo "[INFO] 압축 이미지 발견: $WIC_ZST"
RAW=${WIC_ZST%.zst}
echo "[INFO] 압축 해제 → $RAW"
zstd -d "$WIC_ZST"
WIC="$RAW"
elif [[ -n "$WIC_RAW" ]]; then
echo "[INFO] RAW 이미지 발견: $WIC_RAW"
WIC="$WIC_RAW"
else
echo "[ERROR] .wic(.zst) 이미지를 찾을 수 없습니다. IMG_DIR=$IMG_DIR" >&2
exit 1
fi
# 이미지 기록
sudo dd if="$WIC" of="$DEV" bs=4M conv=fsync status=progress
sync
# 파티션 테이블 재스캔 (optional)
sudo partprobe "$DEV" || true
sleep 2
# 루트 파티션(예: ${DEV}2) 확장 예시
ROOT_PART="${DEV}2"
if lsblk -no NAME "$ROOT_PART" &>/dev/null; then
echo "[INFO] 파티션 확장: $ROOT_PART"
# ext4 파일시스템 가정
sudo e2fsck -f "$ROOT_PART" || true
sudo resize2fs "$ROOT_PART"
else
echo "[WARN] 루트 파티션($ROOT_PART)을 찾을 수 없어 리사이즈를 건너뜁니다."
fi
echo "[DONE] SD 카드 플래싱 및(가능 시) 리사이즈 완료"
U-Boot 재빌드
#!/usr/bin/env bash
# file: rebuild_uboot.sh
set -euo pipefail
bitbake -f -c configure u-boot-imx
bitbake -f -c compile u-boot-imx
bitbake -f -c install u-boot-imx
bitbake -f -c deploy u-boot-imx
Linux 커널 재빌드
#!/usr/bin/env bash
# file: rebuild_kernel.sh
set -euo pipefail
bitbake -f -c configure linux-imx
bitbake -f -c compile linux-imx
bitbake -f -c install linux-imx
bitbake -f -c deploy linux-imx
이미지 빌드 및 SDK 생성/설치
#!/usr/bin/env bash
# file: build_image_and_sdk.sh
set -euo pipefail
# 이미지 빌드
bitbake imx-image-base
# SDK 생성
bitbake imx-image-base -c populate_sdk
# SDK 설치 스크립트 실행(사용자 환경에 맞게 경로 확인)
SDK_DIR="${SDK_DIR:-~/build-imx/tmp/deploy/sdk}"
SDK_RUN=$(ls -1 "$SDK_DIR"/fsl-imx-xwayland-glibc-x86_64-imx-image-base-armv8a-imx93frdm-toolchain-*.sh | head -n1)
if [[ -n "$SDK_RUN" ]]; then
echo "[INFO] SDK 설치 스크립트: $SDK_RUN"
bash "$SDK_RUN"
else
echo "[WARN] SDK 설치 스크립트를 찾을 수 없습니다: $SDK_DIR"
fi
사용 예시
# 0) 환경 변수 로드
source ./env_imx93.sh
# 1) 이미지 빌드
./build_image_and_sdk.sh
# 2) 최신 이미지로 SD 카드 플래싱 (장치 확인 필수)
sudo ./flash_sd.sh /dev/sdb
# 3) 커널/부트로더 수정 후 재빌드
./rebuild_kernel.sh
./rebuild_uboot.sh
주의 사항
- 디바이스 경로 검증:
lsblk,sudo fdisk -l로 반드시/dev/sdX가 SD 카드인지 확인 후 진행. - 파일시스템 종류: 스크립트는
ext4를 가정하고resize2fs를 사용합니다. 다른 FS일 경우 적절한 도구로 변경 필요. - 권한: 일부 단계는
sudo가 필요합니다. - 백업: 중요한 데이터가 있는 디스크에
dd를 실행하면 복구 불가합니다.
부록: 경로/레시피/링크
컴파일/배포 경로
- U-Boot 작업 디렉토리:
/home/imx/build-imx/tmp/work/imx93frdm-poky-linux/u-boot-imx/2024.04/git - Linux 작업 디렉토리:
/home/imx/build-imx/tmp/work/imx93frdm-poky-linux/linux-imx/6.6.36+git/git - 이미지 배포:
/home/imx/build-imx/tmp/deploy/images/imx93frdm - SDK 배포:
~/build-imx/tmp/deploy/sdk
명령 요약
- 이미지 생성:
bitbake imx-image-base - SDK 생성:
bitbake imx-image-base -c populate_sdk - 이미지 압축 해제:
zstd -d <image>.wic.zst - SD 카드 기록:
sudo dd if=<image>.wic of=/dev/sdX bs=4M conv=fsync status=progress && sync - 파티션 리사이즈:
parted,resize2fs
'linux > yocto' 카테고리의 다른 글
| linux kernel u-boot audit diable (0) | 2025.11.21 |
|---|---|
| yocto 이미지 고정 방법 (0) | 2025.11.03 |
| yocto 고정 IP 할당 방법 (systemd-network) (0) | 2025.11.01 |