メッセージ。 - ARM用クロスコンパイル環境の構築

# ARM用クロスコンパイル環境の構築

いやー。クロスコンパイル環境の構築、けっこう大変だった。
ネットとかに情報が少なくて、ちょっとした間違いで進まないところがたくさんあったので、試行錯誤してうまくいったパスをメモしてみる。

  • 基本的に、http://www.mit.msn.to/zaurus/gcc3.html を参考に作業を進める。ドキュメンテーションがしっかりしていて分かりやすいから。
  • linux-headers-arm-sa1100-2.4.6-3.i386.rpmとglibc-arm-2.2.2-0.i386.rpmをインストールするところは同じ。上記のファイルをダウンロードした後、debianの場合はalien *.rpmとしてrpmをdebに変換し、dpkg -i *.debとする。
  • 次に、インストール先を/usr/local以下に変更する。sudo mv /opt/Embedix/tools/arm-linux /usr/local/arm/実行。
  • binutilsのコンパイルは書いてあるとおりでオーケー。ただし、rootユーザーになってコマンドを実行する必要があるっぽい。make installだけsudoで実行しようとすると失敗したような気がする。これはgccのコンパイル工程だっけか。
  • 上記ドキュメントとは違って今回はTitchy用なので、Linux 2.6.20をコンパイルする。
  • GCCのコンパイル工程もほとんど同じだけど、注意点が4つ。
  • 注意点1:コンパイル時の追加パスについて。上記ドキュメントでは「export PATH=/usr/local/arm:$PATH」と書かれているけど、ここは「export PATH=/usr/local/arm/bin:$PATH」が正しいはず。あとbinutilsと同じようにroot権限でコマンドを実行する必要がある。
  • 注意点2:環境変数を2つ設定する。「export ARCH=arm; export CROSS_COMPILE=arm-linux-」
  • 注意点3:Linux 2.6.20をARM用にコンパイルするには、GCC 4系統を使用する必要がある。というか、正確にいうとARMはABI(Application Binary Interface)を切り替えられるようになっていて、EABIを使うかLegacy ABIを使うかでGCC 4必須かどうかが変わってくる。Titchyの場合はEABIを使っているようだったので、今回はGCC 4をインストールした。
  • 注意点4:手元の環境では、実際にgcc 4をmakeしようとすると、「sigthread.h:36: error: storage class specified for parameter `type name'」などといったエラーメッセージが出た。pthreads関連のヘッダファイルの内容に不整合があるっぽい。ということで、ヘッダファイル2個所を変更した。/usr/local/arm/arm-linux/include/bits/sigthread.hと/usr/local/arm/arm-linux/include/pthread.h。変更内容は下記参考になったリンクの「クロスコンパイル/kuro-box」を参照。

参考になったリンク
クロスコンパイル/kuro-box
  http://www.ki.nu/software/cross-compile/kuro-box.html
ARM gcc バッドノウハウ集: EABI と legacy ABI
  http://jr0bak.homelinux.net/~imai/linux/arm_gcc_badknowhow/arm_gcc_badknowhow-8.html
2009-09-26 11:17:47 / ふじさわ / Comment: 0 / Trackback: 0

Comment

コメント投稿機能は無効化されています。

Trackback

TrackBack投稿機能は無効化されています。