上記の追加コードに1つのジャンプを追加した:bl nand_read_ll 、ジャンプは追加するC 言語ファイル(board/tekkamanninja/mini2440/nand_read.c)中の関数、元はvivi のコードを使用し、openmoko で変更した後、 マルチ Nand Flash チップをサポートできる。従って、幾つのチップ IDを追加、mini2440 の Nand Flashをサポート。コードは下記の通り:
ファイル追加後、Makefile にこのファイルのコンパイルを追加する。
6.2.5 LED の点灯動作
コードのプロセスとDebug段階を表示する。コードは第二段階コード start_armboot 関数にジャンプする前、LEDが点灯。
ここまで、起動の第一段階は変更完了。しかし U-boot-1.3.3 以後で、これら bin ファイル前の 4Kコードは自動的に後ろに変更したため、起動失敗となる。従って、手動でリンクを使用する.lds ファイルへ変更する、ここでのコードはbin ファイルの一番前に置く:
6.3 第二段階:初期化コード変更
第二段階コード lib_arm/board.c 中の start_armboot 関数を実行、システムの初期化を開始する。
6.3.1 lib_arm/board.c ファイル変更
ファイルの変更内容はAT9200 用のコードをクローズ、LED点灯コードを追加、console初期化後、コマンドラインを入る前に、LED(3、4)を点灯する(第二個のLEDの点灯コードはboard_init関数中)、情報プリントアウト(for LCD console)。
lib_arm/board.c 中の start_armboot 関数は複数の初期化関数を呼び出した、これらの関数は各ファイルに存在する、後で変更する。
6.3.2 board/tekkamanninja/mini2440/mini2440.c ファイル変更
本ファイルはボード初期化機能である、変更は: LCD 初期化関数、GPIO 設定変更(開発ボードの外部デバイス接続と関連する、LCDと LEDなど)、LEDの点灯(第二個)、使用済みの Nand コントローラー初期化コードをシールド、NICチップ(DM9000)の初期化関数の追加など。
次は各サブシステムの初期化と機能コードの変更。
6.4 第三段階:ターゲットボード外部デバイスドライバ修正
6.4.1 Nand Flash 関連コードの変更
U-boot 起動の第一段階でNand Flash コントローラーを初期化した。第二段階で start_armboot関数はまたNand Flash コントローラーを初期化した。原因は第二段階と第一段階のコードは基本的に独立して、第一段階のコードはリロケーション機能で、第二段階はU-bootの実行プロセス、従って、以前の初期化も繰り返し実行される。例えば Nand Flash コントローラー、CPU 周波数の初期化など。
S3C2440 と S3C2410の間の最大の違いは:S3C2410 の Nand Flash コントローラーは 512B+16B の Nand Flashしかサポート出来ない; S3C2440はまた2KB+64B の大容量 Nand Flashをサポート出来る。従って、Nand Flash コントローラーのレジスタと制御プロセス、ドライバコードも変更する必要がある。
詳細はチップデータマニュアルに参照、Nand Flash ドライバコードの変更は下記の通り:
6.4.2 Yaffs(2)イメージプログラミング機能追加
Nand Flash ドライバ変更後、次は関連の Yaffs(2)イメージプログラミングコードを変更する。Linux では Yaffs(2)をデータ保存のファイルシステム、或いはルートファイルシステムとして使用する。 BootLoader 下でYaffs(2) イメージファイルをプログラミングするのは必要とする。
Yaffs(2)イメージプログラミングのサポートはプログラミング段階で、データを書き込むと同時に、イメージファイル中の oobデータをNand Flash の Spareエリアに書き込む。これはYaffs ファイルシステム原理とNand Flash の構造と関連する、詳細は関連资料に参照。
変更する 4 つのファイルのパッチ:
6.4.3 Nor Flash 書き込む機能のコード変更
S3C2440 と S3C2410 はNor Flash との接続は同じであるが、S3C2410がAMD のNor Flash チップ、 mini2440 は SST の Nor Flashを使用する。この2つのチップは書き込み時に使用するブロックのサイズ、タイミングとコマンドコードの差異で、チップのデータマニュアルに基づき変更する必要がある。詳細はデータマニュアルに参照する:
SST39VF1601:
Am29LV160:
上記の部分以外、SST39VF1601 のSECTOR毎 のサイズは同じ、Am29LV160 では開始のブロックは小さい。変更する部分は board/tekkamanninja/mini2440/flash.c
変更例:
----------続く