본문 바로가기

임베디드

SD-card 메모리 맵

SD 카드의 sector map을 정리해 보자. Buildroot 기준으로 표를 만들었으나 Ubuntu 및 Debian의 경우에도 거의 동일하다.

u-boot에 LCD 디스플레이 이미지를 1024x600 LCD 해상도에 꽉 차게 비트맵을 추가하니 u-boot의 binary 크기가 1MB에 육박한다. 1024 x 600 x 1 Byte로 계산하면 딱 600KB이고 기존 u-boot의 크기가 400KB가 조금 안되는 크기였다.

 

Items Size Sector # (From) Sector# (To) File name Partition name (size)
MBR 512Byte 0 0  

u-boot

(2MB)

Reserved 7.5KB 1 15  
SPL 32KB 16 79 u-boot-spl.bin
U-boot 1MB 80 2127 u-boot.bin
U-boot ENV 128KB 2128 2599  
Reserved 856KB 2600 4095  
VFAT partition 48MB 4096 102399   vfat
EXT4 partition Remaining sectors 102400 End of Sector   rootfs

 

환경 변수의 섹터 맵은 include/configs/sunxi-common.h 에 아래와 같이 선언되어 있다.

#define CONFIG_ENV_OFFSET               (1056 << 10) /* (8 + 24 + 1024) KiB */
#define CONFIG_ENV_SIZE                 (128 << 10)     /* 128 KiB */

SPL의 시작 섹터는 SoC 칩 내부의 부트롬에 고정된 값이다.

그리고 U-boot의 시작 섹터는 config 파일에 정의되어 있다.

CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x50

 

전체적인 레이아웃은 아래와 같이 빌드루트의 board/foxnuxone/genimage-foxnuxone.cfg 파일에 설정하여 자동으로 SD 이미지가 생성되도록 하였다.

image boot.vfat {
        vfat {
                files = {
                        "zImage",
                        "sun8i-s3-foxnux-one.dtb",
                        "boot.scr"
                }
        }
        size = 48M
}

image sdcard.img {
        hdimage {
        }

        partition u-boot {
                in-partition-table = "no"
                image = "u-boot-sunxi-with-spl.bin"
                offset = 8192
                size = 2088960 # 2048KB - 8192
        }

        partition boot {
                partition-type = 0xC
                bootable = "true"
                image = "boot.vfat"
        }

        partition rootfs {
                partition-type = 0x83
                image = "rootfs.ext4"
                size = 0
        }
}

 

u-boot에 LCD splash 화면을 변경하고 테스트할때에는 별다른 문제가 없었으나 최근에 saveenv 명령으로 환경변수를 저장하니 그래픽 이미지 중간 부분이 깨져 보여서 섹터맵에 문제가 있다는것을 최근에 알게되었다.

 

관련 문제 해결을 위해 업데이트한 내용을 Github에 commit 하였다.

https://github.com/foxnux/u-boot/commit/1f05a53464deb11a27d76e8fe86fe63d1253cffd