U-Boot 포팅 (마무리 및 학습 자료 / 추가 학습을 위한 추천 실습)

2025. 3. 5. 12:57프로그래밍/시스템

추가 학습을 위한 추천 실습

U-Boot 포팅이 완료되었다면, 추가적으로 부팅 속도 최적화 및 NAND Flash/eMMC 환경에서의 적용 실습을 진행하면 더욱 실용적인 경험을 쌓을 수 있습니다.
이 문서에서는 커널과 연동하여 부팅 속도를 최적화하는 방법과 NAND Flash 또는 eMMC에서 U-Boot를 적용하는 실습 과정을 설명합니다.


1. 커널과 연동하여 부팅 속도 최적화

임베디드 시스템에서는 부팅 속도를 최적화하는 것이 중요하며, 이를 위해 U-Boot와 커널의 설정을 조정할 수 있습니다.


🔹 1) U-Boot에서 불필요한 지연 요소 제거

📌 부팅 딜레이 최소화 (bootdelay 값 수정)

setenv bootdelay 0
saveenv

자동 부팅 대기 시간을 제거하여 즉시 부팅 가능

📌 환경 변수에서 불필요한 단계 제거

printenv
setenv bootcmd 'run my_custom_boot'
saveenv
reset

단순한 부팅 명령어를 사용하여 불필요한 과정 제거


🔹 2) SPL (Secondary Program Loader) 적용하여 부팅 최적화

U-Boot는 일반적으로 SPL을 통해 1차 부트로더를 로드한 후 메인 U-Boot를 실행합니다.
📌 SPL 활성화 (configs/myboard_defconfig)

CONFIG_SPL=y
CONFIG_SPL_MMC_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y
CONFIG_SPL_LOAD_FIT=y

SPL을 활성화하여 빠른 부팅 경로 확보

📌 SPL 빌드

make myboard_defconfig
make -j$(nproc) u-boot-spl.bin

SPL을 사용하면 U-Boot 실행 전에 부팅 과정을 간소화하여 속도 향상 가능


🔹 3) 커널 최적화 (부팅 속도 단축)

📌 커널 부팅 시 불필요한 로그 출력을 최소화 (bootargs 수정)

setenv bootargs "console=ttyS0,115200 root=/dev/mmcblk0p2 rw quiet"
saveenv

quiet 옵션을 추가하여 커널 부팅 시 불필요한 디버깅 메시지 생략

📌 커널 설정에서 불필요한 드라이버 비활성화 (make menuconfig 실행)

  • Device Drivers → Generic Driver Options에서 불필요한 드라이버 제거
  • Kernel Features → Optimize for size 활성화

📌 커널 빌드 후 최적화된 이미지 확인

make zImage -j$(nproc)
ls -lh arch/arm/boot/zImage

커널 크기를 줄여 부팅 속도 향상 가능


2. NAND Flash 또는 eMMC 환경에서의 U-Boot 적용 연습

NAND Flash 또는 eMMC에서 U-Boot를 실행하려면, 플래시 메모리에 적합한 U-Boot 설정을 적용해야 합니다.


🔹 1) NAND Flash에 U-Boot 적용하기

📌 U-Boot에서 NAND 지원 활성화 (configs/myboard_defconfig)

CONFIG_MTD=y
CONFIG_CMD_NAND=y
CONFIG_MTD_RAW_NAND=y
CONFIG_SYS_NAND_SELF_INIT=y
CONFIG_SYS_NAND_U_BOOT_OFFS=0x200000

NAND Flash 드라이버 및 관련 명령어 활성화

📌 U-Boot 빌드 및 NAND 플래싱

make myboard_defconfig
make -j$(nproc)
nand erase 0x0 0x200000
nand write 0x82000000 0x0 0x200000

NAND Flash에 U-Boot를 직접 플래싱

📌 NAND Flash에서 직접 부팅

setenv bootcmd 'nand read 0x82000000 0x200000 0x400000; bootz 0x82000000 - 0x83000000'
saveenv
reset

NAND Flash에서 커널을 로드하고 실행하는 테스트 진행 가능


🔹 2) eMMC 환경에서 U-Boot 적용하기

📌 U-Boot에서 eMMC 지원 활성화 (configs/myboard_defconfig)

CONFIG_MMC=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_ADMA=y
CONFIG_CMD_MMC=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_FAT=y

eMMC 저장 장치를 지원하도록 설정 변경

📌 eMMC에 U-Boot 설치

mmc dev 0
mmc erase 0x0 0x400000
mmc write 0x82000000 0x0 0x400000

eMMC에 직접 U-Boot를 기록하여 부팅 테스트 가능

📌 eMMC에서 커널 로드

setenv bootcmd 'mmc dev 0; load mmc 0:1 0x82000000 /boot/zImage; load mmc 0:1 0x83000000 /boot/myboard.dtb; bootz 0x82000000 - 0x83000000'
saveenv
reset

eMMC에서 커널을 로드하고 실행하는 실습 진행 가능


📌 정리

부팅 속도를 최적화하기 위해 bootdelay, SPL, quiet 옵션을 조정하여 불필요한 과정 제거
커널 최적화를 통해 부팅 시간을 단축하고 불필요한 드라이버를 제거
NAND Flash에 U-Boot를 적용하고 부팅 테스트 진행
eMMC 환경에서 U-Boot를 설치하고 커널 로드하는 과정 실습