2010年12月16日
KZM-A9-Dualボードのいろいろなブート方法
KZM-A9-Dualは評価ボードなので、いろいろなブート方法があります。
NORフラッシュ、eMMC、SDカードからのブートを試しました。これらはボード上のディップスイッチで切り替えることができます。
NORフラッシュからのブート
DSW1-3: ON DSW1-4: ON and 4 bank swapping by DSW1-7, DSW1-8
シンプルなのでデバッグのときに扱いやすいブート方法です。
KZM-A9-Dualでは64MBのNORフラッシュを搭載しています。
電源投入するとCPUはNORフラッシュの0番地から焼いてあるu-bootを実行します。NORフラッシュはアクセス速度が遅いため、u-bootは自分自身をRAM上にコピーしてから実行しています。
NORフラッシュはPARTNER-Jetのロードコマンドを使って簡単に書き込むことができます。PARTNER-JetのロードコマンドではロードするアドレスがRAMならそのままロードするし、NORフラッシュならば自動的にEraseしてから書き込んでくれます。(すでに同じ内容が書いてあった場合にはスキップしてくれます。)
NORフラッシュの先頭部分はディップスイッチによって512KB単位で4通りにバンク切り替えができるようになっています。このため4通りのブートプログラムを切り替えて使うことができます。
ちなみにフラッシュメモリにはNOR型とNAND型がありますが、NOR型はReadはランダムアクセスが可能なので、そこにプログラムを置いてCPUが直接実行することができます。Writeはブロック単位です。NAND型はブロック単位でしか読み書きができません。プログラムをNAND型のフラッシュメモリに格納したときには、一度RAMにロードしてから実行する必要があります。
eMMCからのブート
DSW1-3: ON DSW1-4: OFF
eMMCは一種のNAND型のフラッシュメモリですが、コントローラを内蔵していて、MMCカードと同じインタフェースになっています。ただしメモリチップが直接基板上に実装されているので抜き差しはできません。(それで embedded MMC)
KZM-A9-Dualでは4GBのeMMCと搭載しています。このサイズがあれば通常のLinuxやAndroidのルートファイルシステムを格納することができます。
KZM-A9-DualのディップスイッチをeMMC起動に設定すると、電源投入時にCPUは内蔵ROMから実行しはじめます。そしてeMMCの最初のパーティションの先頭に格納されているmini bootを内蔵SRAMにロードしてそれを実行します。内蔵SRAMは初期化が不要で、リセット直後からすぐに読み書きができるようになっています。
mini bootはDRAMの初期化を行って、そこにeMMCからu-bootをロードし実行します。
u-bootは2番目のパーティションに格納されているカーネルのuImageをロードして実行します。
3番目のパーティションをext3でフォーマットしてAndroidのルートファイルシステムを置き、カーネルのブートパラメータでルートファイルシステムとしてそこを指定するようにしておけば、eMMCだけでAndroidを起動することができます。
SDカードからのブート
DSW1-3: OFF DSW1-4: ON
SDカードからのブートはeMMCのブートに似ています。eMMCブートの場合は最初のパーティションの先頭の生データをロードしましたが、SDブートでは最初のパーティションのVFATファルスシステムのsdbootというファイルをロードします。
2番目のパーティションはubootの環境を保存するための領域に使用します。
3番目のパーティションをext3でフォーマットしてAndroidのルートファイルシステムを置いて、それを使用するようにすればSDカードだけでAndroidを起動することができます。
起動できるSDカードの作成方法はまた改めて紹介します。
ブートの時間計測
ちょっとAndroidのブートの時間をストップウオッチで計ってみました。
まだ高速化の工夫を一切していないし、それぞれが厳密に同じバージョンのカーネルやルートファイルシステムではないので、あくまで参考値です。
電源投入からAndroidのブートアニメーションが終了するまでの時間。
- NORブート 26秒
- (u-bootとkernelはNORフラッシュ。ルートファイルシステムはeMMC)
- eMMCブート 23秒
- (u-boot, kernel, ルートファイルシステム全てeMMC)
- SDブート 24秒
- (u-boot, kernel, ルートファイルシステム全てSDカード)
NORブートは少し時間がかかるようです。SDカードはその種類によって結果は変わりそうですが、たまたま使ったものがこんな結果でした。