0

NANDフラッシュを搭載したi.MX35 Freescaleボードに取り組んでいます。u-boot をカーネルからアップグレードしようとしています。ネットで調べたのですが、あまり詳しくありませんでした

これを行うことは可能ですか、どうすればそれを行うことができますか? 誰かがこれを行うために必要なコマンドと手順を提供できますか?

4

1 に答える 1

2

カーネルが何で構成されているかを詳しく知らなければ、これについてアドバイスを与えるのは非常に難しいでしょう。

NANDからシステムを起動しているように見えるので、カーネルがmtdサポートで構築されていると仮定します-システムがNANDからu-bootを起動し、次にカーネルとルートファイリングシステムを別の場所から起動することは完全に可能です。

私の経験では、Micron NANDフラッシュを備えたOMAP2ボードを使用していますが、一般的な手順は同じです。試してみる以外に、特に優れたドキュメントのソースはないようです。

1:運が良ければ、NANDがパーティション化され、mtdサブシステムがカーネルサブシステムにコンパイルされ、NAND上にパーティションが見つかりました(サイズはカーネルブートラインで、またはプログラムでボードファイルで指定されます)。

起動時のコンソールに、次のようなメッセージが表示される場合があります。[注意:このログの一部が無効になっている可能性があります]

[    1.670471] Creating 5 MTD partitions on "omap2-nand.0":
[    1.676086] 0x000000000000-0x000000020000 : "xload"
[    1.684814] 0x000000020000-0x0000000a0000 : "barebox"
[    1.692626] 0x0000000a0000-0x0000000c0000 : "bareboxenv"
[    1.700622] 0x0000000c0000-0x0000004c0000 : "kernel"
[    1.709899] 0x0000004c0000-0x000040000000 : "root"

ここでは、u-bootの代わりにBareboxを使用したOMAP2システムを使用していますが、同じことが当てはまります。ここには、プライマリローダーパーティションxload、メインブートローダーbarebox、barebox()用の不揮発性ストレージbareboxenv、カーネル、ルートファイリングシステムがあります。

2:その場合、これらの各パーティションに開発ファイルがあります。/dev

root@fk-00A0DE4648fe:~# ls /dev/
block               mtd4                tty11               tty49
bus                 mtd4ro              tty12               tty52
char                mtdblock0           tty13               tty50
console             mtdblock1           tty14               tty51
core                mtdblock2           tty15               tty520
cpu_dma_latency     mtdblock3           tty16               tty53trl
disk                mtdblock4           tty17               tty54om

mtdblockファイルはrawブロックデバイスであり、手順1のパーティションに対応します。

3:あなたはmtdinfo -aより多くの情報のために使うことができます:

....
Name:                           barebox
Type:                           nand
Eraseblock size:                131072 bytes, 128.0 KiB
Amount of eraseblocks:          4 (524288 bytes, 512.0 KiB)
Minimum input/output unit size: 2048 bytes
Sub-page size:                  2048 bytes
OOB size:                       64 bytes
Character device major/minor:   90:2
Bad blocks are allowed:         true
Device is writable:             true
....

4:パーティション(例:block1)を消去できます:

mtd_debug erase /dev/mtdblock1 0x0 0x8000

2つのアドレスは、ブロックの先頭からのオフセットと消去する長さです。

5:新しく消去されたフラッシュに画像をコピーします

cp <uboot_image> /dev/mtdblock1

ほとんどのNANDフラッシュには非常に特殊なプログラミングサイズがありますが、これはおそらく驚くべきことですが、これはおそらくブロックの倍数です。

mtd_debugreadまた、動詞も提供しwriteます。これは、あなたが想像することを正確に実行します。私はこれらでよりも成功しませんでしたcp

フラッシュプログラミングが機能しなかった場合、システムが後で起動できなくなる可能性があるため、これを試す前に、代替の起動配置(おそらくMMCカード)が便利で動作することを確認する必要があることは言うまでもありません。

私にとってうまくいかず、苦痛を証明したのは、パーティションに使用されるさまざまなECCアルゴリズムです。フラッシュの最初の数個の消去ユニットは通常、より堅牢であることが保証されており、SoCのマスクPROMの最小初期ローダーがサポートするECCを使用します。これは、デバイスの他の部分で使用しているものではない可能性があります。確かに、私が使用しているMicronパーツではそうではありません。

これは、ブートローダーとカーネルが変更を加えないと、互いのパーティションの読み取りと書き込みができない可能性があることを意味します。

于 2012-08-31T15:04:40.487 に答える