首先,我使用“闪存擦除”和“闪存写入”擦除已存在的带有 UBI 卷的闪存分区,这会将新内容写入 U-Boot 中的原始闪存,然后我格式化该分区,这将擦除新内容并创建 UBI卷将使用初始化脚本中的旧内容进行更新。
我需要在格式化之前获取新内容的备份,并使用新内容将备份更新到我在该初始化脚本中格式化后创建的 UBI 卷。
我尝试使用“dd”转储原始闪存分区,它得到了大小为 120MiB 的整个备份分区,但由于 UBI 标头占用了 MTD 中的一些空间,我的 UBI 设备只有 116MiB 空间,而 UBI 卷只有 115MiB ,因此我无法将 120MiB 备份箱更新到我的 115MiB ubi 卷。
我尝试将闪存分区内容转换为 UBI 映像并在卷中更新它的第二件事,这已完成,但在安装分区期间我遇到了这些错误:
UBIFS error (ubi0:0 pid 196): ubifs_read_node: bad node type (0 but expected 6)
UBIFS error (ubi0:0 pid 196): ubifs_read_node: bad node at LEB 0:0, LEB mapping status 1
Not a node, first 24 bytes:00000000: 55 42 49 23 01 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 08 00 UBI#....................
CPU: 0 PID: 196 Comm: block Tainted: P O 5.4.55 #0
Hardware name: econet,en7581 (DT)
Call trace:
dump_backtrace+0x0/0x110
show_stack+0x14/0x20
dump_stack+0xac/0xec
ubifs_read_node+0x220/0x244
ubifs_read_superblock+0x56c/0xc40
ubifs_mount+0x9d4/0x139c
legacy_get_tree+0x2c/0x60
vfs_get_tree+0x24/0xb0
do_mount+0x548/0x9dc
ksys_mount+0x8c/0xf0
__arm64_sys_mount+0x1c/0x30
el0_svc_handler+0x8c/0x140
el0_svc+0x8/0x208
这是我使用的 ubinize 命令:
ubinize -o /tmp/rootfs.ubi -m 4096 -p 256KiB -s 4096 /tmp/ubinize.cfg
这是 ubinize.cfg 的内容
[rootfs]
mode=ubi
vol_id=0
vol_size=115MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
我尝试更改 PEB 大小和 vol_size 似乎没有任何效果
当使用不包括 UBI 标头的 LEB 大小创建 ubifs 映像并对该映像进行 ubinize 并闪存擦除并写入该 ubi 映像时,错误已得到修复。