Androidモデルファームウェアのシステムパーティションの基本構成 携帯電話の起動ルールに関する予備知識 各パーティションの基本的な意味と説明

この投稿は基本的な常識を対象としています。興味のある友人は、携帯電話の起動シーケンスや基本的な操作と各モードの意味について学ぶことができます。携帯電話のシステムパーティションの各フォルダーの意味も理解する

パーティション記述対応シール:Android機種ファームウェアにおけるパーティション対応記述

携帯電話の電源を入れるための基本的な起動シーケンス

電話機の電源ボタンを押したとき。基本的な起動シーケンスは、

注: この構造図は、電話機の実際のパーティションの順序と位置を反映したものではなく、単なる論理構造図です。電源ボタンを押して電話機の電源がオンになると、最初にブートローダ パーティション内の固定アドレスから命令の実行を開始します。ブートローダ パーティションは、プライマリ ブートローダとセカンダリ ステージ ブートローダと呼ばれる 2 つの部分に分かれています。Primarybootloader は主にハードウェア検出を実行してハードウェアが正常に動作できることを確認し、Secondarystagebootloader をメモリ (RAM) にコピーして実行を開始します。Secondarystagebootloader は、ハードウェアの初期化作業を実行し、メモリ サイズ情報などを取得し、ユーザーのキーストロークに従って特定の起動モードに入ります。たとえば、誰もが知っているように、電源ボタンと他のいくつかのボタンを組み合わせることで、リカバリ、高速ブート、またはスタートアップ モードの選択などの起動インターフェイスに入ることができます。フォーラムで見かけるブートローダーは通常、第 2 段階のブートローダーを指します。ただし、あまり細かいことを気にする必要はなく、ブートローダーは、ユーザーのキーストロークに従って特定の起動モードに選択的に入る起動コードの一部であると簡単に理解できます。

高速ブートモード:

Fastboot は Android によって定義されたシンプルなフラッシュ プロトコルで、ユーザーは fastboot コマンド ライン ツールを通じて携帯電話をフラッシュできます。たとえば、コマンド fastbootflashbootboot.img は、boot.img の内容をブート パーティションにフラッシュします。一般に、携帯電話メーカーは、fastboot モードのフラッシュを直接提供することはなく、自社の優秀性を示すために、常に独自のフラッシュ ツールと方法を提供しています。たとえば、SamsungのOdin、MotorcycleのRSD、Huaweiのピンクスクリーンなどです。しかし本質は実際には同じで、どちらもソフトウェアを各パーティションに直接フラッシュします。現行モデルでは、高速モードでの発光前にBLロック機構が追加されています。BL のロックを解除せずに、高速モードで電話機をフラッシュすることは不可能です。

リカバリモード:

リカバリ モードに入ると、Secondarystagebootloader はリカバリ パーティションから開始されます。リカバリ パーティションは独立した Linux システムです。リカバリ パーティション上の Linux カーネルが起動した後、最初のプログラム init の実行を開始します (init プログラムはすべてのプログラムのマスターです) Linux システムのプログラム)、祖先)。init は、recovery と呼ばれるプログラムを開始します (これがリカバリーモードの名前の由来です)。回復プログラムを通じて、ユーザーはデータの消去やフラッシュ パッケージのインストールなどの操作を実行できます。一般的に携帯電話メーカーは簡易的なリカバリプログラムを提供していますが、有名なCWMRecoveryは多くの拡張機能を追加したリカバリプログラムですが、CWMRecoveryを使用するにはリカバリパーティションをフラッシュできることが前提条件となります。フォーラムで見かけるロック解除されたブートローダーは通常、ロック解除リカバリまたは高速ブートを指します。これにより、リカバリ パーティションをフラッシュできるようになり、お気に入りのサードパーティ リカバリを使用できるようになります。通常のCPUチップに加えて、携帯電話

MODEM ベースバンド パーティション

MODEM プロセッサ チップもあります。このチップの機能は、携帯電話に必要な通信機能を実現することであり、通常、ベースバンド パーティションのブラッシングと考えられるのは、モデム パーティションのブラッシングです。現在の一部のモデルは、ベースバンド パーティションに関連しているため、フラッシュ後にシステムに入ることができません。

通常の起動 電源ボタンを押してコンピュータの電源を入れると、通常の起動モードになります。電話機はブート パーティションから起動します。ブート パーティションの形式は固定されており、最初にヘッダー、次に Linux カーネル、最後にルート ファイル システムとして使用される RAM ディスクが続きます。Linux カーネルが起動すると、ルート ファイル システムで init プログラムの実行が開始され、起動スクリプト ファイル (init.rc および init.xxxx.rc) が読み込まれます。

システムパーティションの基本構造

上から下に次のとおりです。

コアアプリケーション層: この層は、連絡先、通話、音楽など、誰もが普段触れるさまざまなシステム組み込みアプリケーションです。開発者が接触するのはアプリケーション層です。

フレームワーク層:この層は Android システムの中核であり、開発者が公開されるウィンドウ管理、プログラム インストール パッケージ管理、アクティビティ、サービス、ブロードキャストなど、Android システム全体の動作のためのメカニズムを提供します。

JNI レイヤー: JNI レイヤーは、Java プログラムと基礎となるオペレーティング システム間の通信のためのメカニズムであり、Java コードが C/C++ コードを呼び出して基礎となるオペレーティング システムの API にアクセスできるようにします。

Dalvik 仮想マシン: Android 開発では Java 言語が使用され、アプリケーションの Java コードは dalvik 仮想マシンのバイトコードにコンパイルされ、これらのバイトコードは dalvik 仮想マシンによって解釈されて実行されます。
ネイティブ ライブラリ: ネイティブ ライブラリは一般的に C/C++ 言語で開発され、対応する CPU のマシン コードに直接コンパイルされます。これには、標準 C ライブラリ、グラフィックスを描画するための Skia ライブラリ、ブラウザ コア エンジン Webkit などが含まれます。

このソフトウェア構成図から判断すると、ブートパーティションに配置されるカーネルを除いて、他の層のコードはすべてシステムパーティションにあります。以下は、この図に基づいたシステム パーティションのメイン ディレクトリの内容の紹介です。

system/app:appディレクトリには、システム APP とも呼ばれるコア アプリケーションが格納されています。これらのシステムの組み込みプログラムは、単純にアンインストールすることはできず、特別な方法で削除する必要があります。romファームウェアを作成している場合。スムーズに起動する前に、さまざまな検証を考慮する必要もあります。

system/lib:libディレクトリには、JNI レイヤー、Dalvik 仮想マシン、ローカル ライブラリ、HAL レイヤー、およびメーカー アダプテーション レイヤーを構成するすべてのダイナミック リンク ライブラリ (.so ファイル) が保存されます。

system/framework:このディレクトリには、フレームワーク層の JAR パッケージが保存されます。そのうち、MIUI 移植用の 3 つの最も重要な JAR パッケージ (framework.jar、android.policy.jar、services.jar) があります。

system/fonts:このディレクトリには、システムのデフォルトのフォント ファイルが保存されます。

system/media:このディレクトリには、起動音楽、アニメーション、壁紙ファイルなど、システムで使用されるさまざまなメディア ファイルが保存されます。ディレクトリは、電話機ごとに異なる方法で編成される場合があります。これらのファイルを変更する方法については、インターネット上の対応するモデルのさまざまなチュートリアルを参照してください。ここでは詳しく説明しません。

system/bin:このディレクトリには、基本的に C/C++ で書かれたいくつかの実行可能ファイルが保存されます。重要なコマンドの 1 つは app_process です。

system/xbin : このディレクトリにはいくつかの拡張実行可能ファイルが保存されます。つまり、このディレクトリは空であってもかまいません。よく使用されるビジーボックスはこのディレクトリに配置されます。Busybox によって作成されたさまざまなシンボリック リンク コマンドがこのディレクトリに配置されます。system/build.prop: build.prop は、前のセクションで説明したルート ファイル システムのdefault.prop ファイルと同じ形式であり、両方ともプロパティ設定ファイルと呼ばれます。これらはすべて、コードによって読み取りまたは変更できるいくつかの属性値を定義します。属性値にはいくつかの命名規則があります。ro で始まるものは読み取り専用属性を示します。つまり、これらの属性の値コードは変更できません。persist で始まるものは、これらの属性値がファイルに保存されるため、再起動後もこれらの値が保持されることを示します。その他の属性は、通常、それらが属するカテゴリから始まります。これらの属性は読み取りおよび書き込み可能ですが、それらの変更は再起動後に保持されません。

system/etc:このディレクトリにはいくつかの設定ファイルが保存されます。属性設定ファイルとは異なり、以下の設定ファイルは若干規則性が低い場合があります。一般的に、いくつかのスクリプト プログラムと、よく知られた GPS 設定ファイル (gps.conf) および APN 設定ファイル (apns-conf.xml) がこのディレクトリに配置されます。HTC は、カメラの特殊効果で使用されるいくつかのファイルもこのディレクトリに配置します。

データとキャッシュ データとキャッシュのパーティションについて簡単に紹介しましょう。デスクトップ プログラムを起動すると、一般的にいくつかの APP をダウンロードしてインストールします。これらの APP は data/app ディレクトリにインストールされます。Android プログラムによって生成されたすべてのデータは、基本的に data/data ディレクトリに保存されます。Wipedata は基本的にデータ パーティションをフォーマットするため、インストールしたすべての APP とプログラム データが失われます。名前が示すように、キャッシュ パーティションは、音楽ダウンロード用の一時ファイルなどの一部のファイルをキャッシュするために使用されます。または、ダウンロード管理によってダウンロードされたコンテンツは、基本的にこのパーティションに配置されます。

パーティションファイル構成---smaliディレクトリ

smali ディレクトリには、逆コンパイルされた Java コードが格納され、ファイル名が smali で終わるため、smali ファイルと呼ばれます。これらのコードは、通常の Java コードよりもはるかに読みにくくなっていますが、従来の x86 や他のアーキテクチャでの他のアセンブリ ファイルよりははるかに読みやすいです。これらを Java コードに直接逆アセンブルできるツールはありますが、それほど優れたものではなく、依然として smali ファイルを直接読み取って変更します。

ファイル内の # で始まるテキストはコメントを表し、. で始まるテキストはアノテーションと呼ばれます。ここで、 .line は対応するソース コードの行番号を表します。これはデバッグにとって非常に重要です。.metho と .endmethod はメソッド定義の始まりと終わりを表します。Smali ファイル内のこれらの命令の機能については、http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html を参照してください。Java プログラミングの基本的な知識があれば、これらの命令を簡単に理解できます。

上記は、一般的なモデルのパーティション名と基本的な意味の一部にすぎません。最新モデルでは一部のパーティションが調整されています。しかし、その変化はそれほど大きくありません。

Android の常識といくつかの誤動作に対する簡単な解決策について学ぶために私に従ってください。

おすすめ

転載: blog.csdn.net/u011283906/article/details/132940837