wiki:EmbeddedGentoo

組み込みならGentooが素敵

Gentoo素敵です。こんなに楽していいんでしょうか?

リンク

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