如何生成具有 2 个 UBI 卷的原始 UBI 映像?

如何生成具有 2 个 UBI 卷的原始 UBI 映像?

我正在开发嵌入式 Linux (kernel-5.24),其中 UBIFS 用作 rootfs 和用户配置数据的文件系统。

现在我正在尝试生成一个 UBI 映像以直接从工厂内刻录 NAND 闪存 (128MB)。

正如我所说,我的系统中有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音量设置为staticvol_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.ubifs当 rootfs 卷更改为 时,FLASH 似乎没有填充数据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芯片进行编程。

相关内容