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를 설치하고 커널 로드하는 과정 실습
'프로그래밍 > 시스템' 카테고리의 다른 글
커널 포팅 (1. 개요 및 준비 / 1.2 커널 포팅이란?) (0) | 2025.03.06 |
---|---|
커널 포팅 (1. 개요 및 준비 / 1.1 커널이란 무엇인가?) (0) | 2025.03.06 |
U-Boot 포팅 (마무리 및 학습 자료 / U-Boot 공식 문서 및 관련 자료 정리) (0) | 2025.03.05 |
U-Boot 포팅 (9. 추가 심화 과정) (0) | 2025.03.05 |
U-Boot 포팅 (실습 프로젝트: 새로운 보드에 U-Boot 포팅 / 최종 목표: 새로운 보드에서 U-Boot 및 리눅스 커널 부팅 성공) (0) | 2025.03.05 |