이미지 배포 및 보드 플래싱
이 글에서는 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 카드 준비
- SD 카드를 PC에 연결합니다.
lsblk
명령어로 디바이스 이름을 확인합니다.
$ lsblk
예: /dev/sdX
또는 /dev/mmcblk0
와 같이 표시됩니다.
- 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 확인
- SD 카드에 기록한 Yocto 이미지를 이용해 보드를 부팅합니다.
- 부팅 후 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 부트로더 디버깅
부팅 중 문제가 발생하면 아래와 같이 로그를 분석합니다.
시리얼 콘솔에서 부팅 로그 확인
=> boot
디바이스 트리, 커널 이미지 경로, 루트 파일 시스템 설정 확인
문제가 있는 경우 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. 부팅 및 최종 확인
- SD 카드 또는 eMMC에서 보드를 부팅합니다.
- 부팅 로그를 시리얼 콘솔로 확인합니다.
$ dmesg | grep mmc
- 루트 파일 시스템과 마운트 상태를 확인합니다.
$ mount | grep root
7. 결론
이번 글에서는 Yocto로 생성한 이미지를 SD 카드와 eMMC에 배포하고, U-Boot 환경을 설정하는 방법을 알아보았습니다. 플래싱 과정에서 문제가 발생하면 시리얼 콘솔을 이용해 로그를 확인하고, 환경 변수를 조정해보시기 바랍니다.
'Linux > yocto' 카테고리의 다른 글
Yocto 기반 시스템의 OTA 업데이트와 보안 관리 (0) | 2025.05.27 |
---|---|
Yocto 실무 예제: 멀티미디어 및 네트워킹 (0) | 2025.05.24 |
Yocto 애플리케이션 개발 (0) | 2025.05.23 |
고급 개발 기법: 커널 커스터마이징 및 Device Tree 수정 (0) | 2025.05.22 |
Yocto SDK 생성과 활용 (0) | 2025.05.20 |