目次
MTK6737 プラットフォーム/QC8953 プラットフォームに基づく
2.1. Google のネイティブ RILD プロセスのロードと開始
2.2. MTK プラットフォームでの RILD プロセスのロードと開始
2.3. QC プラットフォームでの RILD プロセスのロードと開始
MTK6737 プラットフォーム/QC8953 プラットフォームに基づく
1. RILの基本アーキテクチャ
1.1、RILの概念
Android RIL (Radio Interface Layer) は、テレフォニー サービスと無線ハードウェアの間に抽象化レイヤーを提供します。RIL は、データの信頼性の高い送信、AT コマンドの送信、および応答の解析を担当します。Android システムでは、rild は AP 上で実行されます。
一般に、RIL はアプリケーション プロセッサ (AP) と無線通信モジュール (ベースバンド/BP) 間の通信を処理します。通信方法はさらに、アクティブな要求リクエスト (ダイヤル、テキスト メッセージの送信など) と、モデムによる信号強度、基地局情報、着信通話、着信テキスト メッセージなどのアクティブなレポート (迷惑応答と呼ばれます) に分類されます。 。
したがって、RIL は上位層 AP と下位層モデムの間の中間層とみなすことができ、両者の間で対話型メッセージを送信するために使用されます。
1.2. Android システムアーキテクチャ
RIL の基本アーキテクチャを紹介する前に、Android 全体の構造階層を紹介しましょう。図 1-1 に示すように:
図 1-1 Android の構造
図 1-1 からわかるように、Android システムの構造は、アプリケーション (アプリケーション層)、アプリケーション フレームワーク (フレームワーク層)、ライブラリ (システム ランタイム層)、Linux カーネル (カーネル層) の 4 つの層に大別できます。 )。
- アプリケーション層
このレイヤーには、連絡先、通話、ブラウザなどのすべてのアプリケーション APK が含まれています。アプリケーションはすべて Java 言語で記述され、アプリケーション フレームワーク層 (Application Framework) が提供する API を呼び出すことで完成します。
- フレームレイヤー
コア アプリケーションで使用される API フレームワークへの完全なアクセスを開発者に提供します。
- システムランタイム層
Android には、Android システムのさまざまなコンポーネントで使用できる C/C++ ライブラリがいくつか含まれており、アプリケーション フレームワークを通じて開発者にサービスを提供します。
- カーネル層
Linux カーネルは、セキュリティ、メモリ管理、プロセス管理、ネットワーク スタック、ドライバーなどのモジュールを提供します。
1.3、RIL アーキテクチャ
Android システムの大まかな階層構造を理解した後、図 1-2 に示すように、RIL の基本アーキテクチャを見てみましょう。
図 1-2 RIL アーキテクチャ
上の図からわかるように、RIL は C 空間、つまり Android システム空間のシステム ランタイム ライブラリ層に配置されています。RIL は、システムの開始時からシステム内に存在する RILD のデーモン プロセスによって表されます。主に以下の 3 つの部分で構成されます。
- リルド
rild モジュールは実行可能ファイルにコンパイルされ、ril モジュール全体のエントリ ポイントとして main 関数が実装されます。libril および QcRil/MtkRil のロードを担当し、libril および QcRil/MtkRil によって提供される関数を使用します。
- リリル
Googleが提供する公開処理ライブラリはソケット監視やイベント処理などを担当します。次に、次の処理ステップのためにイベント処理リクエストを QcRil/MtkRil に送信します。または、基礎となるモデムの要求応答またはアクティブ レポートを、処理のために上位フレームワーク層に渡します。したがって、このモジュールはフレームワーク層と QcRil/MtkRil の間でメッセージを送信することがわかります。
- Qcril/Mtkril
このモジュールは各チップメーカーが開発した部分に属し、例えばMTK社が開発したものはMTK RIL、Qualcomm社が開発したものはQC RILと呼ばれます。内部には、各チップメーカーが上位層に要求する特定の処理ロジックがあります。たとえば、MTK は上位層のリクエストを AT コマンドに変換し、AT チャネル経由で処理するためにモデムに送信します。QC RIL は、上位層から渡された要求を qmi メッセージにカプセル化し、その QMI メッセージを処理のためにモデムに送信します。
データは共有メモリを介してカーネルとモデムの間で転送されます。
次の図 1-3 を使用すると、上記 3 つの関係を簡単に理解できます。
図 1-3 RIL の単純なアーキテクチャ
2. RILDプロセスのロードと開始
2.1. Google のネイティブ RILD プロセスのロードと開始
RILDプロセスは、システム起動時にinitプロセスによって起動され、システム起動後もシステム内に存在します。Android 7.0 より前では、rild は init プロセスによって init.rc ファイルをロードすることによって開始され、init.rc ファイルのパスは /system/core/rootdir ディレクトリにあります。Android7.0 の init.rc の多くの内容が rild プロセスなどのさまざまなプロセスに移動され、その起動部分が /hardware/ril/rild/ ディレクトリ内の rild.rc ファイルに移動されます。
/hardware/ril/rild/rild.rc ファイルには次のコードがあります。
サービス ril-daemon /system/bin/rild
クラスメイン
ソケット リルド ストリーム 660 ルート ラジオ
ソケット sap_uim_socket1 ストリーム 660 ブルートゥース ブルートゥース
ソケット rild-debug ストリーム 660 無線システム
ユーザールート
グループラジオキャッシュinetその他オーディオログreadprocwakelock