狐の王国


2008年04月23日(水) [過去の今日]

#1 Debianのapt-crossでクロスコンパイル環境を作り、玄箱カーネルをビルドしてみる

おかしいなあ。sambaでいいからNASが欲しいと思ってただけなのに、なぜ手元に KURO-BOX/PRO があるのだろう……。

というわけでとりあえずDebian化は キットを配布してくれてる人がいる のでそちらへどうぞ、という感じで終了(何度かやりなおしてやっとできた)。

んでふとこないだ出たばかりのLinux 2.6.25を見てみると、Orion ImplementionsにCONFIG_MACH_KUROBOX_PROなんて設定項目が。ありまー。正式サポート入ったですか。ちょうどNFSも使いたかったし、いっちょコンパイルしてみることに。

ただ玄箱PROのCPUはとてつもなく遅いので、セルフコンパイルとかやってられません。あとせっかくDebianなんだから、make-kpkgしたいところ。

というわけでmake-kpkgでたしかクロスコンパイルできたよなーとぐぐってみると、apt-crossというパッケージがあることに気付いた。要するに別アーキテクチャのバイナリを作るためのヘッダやライブラリをaptで入れてしまおうという代物らしい。マニュアル見たりしてARMのクロスコンパイル環境をインストールしたのだが、記憶が薄らぎはじめている。いまのうちに書き留めておこう。

あ、sid環境前提ね。

 # apt-cross -a arm -S unstable -m http://cdn.debian.or.jp/debian --install gcc-4.1-base cpp-4.1 libgcc1 gcc-4.1 libc6 gcc gcc-4.3 cpp cpp-4.3 gcc-4.3-base libgomp1 libc6-dev

gcc-4.1だけ欲しかったのだけど、なぜか4.3も入れないとうまく依存関係が解決しなかった。これでパッケージ名の後ろに-arm-corssと付いたクロス環境用パッケージが生成・インストールされ、/usr/arm-linux-gnuなどにライブラリ・ヘッダが展開される。

足りない依存関係はaptitude upgradeすると一覧できて見やすかった。

ただホントにヘッダとライブラリだけなので、gcc本体とbinutilsは別にコンパイルしないといけないみたい。

ringサーバからbinutils-2.18とgcc-core-4.1を拾って来て、

$ tar xjfv binutils-2.18.tar.bz2
$ cd binutils-2.18
$ ./configure --prefix=/usr/local --target=arm-linux-gnu 
$ make 
# make install

という感じにbinutilsインストール完了。

そしてgccへ。

$ tar xjfv gcc-core-4.1.1.tar.gz
$ mkdir gcc_build
$ cd gcc_build
# ../gcc-4.1.1/configure --target=arm-linux-gnu \
                         --prefix=/usr/local \
                         --with-as=/usr/local/bin/arm-linux-gnu-as \
                         --with-ld=/usr/local/bin/arm-linux-gnu-ld \
                         --with-headers=/usr/arm-linux-gnu/include \
                         --with-libs=/usr/arm-linux-gnu/lib \
                         --enable-shared --disable-nls
$ make
# make install

これで準備完了。あとは普通にカーネル作る。

$ make ARCH=arm menuconfig
.........
$ fakeroot make-kpkg --arch arm --cross_compile arm-linux-gnu --revision=kurobox.1.0 binary-arch

これでlinux-image-2.6.25_kurobox.1.0_arm.debとlinux-headers-2.6.25_kurobox.1.0_arm.debができあがる。あとは玄箱にscpしてdpkg -iするだけ……

とはいかないんだな。

どうやらKURO-BOX/PROで採用してるu-bootというブートローダは、普通のzImageなんかを読みこめないらしい。u-boot用の形式にしておかなければならないようだ。

幸いsid環境にはuboot-mkimageというパッケージがあるのでそれをインストールしておけばよい。あとは以下のようにしてubootイメージを作る。

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnu- uImage

これを玄箱の/bootにコピーして、u-boot環境変数kernelをuImage.buffaloからuImageに変えておく。

以上で2.6.25カーネル動作完了だ。

あ、あと2.6.25にサポートが入ったとはいえ、パッチが必要なくなったわけでもない。一部まだパッチが必要なようだ。 Linux カーネル 2.6.25-rc1-git4を試す という記事にある4つのパッチセットのうち、うちでは以下の3つをあててビルドした。

ただしsata_mv.c.diffはそのまま当たらなかったので、1行パッチだったし手であてた。

.configも当該サイトからひろってきたものをベースにいじった。存外素直に動くもんだ。

apt-crossはまだ依存関係を解決してくれないようだけども、それは鋭意開発中らしい。ということで今後はもっと簡単になりそうだ。クロスコンパイルどんとこいだな。

(@649)

1日1チベットリンク:

この記事のURI

最近の記事

以上、1 日分

タイトル一覧


カテゴリ分類
Powered by hns-2.19.8, HyperNikkiSystem Project

過去にこの日記が置いてあったcgi.misao.gr.jpは廃止されました。それによって記事へのURIが変わってしまっています。cgi.misao.gr.jpをwww.misao.gr.jpと置き換えるだけで同じ記事にアクセスできるはずです。

Sugano "狐志庵" Yoshihisa(E) @ 美紗緒ネットワーク <koshian@misao.gr.jp>
日記管理ページ