포스트

임베디드 스터디 - U-Boot

임베디드 스터디 - U-Boot

U-Boot

  • U-Boot은 OS 실행 시 2nd Stage 부트로더에 해당하며, 동작 순서는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
BootROM (MROM)
    ↓ SRAM에 SPL 로드
SPL (SRAM에서 실행)
  - DRAM 초기화
  - U-Boot proper를 DRAM에 로드
    ↓
U-Boot proper (DRAM에서 실행)
  - 하드웨어 전체 초기화
  - 커널 이미지 로드
  - OTA/멀티 이미지 관리
    ↓
커널

SPL (Secondary Program Loader)

  • U-Boot 도 MBR의 용량 문제와 마찬가지로 SRAM에 올리기엔 너무 용량이 크다.
    • 그래서 SPL에서 DRAM을 초기화하고, DRAM에 U-Boot 이미지를 로드하여 운용한다.
    • DRAM은 사용하기 전 무조건 초기화(메모리 컨트롤러의 타이밍, 전압, 클럭 셋업 등)를 거치고 사용해야한다.

U-Boot Proper

  • SPL이 DRAM에 설정한 부트로더 본체
    • Flash 메모리에 환경변수를 설정하여 부트로더 기능을 수행한다.
1
2
3
4
bootcmd=tftp 0x80000000 uImage; bootm 0x80000000
serverip=192.168.1.1
ipaddr=192.168.1.100
bootdelay=3
  • U-Boot Proper의 환경변수 세팅은 다음 명령어로 수행한다.
명령어역할
printenv현재 환경변수 전체 출력
setenv환경변수 값 설정 (메모리에만 반영)
saveenv변경된 환경변수를 Flash에 저장
  • saveenv는 Flash 메모리의 특성에 따라, 환경변수 저장 블럭에 해당하는 Flash 블럭을 소거하고 다시 메모리를 쓴다.
  • setenv만 하고 saveenv를 안 하면 재부팅 후 설정이 날아간다.
1
2
3
4
5
saveenv 실행
    ↓
환경변수 저장용 Flash 블록 소거
    ↓
새 환경변수 데이터 쓰기
  • bootcmd에는 두 가지 명령이 사용된다.
    • 부팅 소스 설정 (tftp/nfs) : 메모리 구간에 부팅 이미지를 올리는 방법
    • bootm : Boot from Memory, 지정한 메모리 주소에 올라와 있는 커널 이미지를 실행하는 명령어

부팅 소스 방식

  • U-Boot의 주요 특징으로 tftp, nfs 부팅 소스 방식이 소개된다.
    • tftp(Trivial File Transfer Protocol) : 네트워크를 통해 서버에서 파일을 가져오는 프로토콜
    • nfs(Network File System) : 루트 파일시스템 전체를 네트워크로 마운트
    • 그 외에도 SD카드, USB 등을 사용할 수 있다.
  • U-Boot의 주요 부팅 소스 기능을 사용하기 위해, U-Boot Proper에서 미리 인터페이스 초기화를 수행한다.
    • 하드웨어 인터페이스는 BSP(Board Support Package)에 달려 있다.
  • tftp/nfs를 사용하면 타겟 보드가 네트워크에 의존해, Flash를 다시 구울 필요 없이 신속하게 펌웨어를 업데이트하고 개발해볼 수 있다.
1
2
3
4
5
6
7
개발 PC (서버 역할)
  ├── TFTP 서버: uImage (커널 이미지) 제공
  └── NFS 서버: 루트 파일시스템 전체 제공

타겟 보드
  ├── 커널 ← tftp로 PC에서 받아옴
  └── 루트 파일시스템 ← nfs로 PC에 마운트
  • tftp/nfs는 개발 보드에서 신속하게 개발하는데 사용하기 용이하고, 실제 양산제품(FM)에서는 SD카드/eMMC/SPI Flash로 부팅하여 제품을 출시한다.
1
2
3
4
5
6
7
8
9
공장 출고 / 최초 설치
  → JTAG으로 Flash에 U-Boot + 커널 직접 탑재

개발 단계 (개발 보드)
  → U-Boot에서 tftp/nfs로 빠르게 반복 개발

양산 제품 (네트워크 없는 실제 보드)
  → U-Boot에서 SD카드/eMMC/SPI Flash로 부팅
  → OTA 필요시 USB나 시리얼로 업데이트
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.