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 디버깅 가능
✅ 부팅 후 시리얼 터미널에서 명령을 입력하여 추가 설정 가능
'프로그래밍 > 시스템' 카테고리의 다른 글
U-Boot 포팅 (4. U-Boot 포팅 개념 및 주요 수정 포인트 / U-Boot 디렉토리 구조 및 주요 파일) (0) | 2025.02.26 |
---|---|
U-Boot 포팅 (4. U-Boot 포팅 개념 및 주요 수정 포인트 / 포팅 개요) (0) | 2025.02.26 |
U-Boot 포팅 (3. U-Boot 빌드 및 실행 / QEMU를 활용한 U-Boot 실행) (0) | 2025.02.26 |
U-Boot 포팅 (3. U-Boot 빌드 및 실행 / 빌드 결과물 분석) (0) | 2025.02.26 |
U-Boot 포팅 (3. U-Boot 빌드 및 실행 / 기본적인 U-Boot 빌드 과정) (0) | 2025.02.26 |