NANDフラッシュを搭載したi.MX35 Freescaleボードに取り組んでいます。u-boot をカーネルからアップグレードしようとしています。ネットで調べたのですが、あまり詳しくありませんでした
これを行うことは可能ですか、どうすればそれを行うことができますか? 誰かがこれを行うために必要なコマンドと手順を提供できますか?
NANDフラッシュを搭載したi.MX35 Freescaleボードに取り組んでいます。u-boot をカーネルからアップグレードしようとしています。ネットで調べたのですが、あまり詳しくありませんでした
これを行うことは可能ですか、どうすればそれを行うことができますか? 誰かがこれを行うために必要なコマンドと手順を提供できますか?
カーネルが何で構成されているかを詳しく知らなければ、これについてアドバイスを与えるのは非常に難しいでしょう。
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_debug
read
また、動詞も提供しwrite
ます。これは、あなたが想像することを正確に実行します。私はこれらでよりも成功しませんでしたcp
フラッシュプログラミングが機能しなかった場合、システムが後で起動できなくなる可能性があるため、これを試す前に、代替の起動配置(おそらくMMCカード)が便利で動作することを確認する必要があることは言うまでもありません。
私にとってうまくいかず、苦痛を証明したのは、パーティションに使用されるさまざまなECCアルゴリズムです。フラッシュの最初の数個の消去ユニットは通常、より堅牢であることが保証されており、SoCのマスクPROMの最小初期ローダーがサポートするECCを使用します。これは、デバイスの他の部分で使用しているものではない可能性があります。確かに、私が使用しているMicronパーツではそうではありません。
これは、ブートローダーとカーネルが変更を加えないと、互いのパーティションの読み取りと書き込みができない可能性があることを意味します。