2개의 UBI 볼륨으로 원시 UBI 이미지를 생성하는 방법은 무엇입니까?

2개의 UBI 볼륨으로 원시 UBI 이미지를 생성하는 방법은 무엇입니까?

저는 UBIFS가 rootfs 및 사용자 구성 데이터용 파일 시스템으로 사용되는 임베디드 Linux(kernel-5.24)에서 개발 중입니다.

이제 공장에서 직접 NAND 플래시(128MB)를 굽기 위해 UBI 이미지를 생성하려고 합니다.

앞서 말했듯이 내 시스템에는 2개의 UBI 볼륨이 있습니다. 하나는 rootfs(rootfs.ubifs)이고 다른 하나는 사용자 구성(usrconf.ubifs)입니다. ubinize.cfg는 다음과 같습니다.

[ubifs_volume]
mode=ubi
image=rootfs.ubifs
vol_id=0
vol_size=56MiB
vol_type=dynamic
vol_alignment=1
vol_name=rootfs

[usrconf_volume]
mode=ubi
image=usrconf.ubifs
vol_id=1
vol_size=56MiB
vol_type=dynamic
vol_alignment=1
vol_name=usrconf
vol_flags=autoresize

rootfs.ubifs이제 내 질문은 파일과 usrconf.ubifs파일을 하나로 결합하여 rawubi.imgFLASH를 굽는 방법입니다 . 이 2개의 파일을 final 어디에 넣어야 하나요 rawubi.img?

== 더 많은 테스트로 업데이트됨 ==
ubinize.cfg를 다음과 같이 변경했습니다( usrconf볼륨을 로 설정하고 static볼륨 vol_id=0rootfs로 설정 vol_id=1).

[usrconf_volume]
mode=ubi
image=usrconf.ubifs
vol_id=0
vol_size=56MiB
vol_type=static
vol_alignment=1
vol_name=usrconf

[ubifs_volume]
mode=ubi
image=rootfs.ubifs
vol_id=1
vol_size=56MiB
vol_type=dynamic
vol_alignment=1
vol_name=rootfs
vol_flags=autoresize

ubinize -m 2048 -p 128KiB -s 512 -O 2048 ./ubinize.cfg -v -o rawubi.img

생성된 파일을 NAND FLASH에 구운 후 rawubi.img로 Linux를 부팅했는데 root=ubi0:rootfs rootfstype=ubifs다음 오류가 발생했습니다.

[    2.671151] UBIFS (ubi0:1): Mounting in unauthenticated mode
[    2.677163] UBIFS (ubi0:1): background thread "ubifs_bgt0_1" started, PID 70
[    2.706562] UBIFS error (ubi0:1 pid 1): ubifs_read_node: bad node type (255 but expected 9)
[    2.715237] UBIFS error (ubi0:1 pid 1): ubifs_read_node: bad node at LEB 187:115776, LEB mapping status 0
[    2.725139] Not a node, first 24 bytes:
[    2.725148] 00000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

rootfs.ubifsrootfs 볼륨을 vol_id=1.

답변1

굽기 작업에서 버그를 발견했습니다 rawubi.img. 일부 rawubi.img(첫 번째 볼륨)만 NAND FLASH에 기록되었으며 두 번째 볼륨의 데이터는 기록되지 않았습니다. 그래서 두 번째 테스트에서 오류가 발생했습니다(데이터가 있었습니다) 0xFF) .

그래서 전체 굽기를 수정하여 아래와 같이 볼륨을 읽기 전용 모드(정적 볼륨으로 설정)로 마운트 rawubi.img할 수 있었습니다 .usrconf

# mount -t ubifs ubi0:usrconf /mnt/
[   20.695088] UBIFS (ubi0:1): static UBI volume - read-only mode
[   20.701180] UBIFS error (ubi0:1 pid 175): ubifs_mount: cannot mount read-write - read-only media
[   20.710798] UBIFS (ubi0:1): static UBI volume - read-only mode
[   20.717229] UBIFS (ubi0:1): Mounting in unauthenticated mode
[   20.762993] UBIFS (ubi0:1): UBIFS: mounted UBI device 0, volume 1, name "usrdata", R/O mode
[   20.771664] UBIFS (ubi0:1): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
[   20.781928] UBIFS (ubi0:1): FS size: 57393152 bytes (54 MiB, 452 LEBs), journal size 9023488 bytes (8 MiB, 72 LEBs)
[   20.792741] UBIFS (ubi0:1): reserved for root: 0 bytes (0 KiB)
[   20.798776] UBIFS (ubi0:1): media format: w4/r0 (latest is w5/r0), UUID 2CA863C1-5D80-4069-AC4D-DE831E343103, small LPT model
[   20.810928] UBIFS (ubi0:1): full atime support is enabled.

결승피복재 ubinize.cfg다음과 같이,

[ubifs_volume]
mode=ubi
image=rootfs.ubifs
vol_id=0
vol_size=56MiB
vol_type=dynamic
vol_alignment=1
vol_name=rootfs

[usrconf_volume]
mode=ubi
image=usrconf.ubifs
vol_id=1
vol_size=56MiB
vol_type=static
vol_alignment=1
vol_name=usrconf

내가 사용한 명령은,

ubinize -m 2048 -p 128KiB -s 512 -O 2048 ./ubinize.cfg -v -o rawubi.img

생성된 결과는 rawubi.imgFLASH 칩을 프로그래밍하는 데 직접 사용할 수 있습니다.

관련 정보