Linux ルート ファイル システムを NAND デバイス (MT29F2G08ABAEAH4-IT:E) に書き込むのに苦労しています。
次のように Yocto によって作成された UBI イメージがあります。
mkfs.ubifs -r /path/to/rootfs -o /path/to/output/rootfs.ubifs -m 2048 -e 129024 -c 1600 -F
ubinize -o /path/to/output/rootfs.ubi -m 2048 -p 128KiB -s 512 ubinize.cfg
ubinize.cfg:
[ubifs]
mode=ubi
image=/path/to/output/rootfs.ubifs
vol_id=0
vol_type=dynamic
vol_name=ddcu-rootfs
vol_flags=autoresize
「製造」Linuxから次のコマンドを使用して、ファイルシステムを正常に書き込むことができます。
mount /dev/mmcblk0p3 /mnt/data/
ubiformat /dev/mtd8 -f /mnt/data/rootfs.ubi
ubiattach /dev/ubi_ctrl -m 8
mount -t ubifs ubi0_0 /mnt/rfs
このソリューションは機能しますが、最初に一時的な「製造」Linux を起動して、本番 Linux 用の RFS を準備する必要があるため、面倒です。そのため、u-boot から直接フラッシュしたいと考えています。複数のソース (例: http://www.linux-mtd.infradead.org/faq/ubifs.html ) とメモ (例: http://lists.denx.de/pipermail/u-boot/2011- )を読みました。 September/102740.html )、まだ何か間違ったことをしなければならないか、どこかにバグがあるに違いありません。
1.ナンドライト
nand write
u-boot 2011.12および2016.01でコマンドを使用しようとしました:
nand scrub.part -y mtd_rootfs
fatload mmc 0:3 ${loadaddr} rootfs.ubi
nand write ${loadaddr} mtd_rootfs ${filesize}
Linux を起動すると、
UBI: attaching mtd8 to ubi0
UBI: physical eraseblock size: 131072 bytes (128 KiB)
UBI: logical eraseblock size: 129024 bytes
UBI: smallest flash I/O unit: 2048
UBI: sub-page size: 512
UBI: VID header offset: 512 (aligned 512)
UBI: data offset: 2048
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 0:0, read 64 bytes
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 0:512, read 512 bytes
uncorrectable error :
uncorrectable error :
2.ユビ
別の参加者は、ubi u-boot 2016.01 コマンドを使用していました。
nand scrub.part -y mtd_rootfs
ext4load mmc 0:2 ${loadaddr} rootfs.ubi
ubi part mtd_rootfs
ubi create ddcu-rootfs
ubi write ${loadaddr} my-rootfs ${filesize}
u-boot でボリュームをマウントしようとするとubifsmount my-rootfs
失敗します:
Error reading superblock on volume 'my-rootfs' errno=-22!
Linux を起動しようとすると、次のようになります。
UBI: attaching mtd8 to ubi0
UBI: physical eraseblock size: 131072 bytes (128 KiB)
UBI: logical eraseblock size: 129024 bytes
UBI: smallest flash I/O unit: 2048
UBI: sub-page size: 512
UBI: VID header offset: 512 (aligned 512)
UBI: data offset: 2048
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 0:0, read 64 bytes
UBI error: validate_ec_hdr: bad VID header offset 2048, expected 512
UBI error: validate_ec_hdr: bad EC header
UBI error: ubi_io_read_ec_hdr: validation failed for PEB 0
UBI error: ubi_init: cannot attach mtd8
もちろん、より多くのバリアントを試しましたが、常にエラー -74で終了します。誰かが私が間違っていることを見たり、彼らの実用的な解決策を共有したりできますか?