2025. 2. 26. 12:27ㆍ프로그래밍/시스템
부팅 스크립트 및 자동 부팅
U-Boot에서는 자동 부팅을 설정하여 지정된 저장 장치(SD 카드, eMMC) 또는 네트워크(TFTP, NFS)에서 커널을 로드하고 실행할 수 있습니다.
이를 위해 bootcmd 환경 변수를 활용하여 부팅 스크립트를 구성할 수 있습니다.
이 문서에서는 자동 부팅 설정, 네트워크 부팅(TFTP/NFS), SD 카드 및 eMMC 부팅 설정 방법을 설명합니다.
1. bootcmd 환경 변수 설정하여 자동 부팅 구성
🔹 bootcmd란?
- bootcmd는 U-Boot가 자동으로 실행할 부팅 명령어를 지정하는 환경 변수입니다.
- bootdelay 값이 0이 아닌 경우, 지정된 시간 동안 키 입력이 없으면 bootcmd가 실행됩니다.
- bootcmd는 저장 장치(eMMC, SD 카드) 또는 네트워크(TFTP, NFS)에서 커널을 로드하는 역할을 합니다.
🔹 bootcmd 기본 설정 예제 (eMMC 부팅)
📌 현재 bootcmd 확인
printenv bootcmd
📌 부팅 딜레이(초) 설정 (bootdelay)
setenv bootdelay 3
saveenv
📌 자동 부팅 명령어 설정 (eMMC 부팅)
setenv bootcmd 'load mmc 0:1 0x82000000 /boot/zImage; load mmc 0:1 0x83000000 /boot/dtb/myboard.dtb; bootz 0x82000000 - 0x83000000'
saveenv
✅ 3초 후 eMMC에서 zImage(커널)와 myboard.dtb(디바이스 트리)를 로드하여 자동 부팅
📌 부팅 테스트
run bootcmd
📌 자동 부팅 비활성화 (bootdelay를 -1로 설정)
setenv bootdelay -1
saveenv
2. 네트워크 부팅 (TFTP, NFS 활용)
U-Boot는 네트워크 부팅(TFTP/NFS)을 지원하여, 로컬 저장 장치 없이 커널을 원격 서버에서 불러올 수 있습니다.
🔹 1) 네트워크 설정 (IP 주소, 서버 IP 설정)
📌 U-Boot에서 네트워크 설정 확인
printenv ipaddr serverip
📌 IP 주소 설정
setenv ipaddr 192.168.1.100
setenv serverip 192.168.1.1
saveenv
✅ ipaddr: 보드의 IP 주소
✅ serverip: TFTP/NFS 서버 IP 주소
🔹 2) TFTP 부팅 설정
📌 TFTP를 이용한 커널 및 DTB 파일 로드
setenv bootcmd 'tftpboot 0x82000000 zImage; tftpboot 0x83000000 myboard.dtb; bootz 0x82000000 - 0x83000000'
saveenv
✅ 네트워크에서 zImage(커널) 및 myboard.dtb(디바이스 트리)를 다운로드하여 실행
📌 TFTP 부팅 실행
run bootcmd
🔹 3) NFS 부팅 설정
📌 NFS 서버에서 루트 파일 시스템 마운트 설정
setenv bootargs "console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.1.1:/nfsroot rw ip=dhcp"
setenv bootcmd 'tftpboot 0x82000000 zImage; tftpboot 0x83000000 myboard.dtb; bootz 0x82000000 - 0x83000000'
saveenv
✅ 네트워크에서 커널을 다운로드하고, NFS를 통해 루트 파일 시스템을 마운트
📌 NFS 부팅 실행
run bootcmd
3. SD 카드 및 eMMC 부팅 설정
U-Boot는 SD 카드 또는 eMMC에서 커널을 로드하여 부팅할 수 있도록 설정할 수 있습니다.
🔹 1) SD 카드 부팅 설정
📌 SD 카드에서 커널 및 DTB 파일 로드
setenv bootcmd 'load mmc 1:1 0x82000000 /boot/zImage; load mmc 1:1 0x83000000 /boot/dtb/myboard.dtb; bootz 0x82000000 - 0x83000000'
saveenv
✅ mmc 1:1 → SD 카드(mmcblk1)의 첫 번째 파티션에서 부팅 파일 로드
📌 SD 카드에서 부팅 테스트
run bootcmd
🔹 2) eMMC 부팅 설정
📌 eMMC에서 커널 및 DTB 파일 로드
setenv bootcmd 'load mmc 0:1 0x82000000 /boot/zImage; load mmc 0:1 0x83000000 /boot/dtb/myboard.dtb; bootz 0x82000000 - 0x83000000'
saveenv
✅ mmc 0:1 → eMMC(mmcblk0)의 첫 번째 파티션에서 부팅 파일 로드
📌 eMMC에서 부팅 테스트
run bootcmd
4. 부팅 순서 설정 (eMMC → SD 카드 → 네트워크 순)
📌 부팅 순서 자동 설정 (bootcmd 수정)
setenv bootcmd '
if fatload mmc 0:1 0x82000000 /boot/zImage; then
echo "Booting from eMMC...";
load mmc 0:1 0x83000000 /boot/dtb/myboard.dtb;
bootz 0x82000000 - 0x83000000;
else
if fatload mmc 1:1 0x82000000 /boot/zImage; then
echo "Booting from SD card...";
load mmc 1:1 0x83000000 /boot/dtb/myboard.dtb;
bootz 0x82000000 - 0x83000000;
else
echo "Trying network boot...";
tftpboot 0x82000000 zImage;
tftpboot 0x83000000 myboard.dtb;
bootz 0x82000000 - 0x83000000;
fi;
fi'
saveenv
✅ 부팅 순서
1️⃣ eMMC (mmc 0:1)에서 먼저 부팅 시도
2️⃣ SD 카드 (mmc 1:1)에서 부팅 시도
3️⃣ TFTP를 통한 네트워크 부팅 시도
📌 자동 부팅 테스트
run bootcmd
📌 정리
✅ bootcmd 환경 변수를 사용하여 자동 부팅 구성 가능
✅ 네트워크(TFTP, NFS)를 이용한 커널 및 루트 파일 시스템 부팅 방법 학습
✅ SD 카드 및 eMMC에서 부팅하는 설정 방법 정리
✅ 부팅 순서를 설정하여 eMMC → SD 카드 → 네트워크 순서대로 부팅 가능
'프로그래밍 > 시스템' 카테고리의 다른 글
U-Boot 포팅 (7. U-Boot 디버깅 및 문제 해결 / U-Boot 디버깅 방법) (0) | 2025.03.05 |
---|---|
U-Boot 포팅 (6. U-Boot 기능 확장 및 디바이스 드라이버 추가 / 새로운 디바이스 추가하기 (UART, I2C, SPI, GPIO 설정)) (0) | 2025.02.26 |
U-Boot 포팅 (5. 디바이스 트리(DTS) 및 환경 변수 설정 / U-Boot 환경 변수 설정) (0) | 2025.02.26 |
U-Boot 포팅 (5. 디바이스 트리(DTS) 및 환경 변수 설정 / 디바이스 트리(Device Tree)란?) (0) | 2025.02.26 |
U-Boot 포팅 (4. U-Boot 포팅 개념 및 주요 수정 포인트 / 새로운 보드 추가하기) (0) | 2025.02.26 |