2025. 2. 26. 12:26ㆍ프로그래밍/시스템
U-Boot 환경 변수 설정
U-Boot 환경 변수(environment variables)는 부팅 과정에서 시스템 설정을 저장하고 관리하는 중요한 요소입니다.
환경 변수는 부트 커맨드, 저장 장치, 네트워크 설정 등 다양한 시스템 정보를 포함하며, 저장 위치와 수정 방법을 이해하는 것이 중요합니다.
이 문서에서는 환경 변수의 저장 방식, 수정 방법, fw_printenv 및 fw_setenv 명령어 사용법, u-boot.env 파일 생성 및 업데이트 방법을 설명합니다.
1. 환경 변수 저장 위치
🔹 환경 변수란?
U-Boot 환경 변수는 부팅 과정에서 사용되는 설정 값을 저장하며, 주요 정보는 다음과 같습니다.
✅ 부트 커맨드 (bootcmd)
✅ 커널 명령어 인자 (bootargs)
✅ 네트워크 설정 (ipaddr, serverip)
✅ 저장 장치 설정 (mmc, nand, nor, usb)
🔹 환경 변수의 저장 방식
U-Boot 환경 변수는 휘발성(RAM) 또는 비휘발성(NAND, eMMC, NOR 등)에 저장될 수 있습니다.
저장 위치 | 설명 |
RAM (휘발성) | 시스템 부팅 시 기본 설정 적용, 재부팅 후 초기화됨 |
MMC (SD 카드/eMMC, 비휘발성) | mmcblk0 또는 mmcblk1에 저장됨 |
NAND Flash (비휘발성) | NAND 플래시에 환경 변수를 저장 |
NOR Flash (비휘발성) | NOR 플래시에 직접 저장 |
EEPROM/SPI Flash | 일부 시스템에서는 SPI Flash에 저장 |
📌 현재 사용 중인 환경 변수 저장 방식 확인
printenv
📌 출력 예제
Environment size: 8192/65536 bytes
📌 환경 변수 저장 위치 확인 (CONFIG_ENV_IS_IN_XXX 값 확인)
grep CONFIG_ENV_IS_IN .config
📌 출력 예제
CONFIG_ENV_IS_IN_MMC=y
✅ 현재 환경 변수는 MMC(SD 카드/eMMC)에 저장됨을 의미함.
2. U-Boot 환경 변수 수정 (fw_printenv, fw_setenv)
🔹 fw_printenv : 환경 변수 확인
📌 설치 방법 (Ubuntu/Debian)
sudo apt install u-boot-tools
📌 환경 변수 출력
fw_printenv
📌 출력 예제
bootcmd=run boot_sequence
bootdelay=3
baudrate=115200
ethaddr=00:1A:2B:3C:4D:5E
ipaddr=192.168.1.100
serverip=192.168.1.1
🔹 fw_setenv : 환경 변수 수정
📌 환경 변수 설정 (fw_setenv)
sudo fw_setenv bootdelay 5
✅ 부팅 딜레이를 3초 → 5초로 변경
📌 환경 변수 추가
sudo fw_setenv myvariable "Hello U-Boot"
📌 변경된 환경 변수 확인
fw_printenv myvariable
📌 출력 예제
myvariable=Hello U-Boot
✅ 환경 변수를 추가하면 자동으로 저장됨.
3. u-boot.env 파일 생성 및 업데이트
환경 변수를 파일(u-boot.env)로 관리하면 저장 후 재부팅 시에도 유지할 수 있습니다.
📌 환경 변수 저장 파일 생성 (/etc/fw_env.config 설정 필요)
sudo vim /etc/fw_env.config
📌 SD 카드(eMMC) 저장 설정 예제 (/etc/fw_env.config)
/dev/mmcblk0 0x400000 0x2000
✅ /dev/mmcblk0 → 환경 변수를 저장할 디바이스
✅ 0x400000 → 환경 변수를 저장할 오프셋
✅ 0x2000 → 환경 변수 크기 (8KB)
📌 환경 변수 파일 생성
fw_setenv bootdelay 3
fw_setenv myvariable "Hello World"
📌 환경 변수 업데이트 (u-boot.env 파일 생성)
dd if=/dev/mmcblk0 of=u-boot.env bs=1K count=8
📌 환경 변수 파일을 수동으로 로드
load mmc 0:1 0x82000000 u-boot.env
env import -t 0x82000000 $filesize
✅ 환경 변수 파일을 수동으로 로드하여 적용할 수도 있음
4. 환경 변수 초기화 및 복구
📌 환경 변수 공장 초기화
env default -a
saveenv
📌 환경 변수 수동 복구
dd if=u-boot.env of=/dev/mmcblk0 bs=1K seek=4
✅ u-boot.env 파일을 사용하여 환경 변수를 복원할 수 있음.
📌 정리
✅ U-Boot 환경 변수 저장 위치 (mmc, nand, nor 등)
✅ 환경 변수 확인 (fw_printenv), 수정 (fw_setenv)
✅ 환경 변수 파일(u-boot.env) 생성 및 업데이트 방법
✅ 환경 변수 초기화 및 복구 방법