私はUBIBSがrootfsおよびユーザー設定データのファイルシステムとして使用される組み込みLinux(kernel-5.24)で開発中です。
工場で直接NANDフラッシュ(128 MB)を焼くためにUBIイメージを作成しようとしています。
前述したように、私のシステムには2つのUBIボリュームがあります。 1つはrootfs(rootfs.ubifs)、もう1つはユーザー設定(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
ファイルを1つにまとめて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に書き込まれ、2番目のボリュームのデータは書き込まれませんでした。そのため、2回目のテストでエラーが発生しました(データがありました)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チップのプログラミングに直接使用できます。