0

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 writeu-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で終了します。誰かが私が間違っていることを見たり、彼らの実用的な解決策を共有したりできますか?

4

1 に答える 1

0

誰でも...作業ソリューションを共有できますか?

(1) CONFIG_CMD_NAND_TRIMFFS を有効にして U-Boot を再構築します。v2011.12 にはこのコマンド オプションがない可能性があるため、バージョン 2016.01 を使用してください。

(2) コマンドを使用しないでくださいnand scrub ...
このコマンドは、ファクトリによって提供された不良ブロック情報を削除します。(この不良ブロック情報を破棄することで、将来問題が発生する可能性があります。)
plainnand erase ...コマンドを使用します。

(3)nand write.trimffs ...コマンドを使用して UBI イメージをインストールします。

上記の手順は、U-Boot と Linux カーネルが、同じパラメーターと ECC 方式を使用して NAND フラッシュにアクセスするように構成されていることを前提としています。

于 2016-05-25T08:36:09.810 に答える