sd카드 partition 설정

SMJ·2025년 11월 23일

BSP development

목록 보기
12/18

배경 및 핵심 요약

  • 공간 부족 해결 : 전체 pack파일 .sdcard 형태의 이미지는 작은 크기로 고정하여 원하는 크기 확보가 불가능함
  • 수동 fdisk로 3GB rootFs 및 11.8GB DataFs 확보
  • Sector 65536 : MA35D1 보드 Yocto 설계에 따라 RootFs은 65536에서 해야 부팅 됌
  • U-Boot Script (boot-sdcard.scr)가 고정된 block 주소에서 kernel을 찾으려 하기에 고정된 주소를 확인하기 위해 pack-sdcard.json의 오프셋 정보를 사용해서 확인
  1. 준비 및 장치 확인
# 작업할 sd 카드 장치명 확인
$ sudo fdisk -l
    
# 원래 할당되어 있었던 sd카드 마운트 해제
$ sudo umount /dev/sdb1
    
  1. fdisk를 이용한 파티션 테이블 생성
# fdisk 시작
$ sudo fdisk /dev/sdb
    
# fdisk 내부 명령어 입력
o (새 테이블 생성) ->  d
  1. 파티션 1 (RootFs 시작 65536)
      1. 새 파티션 생성 (n)
      1. primary 파티션 선택 (p)
      1. 파티션 번호 지정 (1)
      1. 첫 번째 섹터 지정 (65536)
      1. 마지막 섹터 지정 (+3G)
  2. 파티션 2 (DataFs 디스크 남은공간 할당)
      1. np26356992+enter (Partition 1 끝부터 끝까지)
  3. 변경사항 저장 및 fdisk 종료 (w)
  4. 커널 재인식 및 파티션 확인
# 커널에 파티션 변경
$ sudo partprobe /dev/sdb
    
# 새 파티션 존재 여부 확인
$ lsblk
  1. 파일시스템 포맷
# 파티션 1 포맷 (EXT4)
$ sudo mkfs.ext4 /dev/sdb1
    
# 파티션 2 포맷 (EXT4)
$ sudo mkfs.ext4 /dev/sdb2


부트로더 및 커널 기록 (Raw offset)

  • ~/yocto/build/tmp-glibc/deploy/images/numaker-som-ma35d16a81/nuwriter/pack-sdcard.json
    참조
    {
      "image": [
        {
          "offset": "0x0",
          "file": "MBR.scdard.bin",
          "type": 0
        },
        {
          "offset": "0x400",
          "file": "conv/header.bin",
          "type": 0
        },
        {
          "offset": "0x20000",
          "file": "bl2-ma35d1.dtb",
          "type": 0
        },
        {
          "offset": "0x30000",
          "file": "bl2-ma35d1.bin",
          "type": 0
        },
        {
          "offset": "0x40000",
          "file": "u-boot-initial-env.bin-sdcard",
          "type": 0
        },
        {
          "offset": "0xC0000",
          "file": "fip.bin-sdcard",
          "type": 0
        },
        {
          "offset": "0x2c0000",
          "file": "Image.dtb",
          "type": 0
        },
        {
          "offset": "0x300000",
          "file": "Image",
          "type": 0
        },
        {
          "offset": "33554432",
          "file": "rootfs.ext4-sdcard",
          "type": 0
        }
      ]
    }
  • pack-sdcard.json 오프셋을 기반으로 dd 명령어 실행 및 부트로더와 커널 파티션 외부에 기록
    파일 역할파일 이름script blockdd 명령어 (seek 값은 512-byte 섹터 기준)
    MBR~~MBR.scdard.bin~~0x0s~~udo dd if=MBR.scdard.bin of=/dev/sdb bs=1 seek=0
    DTBma35d1-som-256m.dtb0x200sudo dd if=ma35d1-som-256m.dtb of=/dev/sdb bs=512 seek=512
    Kernel ImageImage0x1800sudo dd if=Image of=/dev/sdb bs=512 seek=6144
    BL2 DTBbl2-ma35d1.dtb0x20000sudo dd if=bl2-ma35d1.dtb of=/dev/sdb bs=1k seek=128
    BL2 BINbl2-ma35d1.bin0x30000sudo dd if=bl2-ma35d1.bin of=/dev/sdb bs=1k seek=192
    U-Boot ENVu-boot-initial-env.bin-sdcard0x40000sudo dd if=u-boot-initial-env.bin-sdcard of=/dev/sdb bs=1k seek=256
    FIP/U-Bootfip.bin-sdcard0xC0000sudo dd if=fip.bin-sdcard of=/dev/sdb bs=1k seek=768


RootFs 데이터 기록 및 공간 확장

  1. RootFs 이미지 기록: (가장 최근 ext4 이미지 사용)
    # 가장 최근 ext4 이미지 사용
    ls -al | grep rootfs.ext4-sdcard
     
    # 심볼릭 링크 이미지로 사용하면 dd 명령어가 적용x
    sudo dd if=rootfs.ext4-sdcard of=/dev/sdb1 bs=4M status=progress
  1. 커널 파일 복사 및 마운트 해제
    # 1번 마운트
    sudo mkdir -p /mnt/rootfs
    sudo mount /dev/sdb1 /mnt/rootfs
    sudo cp boot-sdcard.scr /mnt/rootfs/boot/
    sudo umount /mnt/rootfs
    
    # 2번 마운트
    sudo mkdir -p /mnt/rootfs
    
  1. RootFs 공간 확장 (3GB 확보):
    # 마운트 해제
    sudo umount /dev/sdb1
    sudo umount /dev/sdb2
    
    # 파일 시스템 검사
    sudo e2fsck -fy /dev/sdb1
    
    # RootFs 크기 확장
    sudo resize2fs /dev/sdb1
    
    # DataFs 크기 확장
    sudo resize2fs /dev/sdb2
    
    # 파티션 구분 확인
    lsblk
  1. 보드에서 확인
    root@numaker-som-ma35d16a81:~# df -h
    Filesystem                Size      Used Available Use% Mounted on
    /dev/root                 2.9G    292.5M      2.5G  10% /
    devtmpfs                 70.2M         0     70.2M   0% /dev
    tmpfs                    70.9M         0     70.9M   0% /dev/shm
    tmpfs                    70.9M      8.6M     62.3M  12% /run
    tmpfs                    70.9M         0     70.9M   0% /sys/fs/cgroup
    tmpfs                    70.9M         0     70.9M   0% /tmp
    tmpfs                    70.9M     12.0K     70.9M   0% /var/volatile
    
profile
Embedded Junior Developer

0개의 댓글