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のスタート)