U-Boot 포팅 (5. 디바이스 트리(DTS) 및 환경 변수 설정 / U-Boot 환경 변수 설정)

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) 생성 및 업데이트 방법
환경 변수 초기화 및 복구 방법