Linux/yocto

이미지 배포 및 보드 플래싱

임베디드 친구 2025. 5. 26. 21:57
728x90
반응형

이미지 배포 및 보드 플래싱

이 글에서는 Yocto를 이용해 생성한 이미지를 타겟 보드에 배포하고 플래싱하는 방법에 대해 설명합니다. 주로 Rockchip RK3399 보드를 기준으로 설명하지만, 다른 보드에서도 기본적인 과정은 유사합니다. SD 카드와 eMMC에 이미지를 쓰는 방법, U-Boot 환경 설정 및 부트로더 디버깅 방법도 함께 다루겠습니다.

1. Yocto 이미지 준비

먼저 Yocto 빌드를 통해 생성된 이미지가 필요합니다. 기본적으로 아래와 같은 파일들이 빌드 결과로 생성됩니다.

  • bootloader: u-boot.rom 또는 u-boot.img
  • kernel: Image 또는 zImage
  • device tree: *.dtb
  • root filesystem: core-image-minimal-<target-machine>.rootfs.ext4
  • WIC 이미지: core-image-minimal-<target-machine>.wic

이 글에서는 wic 이미지를 이용해 SD 카드와 eMMC에 배포하는 방법을 설명합니다.

2. SD 카드에 Yocto 이미지 쓰기

2.1 SD 카드 준비

  1. SD 카드를 PC에 연결합니다.
  2. lsblk 명령어로 디바이스 이름을 확인합니다.
$ lsblk

예: /dev/sdX 또는 /dev/mmcblk0와 같이 표시됩니다.

  1. SD 카드의 기존 파티션을 삭제하고 포맷합니다.
$ sudo umount /dev/sdX*
$ sudo wipefs --all /dev/sdX
$ sudo parted /dev/sdX mklabel gpt

2.2 WIC 이미지 쓰기

다음 명령어를 이용해 Yocto에서 생성한 wic 이미지를 SD 카드에 씁니다.

$ sudo dd if=core-image-minimal-rockchip.wic of=/dev/sdX bs=4M status=progress

작업이 완료된 후 sync 명령어를 실행하여 데이터를 디스크에 완전히 기록합니다.

$ sync

2.3 이미지 확인

SD 카드가 올바르게 기록되었는지 확인합니다.

$ lsblk -f

파티션에 적절한 파일 시스템이 보이면 성공적으로 이미지가 기록된 것입니다.

3. eMMC에 Yocto 이미지 쓰기

eMMC에 이미지를 쓰는 과정은 SD 카드와 유사하지만, 보드를 부팅한 상태에서 진행해야 합니다.

3.1 보드 부팅 및 eMMC 확인

  1. SD 카드에 기록한 Yocto 이미지를 이용해 보드를 부팅합니다.
  2. 부팅 후 eMMC 디바이스를 확인합니다.
$ lsblk

보통 /dev/mmcblk1 또는 /dev/mmcblk2로 나타납니다.

3.2 eMMC 파티션 삭제 및 포맷

기존 파티션을 삭제하고 새로 설정합니다.

$ sudo parted /dev/mmcblk1 mklabel gpt

3.3 eMMC에 이미지 쓰기

다음 명령어로 wic 이미지를 eMMC에 씁니다.

$ sudo dd if=core-image-minimal-rockchip.wic of=/dev/mmcblk1 bs=4M status=progress

작업 완료 후 역시 sync 명령어를 실행합니다.

$ sync

4. U-Boot 환경 설정

U-Boot는 부팅 과정에서 중요한 역할을 하는 부트로더입니다. 환경 설정과 디버깅 방법을 살펴보겠습니다.

4.1 U-Boot 명령어 진입

보드를 부팅하는 동안 시리얼 콘솔에 연결한 상태에서 Space 또는 Enter 키를 눌러 U-Boot 명령어 창으로 진입합니다.

U-Boot 2024.04 (Jan 01 2025 - 12:00:00)

Hit any key to stop autoboot:  0
=>

4.2 부트 환경 변수 확인

환경 변수를 확인하는 명령어는 다음과 같습니다.

=> printenv

4.3 부팅 경로 설정

SD 카드에서 부팅하도록 설정하는 예는 다음과 같습니다.

=> setenv bootargs "console=ttyS2,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rw"
=> setenv bootcmd "ext4load mmc 0:1 0x40000000 /boot/Image; ext4load mmc 0:1 0x42000000 /boot/rk3399.dtb; booti 0x40000000 - 0x42000000"
=> saveenv

4.4 부트로더 디버깅

부팅 중 문제가 발생하면 아래와 같이 로그를 분석합니다.

  1. 시리얼 콘솔에서 부팅 로그 확인

    => boot
  2. 디바이스 트리, 커널 이미지 경로, 루트 파일 시스템 설정 확인

문제가 있는 경우 U-Boot 환경 변수를 수정하거나, 이미지를 다시 작성해야 할 수도 있습니다.

5. 플래싱 과정 자동화 (스크립트 예제)

반복적인 플래싱 작업을 자동화하려면 아래와 같이 스크립트를 작성할 수 있습니다.

#!/bin/bash

IMAGE="core-image-minimal-rockchip.wic"
DEVICE="/dev/sdX"

if [ ! -f "$IMAGE" ]; then
  echo "이미지 파일을 찾을 수 없습니다: $IMAGE"
  exit 1
fi

sudo umount ${DEVICE}* 2>/dev/null
sudo dd if=$IMAGE of=$DEVICE bs=4M status=progress
sync

echo "이미지 플래싱이 완료되었습니다."

스크립트를 flash_image.sh로 저장하고 실행 권한을 부여합니다.

$ chmod +x flash_image.sh
$ ./flash_image.sh

6. 부팅 및 최종 확인

  1. SD 카드 또는 eMMC에서 보드를 부팅합니다.
  2. 부팅 로그를 시리얼 콘솔로 확인합니다.
$ dmesg | grep mmc
  1. 루트 파일 시스템과 마운트 상태를 확인합니다.
$ mount | grep root

7. 결론

이번 글에서는 Yocto로 생성한 이미지를 SD 카드와 eMMC에 배포하고, U-Boot 환경을 설정하는 방법을 알아보았습니다. 플래싱 과정에서 문제가 발생하면 시리얼 콘솔을 이용해 로그를 확인하고, 환경 변수를 조정해보시기 바랍니다.

반응형