2012年11月11日日曜日

arm cross and native compile environment

概要

  • VMware PlayerにDebianをインストールし、armのクロスコンパイル環境を作成。
  • 作成したクロスコンパイル環境で、armのネイティブコンパイル環境を作成。

VMware PlayerへのDebianのインストール

business cardインストーラ(debian-6.0.6-i386-businesscard.iso、47MB)を使ってインストールを開始。しかし、VMware Playerが、該インストーラを認識しない。VMware Playerをバージョンアップ(4→5)したところ、Debian6として認識した。インストール問題なく完了。Debian6にログイン後、VMware Toolsをインストール。CDROMがマウントされるので、tarを展開して、sudoでインストーラを実行。sudoの設定をしていなかった。。。
sudoを設定(/etc/sudoersに、user ALL=(ALL) ALLを追加)して、VMware Toolsのインストーラを実行。
インストーラが、vmware-config-tools.plを続けて実行するか聞いてきたので、実行。
gcc, kernel headersが見つからない、パスを入力せよとのことだが、business cardで最小インストールしてるので、入ってません。空白を入力して続行した。強行すぎるかと思ったが、ウィンドウサイズの変更に対応してXの解像度が変更されるようになったのでよしとする。ユニティも使えるようになった。(ユニティを使っていたら、マウスのクリックが押されっぱなしの状態になる不具合発生。強行したせいかと、コンパイル環境、カーネルヘッダを入れて再インストールしたが、状況は変わらなかった)

gccとカーネルヘッダのインストール

gccを、(心配なので、apt-get -sで確認後、)apt-getでインストール。
$apt-get install gcc-4.4
カーネルヘッダは、インストールされているkernelと同じバージョンでないとvmware-config-tools.plが受け付けない模様。unameでバージョン確認し、apt-getでインストール。
$uname -a
Linux debian 2.6.32-5-686 ...
$sudo apt-get install linux-headers-2.6.32-5-686

はじめから、インストールしてあれば、検出してくれるかもしれないが、vmware-config-tools.plで聞かれるので、メモしておく:
gccへのパスは、/usr/bin/gcc
カーネルヘッダへのパスは、/usr/src/linux-headers-2.6.32-5-686/include

armのクロスコンパイル環境の構築

emdebianを使う。インストールしたdebian6は、squeeze。emdebian-archive-keyringをインストール、aptリポジトリにemdebianを追加、triplet nameのクロスコンパイラをインストールする、下記の通りでOK:
http://wiki.debian.org/EmdebianToolchain

クロスコンパイラ用のライブラリを用意するには、xaptが便利。これもインストールするが、squeezeでは、backportsのため、これもリポジトリに追加(http://backports-master.debian.org/Instructions/)。これも、上記のURLに書いてある通り。

armのネイティブコンパイル環境の構築

http://home1.catvmics.ne.jp/~kanemoto/linux/ls-gl-n.html
を参考にして構築。
binutilsは、書いてある通りでOKとおもわれるが、configureの--buildは指定せず。
gccは、書いてある通りにならず、下記の隘路あり:
  • コンパイルでexceptionを検出できずエラー終了。→gccのconfigureにて、--disable-sjlj-exceptions を追加して解決。
  • コンパイルでgthr-.hのターゲットルールがなくエラー終了。ファイル名がgthr-.hとなっているのがおかしい。gthreadの検出のところで、c++が見つからなくて失敗している様子。g++はインストールされているはずだったが、/usr/binに、c++filtはあるが、c++がない。→g++-4.4をインストールしたところ解決。(configureからやり直し)
gccのconfigureでも、--buildは指定せず。また、--with-cpu=arm9 と指定。

以上