ちょっと、仕事の関係でArmadilloを触る機会が出来そうなので、ubuntu上に開発環境を構築してみることにした。Armadilloとは、AtmarkTechnoから販売されている組み込みのlinux基盤である。これはこれでかなり面白い!
ARMのクロスコンパイル環境の構築
ArmadilloはARMプロセッサーなので、それの開発環境をまずは構築する必要がある。AtmarkTechnoさんはかなり親切でこれらの環境を全て構築済みのATDEという開発環境を提供されている。これは、VMWAREのイメージになっている。windowsの場合には、これが最善だと思われるが、筆者はlinux上で開発を行うため、折角なので個別にインストールしてみることにした。ちなみにATDEはもちろんlinuxでも動作する。
開発環境のdebイメージはAtmarkTechnoさんがこれまた親切にdebパッケージで提供されている。順にインストールを進めていくが、libssp0-arm-crossの段階で依存関係に引っかかってしまった。gcc-4.1-baseが存在しないらしい。どうやらこのlibssp0のパッケージはGCC-4.1-baseのバージョン(4.1.1-21)固定のため、ubuntuのバージョンと相違してしまいインストールできない様子。もちろん、4.1.1-21のパッケージはubuntuで提供されていないため、libssp0のcontrolファイルを直接変更して依存関係に対応させた。
dpkg-deb --extract libssp0-arm-cross_4.1.1-21_all.deb
libssp0-arm-cross_4.1.1-21_all(実際は1行)
dpkg-deb --control libssp0-arm-cross_4.1.1-21_all.deb
libssp0-arm-cross_4.1.1-21_all/DEBIAN(実際は1行)
Depends: gcc-4.1-base (= 4.1.1-21), libc6-arm-cross (>= 2.3.5-1),
libc6-arm-dcv1(実際は1行)
を
Depends: gcc-4.1-base (>= 4.1.1-21), libc6-arm-cross (>= 2.3.5-1),
libc6-arm-dcv1(実際は1行)
に修正
dpkg-dev --build libssp0-arm-cross_4.1.1-21_all
同様にatde-essential-armでもgenext2fsで依存関係が問題になったので修正。
それと、g++とlibstdc++のインストールで双方に競合問題が発生した。これは、この二つをdpkg一緒にインストールすることで解決した。
後は、通常通りdpkgコマンドでインストールができた。以外と簡単に開発環境のセットアップは終了する。
kernelのコンパイルでいきなりエラー
開発環境のセットアップが完了し、カーネルのコンパイルを行うもいきなりエラーでストップ。
arm-linux-gcc not found
と表示される。調べて見ると、先ほどのパッケージインストールではarm-linux-gnu-gccとなっている。カーネルのコンパイルオプションでCCやLD等を変更してコンパイルしようも最終的にライブラリーが見つからずやはりエラーになる。
ネットで調べてみると、既出の問題ですぐに解決策が発見できた。atmark-dist-xxxx/vendors/config/arm/config.arch内でコンパイラーが定義されているので、
CROSS_COMPILE = arm-linux-
を
CROSS_COMPILE=arm-linux-gcc-
に変更すればコンパイルが通るようになった。
さらにエラーはつづく・・・
さらに、avahiデーモンの所でlibdaemonが見つからないとエラーが発生した。単純にlibdaemonのarm版がないことに気づき追加でインストールした。このファイルはここから調達した。さらにlibnet関連のライブラリーでエラーが勃発する。これもここを参考にlibnetとlibpcapをインストールすることで対応した。
これで、カーネルのコンパイルにようやくエラーがなくなった。