linux/yocto

i.mx93 yocto 진행 요약 정리

jhinux 2025. 11. 1. 22:22

IMX93 Yocto 빌드 가이드

목차

  1. 개요

  2. 자동화 스크립트

  3. 사용 예시


개요

  • MACHINE: imx93frdm
  • DISTRO: fsl-imx-xwayland (Wayland 기반 디스플레이)
  • Target 이미지 레시피: /home/imx/sources/meta-imx-frdm/meta-imx-sdk/recipes-fsl/images/imx-image-base.bbimx-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