배경 및 핵심 요약
- 공간 부족 해결 : 전체 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의 오프셋 정보를 사용해서 확인
- 준비 및 장치 확인
$ sudo fdisk -l
$ sudo umount /dev/sdb1
- fdisk를 이용한 파티션 테이블 생성
$ sudo fdisk /dev/sdb
o (새 테이블 생성) -> d
- 파티션 1 (
RootFs 시작 65536)
- 새 파티션 생성 (
n)
- primary 파티션 선택 (
p)
- 파티션 번호 지정 (
1)
- 첫 번째 섹터 지정 (
65536)
- 마지막 섹터 지정 (
+3G)
- 파티션 2 (
DataFs 디스크 남은공간 할당)
n → p → 2 → 6356992 → +enter (Partition 1 끝부터 끝까지)
- 변경사항 저장 및 fdisk 종료 (
w)
- 커널 재인식 및 파티션 확인
$ sudo partprobe /dev/sdb
$ lsblk
- 파일시스템 포맷
$ sudo mkfs.ext4 /dev/sdb1
$ 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 block | dd 명령어 (seek 값은 512-byte 섹터 기준) |
|---|
MBR | ~~MBR.scdard.bin~~ | 0x0 | s~~udo dd if=MBR.scdard.bin of=/dev/sdb bs=1 seek=0 |
| DTB | ma35d1-som-256m.dtb | 0x200 | sudo dd if=ma35d1-som-256m.dtb of=/dev/sdb bs=512 seek=512 |
| Kernel Image | Image | 0x1800 | sudo dd if=Image of=/dev/sdb bs=512 seek=6144 |
| BL2 DTB | bl2-ma35d1.dtb | 0x20000 | sudo dd if=bl2-ma35d1.dtb of=/dev/sdb bs=1k seek=128 |
| BL2 BIN | bl2-ma35d1.bin | 0x30000 | sudo dd if=bl2-ma35d1.bin of=/dev/sdb bs=1k seek=192 |
| U-Boot ENV | u-boot-initial-env.bin-sdcard | 0x40000 | sudo dd if=u-boot-initial-env.bin-sdcard of=/dev/sdb bs=1k seek=256 |
| FIP/U-Boot | fip.bin-sdcard | 0xC0000 | sudo dd if=fip.bin-sdcard of=/dev/sdb bs=1k seek=768 |
RootFs 데이터 기록 및 공간 확장
- RootFs 이미지 기록: (가장 최근 ext4 이미지 사용)
ls -al | grep rootfs.ext4-sdcard
sudo dd if=rootfs.ext4-sdcard of=/dev/sdb1 bs=4M status=progress
- 커널 파일 복사 및 마운트 해제
sudo mkdir -p /mnt/rootfs
sudo mount /dev/sdb1 /mnt/rootfs
sudo cp boot-sdcard.scr /mnt/rootfs/boot/
sudo umount /mnt/rootfs
sudo mkdir -p /mnt/rootfs
- RootFs 공간 확장 (3GB 확보):
sudo umount /dev/sdb1
sudo umount /dev/sdb2
sudo e2fsck -fy /dev/sdb1
sudo resize2fs /dev/sdb1
sudo resize2fs /dev/sdb2
lsblk
- 보드에서 확인
root@numaker-som-ma35d16a81:~
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