저는 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.img
FLASH를 굽는 방법입니다 . 이 2개의 파일을 final 어디에 넣어야 하나요 rawubi.img
?
== 더 많은 테스트로 업데이트됨 ==
ubinize.cfg를 다음과 같이 변경했습니다( usrconf
볼륨을 로 설정하고 static
볼륨 vol_id=0
을 rootfs
로 설정 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.ubifs
rootfs 볼륨을 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.img
FLASH 칩을 프로그래밍하는 데 직접 사용할 수 있습니다.