distcc による分散クロスコンパイル

Bishop の U-Boot や Linuxカーネルを distcc でビルドする手順です。

1. distcc 環境の構築

例として以下の環境を想定しています。

  • host-a, host-b, host-c の3台で環境を構築するとします。
  • 各ホストのプロセッサ・コアの数はそれぞれひとつだけとします。
  • 各ホストのアーキテクチャは x86 (IA-32) とします。
  • あらかじめ各ホストに同じバージョンのクロス開発環境が用意されているものとします。

1.1. Debian

# aptitude install distcc

/etc/default/distcc の設定例:

# デーモンとして起動
STARTDISTCC="true"
# local と 192.168.0.0/24 からの要求を許可する
ALLOWEDNETS="127.0.0.1 192.168.0.0/24"
# listner は限定しない
LISTENER=""
# NICE 値はデフォルト
NICE="10"
# zeroconfサポートを有効 (etch の distcc では zeroconf はサポートされていません)
ZEROCONF="true"

1.2. Fedora

...

2. distcc によるクロスコンパイル

2.1. Linux カーネル

host-a が localhost とすると以下のようになります。

$ export DISTCC_HOSTS="localhost host-b host-c"
$ make -j6 ARCH=arm CROSS_COMPILE=arm-linux-gnu- CC="distcc arm-linux-gnu-gcc-4.1" uImage
  • 環境変数 DISTCC_HOSTS でホストを指定します。
  • -j オプションでジョブの数を指定します。FAQ によるとCPU数の2倍程度が目安のようです。

2.2. U-Boot

...

3. リンク

cc