メッセージ。 - ARM用クロスコンパイル環境の構築
# ARM用クロスコンパイル環境の構築
いやー。クロスコンパイル環境の構築、けっこう大変だった。
ネットとかに情報が少なくて、ちょっとした間違いで進まないところがたくさんあったので、試行錯誤してうまくいったパスをメモしてみる。
参考になったリンク
クロスコンパイル/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
ネットとかに情報が少なくて、ちょっとした間違いで進まないところがたくさんあったので、試行錯誤してうまくいったパスをメモしてみる。
- 基本的に、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
Comment
Trackback