Chumbyのブートメカニズム

ChumbyにてTOPPERSを動作させるために、Chumby
ブートについて調査

分かったこと
 TOPPERSをNandFlash上に書き込み、
 RAMへコピーして実行するのが基本

素材
 -Chumbyのホームページ内のソースコード
  (BootLoader)
 -FreeScale社のi.MX21資料
 -Chumbyの解説(Hackingと書いてあるが・・)
 (http://files.chumby.com/toorcon_2006_firstpart.swf

リセット
1.BROMの0x0000_0000から実行

  • 以下、BROM実行-

1−1.
 BOOT[0:3]をチェックし、0111であることから、
 NandFlashブートであることを確認
1−2.
 BROMのコードによって、NandFlashのデータを
 2KB分、NandFlash用RAMに格納
 ※格納先RAMは0xDF00_3000
1−3.
 0xDF00_3000へジャンプ

2.NandFlashから格納されたプログラムを
  0xDF00_3000から実行(boot.s)

  • 以下、boot.s-

2−1.
  周波数、SDRAMの設定を実施
2−2.
  次からのプログラムをSDRAM上で実施するために、
  NandFlash向けRAMの0xDF003200から、
  SDRAMの先頭番地0xC000_0000にプログラムを
  コピーする
2−3.
  コピー後、SDRAMコピーの先頭番地である
  0xC000_0000へジャンプ

3.SDRAM先頭からのプログラムを実行
  0xC000_0000から(bl.c)

  • 以下、bl.c-

3−1.
  NandFlash上からブロック毎にプログラムを
  SDRAMへコピーする。
  SDRAMのコピー先は0x0000_1000
  NandFlashの
   読み出しスタートは0x0000_0800、
   読み出しエンドは0x0004_0000
3−2.
  SDRAMコピー先の先頭アドレスである
  0x0000_1000へジャンプ


4.SDRAMの0x0000_1000から実行(2bl.c)

  • 以下、2bl.c-

4−1.
  デバッグ向けUARTの初期化
4−2.
  NandFlashデータのチェック
4−3.
  Linuxカーネルのコピー
  SDRAMコピー先は0xc050_0000
  NandFlashのコピー元は0xd80000
  カーネルサイズは0x400000
4−4.
  0xc050_0000へジャンプ(Linuxのスタート)

今後
 ・NandFlashの書き換えと、書き換えた後の復旧
 ・TOPPERSの配置
 ・デバッグ方法