我正在开发嵌入式 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
音量设置为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 卷更改为 时,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芯片进行编程。