U-Boot 포팅 (3. U-Boot 빌드 및 실행 / 실제 보드에서 U-Boot 실행하기)

2025. 2. 26. 12:26프로그래밍/시스템

실제 보드에서 U-Boot 실행하기

QEMU에서 U-Boot를 실행하는 것뿐만 아니라, 실제 임베디드 보드에서도 U-Boot를 실행하려면 SD 카드나 eMMC에 U-Boot를 굽고, 시리얼(UART) 콘솔을 통해 디버깅하는 과정이 필요합니다.

이 문서에서는 SD 카드에 U-Boot를 굽는 방법과 시리얼 콘솔을 이용하여 부팅 로그를 확인하는 방법을 다룹니다.


1. 부트로더를 SD 카드에 굽기 (dd 명령어 사용)

U-Boot는 SD 카드, eMMC, SPI Flash 등 다양한 저장 장치에 설치할 수 있지만, 가장 일반적인 방법은 SD 카드에 굽고 보드를 부팅하는 방식입니다.


🔹 1) SD 카드 삽입 및 디바이스 확인

SD 카드를 삽입한 후, 디바이스 경로를 확인해야 합니다.

lsblk

📌 출력 예제

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  500G  0 disk 
├─sda1   8:1    0  100G  0 part /
sdb      8:16   1   32G  0 disk 
└─sdb1   8:17   1   32G  0 part 

✅ 여기서 sdb가 SD 카드임을 확인할 수 있습니다.


🔹 2) SD 카드 포맷 및 파티션 설정

SD 카드의 기존 데이터가 필요 없으면 포맷을 수행합니다.

📌 기존 파티션 삭제

sudo umount /dev/sdb*
sudo fdisk /dev/sdb
  • d 입력 → 기존 파티션 삭제
  • n 입력 → 새 파티션 생성 (p 선택 후, 기본값 유지)
  • w 입력 → 변경 사항 저장

📌 파일 시스템 생성 (FAT32)

sudo mkfs.vfat /dev/sdb1

🔹 3) dd 명령어를 사용하여 U-Boot 복사

SD 카드의 부트로더 영역에 U-Boot를 기록합니다.

sudo dd if=u-boot.bin of=/dev/sdb bs=1024 seek=8
sync

명령어 설명

옵션 설명
if=u-boot.bin 입력 파일(U-Boot 바이너리)
of=/dev/sdb 출력 디바이스(SD 카드)
bs=1024 1KB 블록 단위로 복사
seek=8 8KB 지점부터 기록

📌 TI 계열 SoC (예: BeagleBone Black)의 경우 MLO 필요

sudo dd if=MLO of=/dev/sdb bs=512 seek=1
sudo dd if=u-boot.img of=/dev/sdb bs=512 seek=2
sync

🔹 4) SD 카드 부팅

  • SD 카드를 보드에 삽입한 후 전원을 켜면 U-Boot가 실행됩니다.
  • UART(시리얼 콘솔)를 이용해 부팅 로그를 확인할 수 있습니다.

2. 시리얼(UART) 콘솔을 통한 디버깅 (minicom, picocom 활용)

🔹 1) 시리얼 장치 확인

리눅스에서는 /dev/ttyUSBx 또는 /dev/ttySx 형태로 시리얼 포트를 찾을 수 있습니다.

📌 USB-to-Serial 어댑터가 연결된 장치 확인

ls /dev/ttyUSB*

📌 출력 예제

/dev/ttyUSB0

시리얼 포트가 /dev/ttyUSB0로 인식됨을 확인

📌 권한 설정

sudo usermod -aG dialout $USER
sudo chmod 666 /dev/ttyUSB0

사용자가 시리얼 포트를 사용할 수 있도록 권한 부여


🔹 2) minicom 설치 및 설정

📌 minicom 설치

sudo apt install minicom

📌 minicom 실행

sudo minicom -D /dev/ttyUSB0 -b 115200

-D 옵션: 시리얼 포트 지정
-b 115200: 보드의 기본 전송 속도(baud rate) 설정

📌 설정 변경 (필요 시)

sudo minicom -s
  • "Serial port setup" → "115200 8N1" 설정
  • "Save setup as dfl" → 기본값으로 저장
  • "Exit" 선택

📌 종료 방법

Ctrl + A, X

🔹 3) picocom을 이용한 시리얼 콘솔 연결

📌 picocom 설치

sudo apt install picocom

📌 시리얼 연결

sudo picocom -b 115200 /dev/ttyUSB0

U-Boot 부팅 로그 확인 가능

📌 종료 방법

Ctrl + A, Ctrl + X

3. U-Boot 시리얼 콘솔 로그 예제

✅ SD 카드에서 U-Boot가 정상적으로 실행되면 시리얼 터미널에 아래와 같은 로그가 출력됩니다.

U-Boot 2024.01 (Mar 04 2025 - 10:30:00)

CPU:   Allwinner H3
DRAM:  1024 MiB
MMC:   mmc@1c0f000: 0, mmc@1c11000: 1
In:    serial
Out:   serial
Err:   serial
Net:   No ethernet found.
Hit any key to stop autoboot:  0 

부팅이 완료되었으며, 명령을 입력할 수 있는 상태
명령 입력 가능

help
printenv
boot

📌 정리

SD 카드를 포맷하고 dd 명령어로 U-Boot를 굽는 방법 학습
시리얼 콘솔(minicom, picocom)을 활용하여 U-Boot 디버깅 가능
부팅 후 시리얼 터미널에서 명령을 입력하여 추가 설정 가능