とりあえず、zImageの作成までできたのでまとめ。
ポイントとしては、buildrootはなるべく最新版を使うこと。どうも前回環境構築したときのsnapshotと昨日今日あたりのバージョンでは動作が違う。snapshotを新しいのにしたらすんなりと行った。
とりあえず手順をおさらい。
- ubuntuは標準では開発環境がインストールされていないので、sudo aptitude install build-essentialで開発環境をインストール。
- buildrootのsnapshotを本家サイトからダウンロード。もしこの後の手順やビルドでうまくいかないときは、svnからチェックアウトしてくるか次のsnapshotが出るのを待つのが吉かもしれない
- buildrootをコンパイルするために必要な、flex、gettext、bison、texi2html、libncurses-devをインストール
- 作者Wikiサイトには、binutilsなどをあらかじめダウンロードしておくように書いてあるが、実際はこの後のmake中に勝手にダウンロードしてくれる
- buildrootを解凍したディレクトリで make menuconfig
- Linuxカーネルと同じようなコンフィグ画面が出るので、CPUをarm(xscaleサポート)など、作者Wikiサイトに書いてあるように設定
- 設定が済んだら、make。クロスコンパイルに必要なbinutilsやgccは勝手にダウンロードしてくれる
- 途中、binutilsのmake中にmakeinfoが見つからないというエラーで止まる場合は、buildroot/toolchain_build_arm/binutils-2.17/missing を以下のように修正する
--- missing.old 2007-07-08 22:18:09.000000000 +0900
+++ missing 2007-07-08 01:04:28.000000000 +0900
@@ -106,9 +106,9 @@
# Now exit if we have it, but it failed. Also exit now if we
# don't have it and --version was passed (most likely to detect
# the program).
case "$1" in
- lex|yacc)
+ lex|yacc|makeinfo)
# Not GNU programs, they don't have --version.
;;tar)
- buildrootのmakeがエラー無くすべて通ったら、buildroot/build_arm/staging_dir/usr/bin 以下にarm-linux-gcc など、ターゲット環境(ARM用Linux)向けのコマンドがいろいろと作られていることを確認
- buildroot/ 以下にrootfs.arm.cpioファイルが出来ていることを確認。
- buildroot/build_arm/staging_dir/usr/bin を環境変数PATHに追加
buildroot関係の手順はここまで、以下はLinuxカーネルのビルド
- buildroot/build_arm/に、linux-2.6.21あたりのカーネルがあるのでシンボリックリンク"linux"を張る
- cd linux
- 作者Wikiにあるとおりにコマンドを打つ
- make ARCH=arm CROSS_COMPILE=arm-linux- mrproper
- make ARCH=arm CROSS_COMPILE=arm-linux- allnoconfig
- make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
- コンフィグ画面では作者サイトにあるとおりに設定。もしかするとConsole Display Driverの設定で"VGA text console"をはずし、"Frame buffer console support"を入れた方が良いのかも?
- カーネルのビルド。make ARCH=arm CROSS_COMPILE=arm-linux-
- ビルドがエラー無く終わったら arch/arm/boot/ にzImageが生成されていることを確認。
あとは、[es]にコピーしてloaderから起動!
…だけど、作者曰くの"カーネルを一部修正する必要あり"というのと、LCDドライバの調整をしていないのでそのままでは100%?起動しないのでは。私の[es]だと画面が真っ白になってフリーズした。
カーネルデバッガが使えれば、こういう起動時のデバッグもできるんだろうが、kgdbを組み込んでもシリアルポートが使えないからリモートデバッグもできないだろうし…。
コメント