Linuxで/dev/mtd0を介してraw NAND FLASHにデータを書き込む方法は?

Linuxで/dev/mtd0を介してraw NAND FLASHにデータを書き込む方法は?

私はNAND FLASHをストレージとして使用する組み込みLinuxシステム(5.10.24)を開発しています。
NAND FLASHは4つの部分に分かれており、0部分はu-boot用、1部分はカーネル用、2部分はUBIFS用、3部分は別のUBIFSパーティションです。
したがって、Linuxが起動したら/dev/mtd0, /dev/mtd1, /dev/mtd2, /dev/mtd3

これで、/dev/mtd0POSIX-Cファイル操作を介して(生のフラッシュ、ファイルシステムなし)からu-bootのデータを読み取ることができます。
それから/dev/mtd0

すべてのファイルの読み取りおよび書き込み操作は正常であり、エラーは報告されません。
しかし、システムを再びu-bootで再起動するとspi nand read oob error ,ret= -74 , oob addr e0000, ooboffs 0, ooblen 64

NAND OOBに問題があるようです。このエラーはなぜ発生しますか?/dev/mtdインターフェイスを介してraw NAND FLASHにデータを書き込む方法は?

ベストアンサー1

NANDフラッシュは書き込み前にブロック単位で消去する必要があります。ioctlそのためにできることはいくつかあります。mtd-utils次のユーティリティを使用して、Linuxでmtdボリュームと対話するためのツールセットflashcphttp://www.linux-mtd.infradead.org/doc/general.html

つまり、U-Boot内でmtdボリュームと対話する最も一般的な方法は、U-Boot環境のストレージとして使用することです。 mtdボリュームに直接書き込むのではなく、NAND(すべてのチェックサムを含む)に書き込みますsetenv。 Linuxではなどをsaveenv使用できます。fw_printenv

おすすめ記事