1

私の一般的な質問をより明確にするために:

Google のドキュメントに従って、完全な「make full-eng」ビルドを実行することで、Android エミュレーターが動作するようになりました。ただし、デバッグしたかったので、エミュレーターを実行して「$ adb shell dmesg」を呼び出し、それを出力テキスト ファイルにルーティングすると、いくつかの奇妙な行が見つかりました。

...
<4>goldfish_new_pdev goldfish_interrupt_controller at ff000000 irq -1
<4>goldfish_new_pdev goldfish_device_bus at ff001000 irq 1
<4>goldfish_new_pdev goldfish_timer at ff003000 irq 3
<4>goldfish_new_pdev goldfish_rtc at ff01000

Android のフル ビルドを実行すると、Goldfish がシステム イメージとして提供されますか? Galaxy Nexus に必要なものをテストしているかどうかを知りたいです。カーネルは、Galaxy Nexus 用に修正した maguro カーネル (omap プロジェクト) で、ビルド ツリーに入れました。しかし、テストしたいプラットフォームは IceCreamSandwich です。エミュレータはこのプラットフォームをテストしていますか? (b/c このログの出力は、そうではないと私に信じさせています) それとも、エミュレーターは「一般的な」イメージをテストしていますか?

また、さらに重要な質問があります。カーネルの「socket.h」ファイルを変更して、未定義のプロトコル (FINS) で INET プロトコルをオーバーライドしました。理論的には、電話機は起動するはずですが、インターネット アクセスはありません。電話エミュレーターは、インターネット プロトコルに対するユーザーの操作を気にしますか? ホスト コンピューターのネットワーク機能を使用しますか?

もう 1 つのフォローアップ: 従来の基盤となるネットワーク スタックのインターネット プロトコルに依存する電話のプロセス/システム サービス/イベント (安定した状態への起動に関与するもの) はどれですか? (ネットワークソケットをセットアップするために定義されているプロトコル)

4

1 に答える 1

1

質問を書いた時点では、いくつかのことを理解していませんでしたが、「カーネルレベル」でエミュレーターをいじりながら少し学んだように思います。まず第一に、エミュレーターは「一般的な」電話ブランドの「goldfish カーネル」 (Linux バージョン 2.6.29、ARM アーキテクチャー) をテストします。まるでエミュレーター自体が一種の電話であるかのようであり、これらのイメージ カーネルを混在させることはできません。たとえば、金魚カーネルを使用して Nexus S の crespo 電話イメージを構築しようとしました (つまり、crespo カーネルはありません)。電話は Google のスプラッシュ画面で「ハング」します (少なくともブートループではありません)。

私の調査 (FINS) はこのエミュレーターで動作しましたが、実際のハードウェアでサポートされている 3 つのプラットフォーム (Nexus S、Galaxy Nexus、Motorola Xoom) では動作しませんでした。Google が携帯電話の最下位レベルでデバッグする機能をユーザーに提供していないように見えることを考えると、その理由はわかりません (実際の開発者は、これらの携帯電話を構築/テストする際にそのような種類のツールを使用していると確信しています)。これは、私の最後のフォローアップに答える 1 つの大きな問題につながります: Android Debug Bridge は INET プロトコルに依存しています。私のエミュレーターは正常に起動し、必要に応じて実行されます (インターネットがない、b/c INET がない) が、これらの実際の電話はそうではありません。私の仮説は次のとおりです: INET が空のプロトコルでオーバーライドされた場合 (この場合、ユーザー空間レベルで INET を処理することを意図した FINS になりますが、電話システムが満足するには遅すぎるようです) )、ADB デーモン (おそらくシステム サービスの一種として分類されます) が動作/接続できず、これが原因で Android ハードウェアがクラッシュします。ハードウェアはおそらく仮想的に表現されており、物理ハードウェアと同じ制限がないため、エミュレーターは実際の電話よりも柔軟であると私は信じています.

詳細と私のさまざまな試みについては、私の wiki/ドキュメント (私の研究チームのより大きなサイトの一部) を参照して ください。

Nexus S、Galaxy Nexus、または Motorola Xoom から「ブートループ」 (ADB なし) に陥った動作中のブート ログを取得する方法を誰かが見つけた場合は、私に知らせてください。この問題はしばらく続きます (この修正を反映するために、他の Stack Overflow-Android に関する質問を更新します)。私の理解に対する修正もいただければ幸いです。

注: この回答は編集可能です。ADB デーモンを使用せずに、ホスト マシンで電話にブート ログを生成させる方法がまだあると思います。

于 2012-07-31T17:26:15.790 に答える