创建原始闪存分区的备份,然后将其格式化为 UBI,然后更新 UBI 卷

问题描述 投票:0回答:1

首先,我使用“闪存擦除”和“闪存写入”擦除已存在的带有 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 似乎没有任何效果

linux flash filesystems rootfs ubifs
1个回答
0
投票

当使用不包括 UBI 标头的 LEB 大小创建 ubifs 映像并对该映像进行 ubinize 并闪存擦除并写入该 ubi 映像时,错误已得到修复。

© www.soinside.com 2019 - 2024. All rights reserved.