組み込みならGentooが素敵
Gentoo素敵です。こんなに楽していいんでしょうか?
リンク
- http://www.gentoo.org/proj/ja/base/embedded/gnap-userguide.xml
- http://gentoo-wiki.com/Embedded_Gentoo
- http://gentoo-wiki.com/TinyGentoo
CFブート
手始めにCFブートのイメージを作ってみる。 まずは「GNAP」をインストール。
# ACCEPT_KEYWORDS='~x86' emerge gnap
/usr/lib/gnap/examples以下のディレクトリをまねして「オーバーレイ」ディレクトリを作る。mylinuxというディレクトリを作ったものとする。
# gnap_overlay -o mylinux -L mylinux.img -n -r hdc1 -m -S 128
-oはオーバーレイディレクトリの名前。-Lは出力するファイル名。-nは「ブート時にGNAPのロゴ画面を出さないで」。 -r hdc1は、ターゲットでのルートデバイスのデバイス名(CFカード自体がターゲットでどう認識されるか)。 -mは、オンメモリにキャッシュして動作しろという指示。特にCFは書き込み回数の寿命があるので重要。 -S 128は、メガバイト単位で出力イメージの大きさを指示する。「128M CF」と言って売られていても128Mより小さい場合があるので注意。 マニュアルにはスーパーユーザである必要は無いと書いてありますが、スーパーユーザじゃないとエラーになるようです。
最低で16Mくらいになるようです。これでは大きい!という場合には、「GNAPコア」を再構築すればいいらしい。
CDブート
CDブートも同様。
# gnap_overlay -o mylinux -i mylinux.iso -n
クロス環境の構築
# emerge crossdev # PORTDIR_OVERLAY="/usr/local/portage" crossdev --target armv5te
以上でできるはず。これでクロス環境ができちゃうなんて、Gentooすばらしいです。 カーネルヘッダ、binutils、GCC、glibcのバージョンを指定することもできる。 PORTDIR_OVERLAY="/usr/local/portage"は、/etc/make.confに入れてしまってもいい。
ただ、本日(2006/5/29)現在、ちょっとバグがあるようでglibcだけうまくビルドできない。configureが失敗する。エラーで止まったら、以下のようにやれば継続できる。これはARMv5TEの場合に限定なのかどうかは、めんどくさいので試していない。
# cd /usr/armv5te-unknown-linux-gnu # ln -s usr/include include # PORTDIR_OVERLAY="/usr/local/portage" crossdev --target armv5te
…が、今のところinternal compiler errorになってしまってビルドできてない。 めんどくさいのでglibcを飛ばす。無くてもいいだろう。
カーネルを作ってみる
# cd /usr/src/linux # make mrproper # ARCH=arm make menuconfig # ARCH=arm CROSS_COMPILE=armv5te-unknown-linux-uclibc- make
ユーザランドを作ってみる
# mkdir armv5te # cd armv5te # UCLIBC_CPU=ARM920T ROOT="`pwd`" CTARGET=armv5te-unknown-linux-gnu emerge uclibc
以下はウソ。まだうまくいってないけど、メモ。
# ROOT="`pwd`" CTARGET=armv5te-unknown-linux-gnu emerge busybox dropbear # echo 'sys-apps/baselayout-lite -*' >> /etc/portage/package.keywords # ROOT="`pwd`" CTARGET=armv5te-unknown-linux-gnu emerge baselayout-lite
