BAKの日記: クロスコンパイラ
なんか「おともだち」が一気に2人も増えたようである. クロス開発の話が好評なのかな. というわけで,も少し書いてみよう.
が,それほど持ちネタはないので,すぐにネタ切れ起こすかもしれんが.
ARM や MIPS の楽しそうなマシン・ボードがあって,まだ誰もそのマシンに Linux を載せていない場合,クロス開発環境が必要となる. というわけで,まずはクロスコンパイラについて.
必要となるのは,最低限,
- gcc
いわずと知れた GNU Compiler Collection である - binutils
アセンブラ・リンカ・オブジェクト変換ツールなど - glibc
libc ライブラリ. 標準的なライブラリ関数・システムコールへのラッパなど.
の 3 つである. これらはまとめて toolchain と呼ばれることもあるようだ. ちなみに,linux カーネルのコンパイルだけならば,glibc は不要.
一番簡単なのは,既にコンパイル済みの toolchain を get すること. ARM と MIPS については,x86 母艦用のパッケージが準備されているので,これらを使うのが手っ取り早いだろう.
が,何かの都合で自分で toolchain を build したい場合,gcc と glibc が鶏と卵の関係にあるので,困ったことになる. が,それを何とか誤魔化して突破する方法は確立されている. 少なくともARM の場合とMIPS の場合は,ドキュメントにまとまっている.
具体的な手順はこれらのドキュメントを参照してもらうこととして,大雑把な手順を以下にまとめてみる.
binutils のコンパイル・インストール
binutils の場合は,confiugure で target に arm とか mips とか指定するだけで make することができる.
gcc の中途半端版を作成
C コンパイラだけの中途半端な gcc を build する.
linux カーネル include ヘッダファイル
linux カーネルを get し,linux/Makefile の ARCH := の部分を target のアーキテクチャ名に書き換えて,make (menu)config と make dep を実行する.
glibc のコンパイル・インストール
この段階でやっと glibc を構築することができる.
gcc の本格的なコンパイル・インストール
glibc があるので,ここで本格的な gcc をコンパイルし,インストールする.