まず、いくつかの背景: Beagleboard-xM で Android 用のドライバーとアプリケーションを作成しようとしています。
私は彼らの Android 開発キットをダウンロードしてインストールし、http://processors.wiki.ti.com/index.php/TI-Android-ICS-4.0.3-DevKitの指示に従ってすべてを正常にビルドできました。 -3.0.0_DevelopersGuide
http://tldp.org/LDP/lkmpg/2.6/lkmpg.pdfの手順に従って、問題なく独自のスケルトン カーネル モジュールを作成できました。.ko ファイルを Android デバイス、insmod、rmmod などにコピーできます。
デフォルトのビルドで提供される基本的なシェルに飽きたので、busybox を追加しようと考えました。http://omappedia.org/wiki/Android_Installing_Busybox_Command_Line_Toolsの指示に従ってみましたが、標準の libc ヘッダー ファイルでコンパイル エラーが発生します。
かなり調べた結果、TI の Android 開発キットで提供されているビルド済みのクロス コンパイラが正しいパスを検索していないことがわかりました。
arm-eabi-gcc blah.c -o blahを含めてコンパイルしようとした独自の .c ファイルを作成することでこれを確認しました が、同じ結果が得られました (問題のヘッダー ファイルが見つかりません)。
'arm-eabi-gcc -print-prog-name=cc1' -vを実行すると、次のようになります。
- 存在しないディレクトリ「/usr/local/google/home/android/cupcake_rel_root/usr/local/include」を無視します
- 存在しないディレクトリ「/usr/local/lib/gcc/arm-eabi/4.4.3/include」を無視します
- 存在しないディレクトリ「/usr/local/lib/gcc/arm-eabi/4.4.3/include-fixed」を無視します
- 存在しないディレクトリ「/usr/local/lib/../arm-eabi/include」を無視します
- 存在しないディレクトリ「/usr/local/google/home/android/cupcake_rel_root/usr/include」を無視します
これらのパスは、ubuntu 10.04 の新規インストールには存在しませんでした。私が使用したクロス コンパイラは/usr/TI-Android/prebuilt/linux-86/toolchain/arm-eabi-4.4.3/にあります。Android開発キットであるビット.binファイルを実行する以外は何もしませんでした(.binファイルから単に自分自身を抽出するように見えました;他のことをしたことを覚えていません)
それで、いくつか質問があります:
- クロスコンパイルツールのビンを$ PATHに入れるだけで、他のすべて(つまり、Android、x-loader、u-boot、カーネル)をビルドする方法(ハウツードキュメントのように)。私はそれ(make menuconfig?)が実行可能ファイルの場所に基づいてインクルードパスを修正する際にいくつかの魔法を行うと思いますが...
- 似たようなインフラストラクチャで構築されているように見えるのに、busybox が同じように動作しないのはなぜですか?
- 自分のアプリケーションをクロスコンパイルできるようにするにはどうすればよいですか?
私はステップを見逃しており、事前に構築されたクロスコンパイラで何らかのインストール/構成を行うべきだったと思いますが、情報は恐ろしく不足しています. オープンソースの神々よ、この暗く嵐の海を渡って私の道を示してくれるようお願いします。