私はどのパーティションが何のために使用されているかを見つけようとしています/boot
、/recovery
、/system
、adb Shell
から。これは現在マウントされているパーティションでは簡単ですが(mount
またはdf
コマンドを使用して、たとえば パーティションの名前を識別する方法 を参照)、これは次の場合に注意が必要です。現在マウントされていないパーティションになります(「ユーザーモード」で起動したときの/recovery
など)。
XDAのチュートリアル がありますが、試したどのデバイスでもうまくいきませんでした:
cat /proc/mtd
:これは空または存在しませんcat /proc/emmc
:これは空または存在しませんcat /proc/dumchar_info
:非存在(MTK/MediaTek)ls -al /dev/block/platform/*/by-name
:存在しないか、必要な詳細がないparted
は、Error: Can't have a partition outside the disk!
で/dev/block/mmcblk1
を生成しました(/dev/block/mmcblk0
の「名前」列が欠落しているだけです)。だから私は迷っています。 DiskInfo のようなアプリがあり、それらの詳細を表示できることがわかっているので、デバイスのどこかに保存する必要があります。ただし、私の場合、デバイスの変更(アプリのインストールによる)はオプションではありません。
したがって、基本的に私の質問は次のように燃え尽きます。
Androidデバイスのどこにこの情報が保存されていますか?
可能であれば、一般的なアプローチが推奨されます。そうでない場合、いくつかのアプローチの「試行錯誤」(if..elseif..fi
)も同様に行います。
背景:「/boot
パーティションのみを取得したい」という使用例があります(dd
経由でイメージを取得します)。最初にすべてのパーティションを取得し、後で評価することはしません-時間がかかり、生成されるデータが多すぎます;)-これはすでに意図を説明しています。特定のディスクイメージを取得する小さなツールを作成します。
それを達成するための「ユニークな方法」はないように思えるので、私は全体からのアイデアを組み合わせ、それらをスクリプト(または「スクリプトライブラリ」)に結合して、それらを順番にチェックするようにしました(ヒットが成功するまで)。それをAdebarという名前の「デバイスドキュメントツール」に統合しました。興味のある方は lib/partitions.lib
ファイルで見つけることができます。 Adebarはオープンソース(GPLv2)なので、自由にコピーして使用するか、プロジェクトを分岐して改善してください。
完全なソリューションはここに投稿するには少し長いですが(前述のとおり、Githubで入手できます)、SEのポリシーでは投稿に少なくとも一般的な部分を含めることであるため、次のようになります。
さまざまなソースがさまざまな詳細セットを提供するため、最初に「最適なもの」を試し、次に少なくとも何かが見つかるまで再帰します。
/proc/dumchar_info
は最も詳細な情報を提供するため、これが最初に試されます。幸せなMTKユーザーはこれを取得します。/proc/mtd
は2番目に優れたソースです。/proc/emmc
は以前の候補とほぼ同じである必要がありますが、使用するのは少し難しいです/dev/block/platform/*/by-name
、…とクロスチェック/proc/partitions
は/proc/mounts
とクロスチェックされ、少なくともマウントされたパーティションを提供しますしたがって、私が作成したスクリプトは基本的にソースをこの順序で調べ、詳細を収集できるようになるとすぐに停止します(たとえば、/proc/dumchar_info
が見つかった場合、他のすべてを解析する必要はありません)。それらはすべて別々の関数に入れられ、まったく同じ構造を使用してデータを返します。それらすべての結果をマージすることもできます。
誰かがより良い解決策を思い付くことができれば、私はもちろんそのアイデアに対して常にオープンです:)
Linuxのmounted-partitionの情報は https://stackoverflow.com/a/15639867/629118 として取得できますが、Linuxカーネルはboot
およびrecovery
パーティションは/dev/block/platform/**/by-name
はありません。
したがって、現在マウントされている情報を使用して、どのパーティションがboot
またはrecovery
または/ dev内の他の何かであるかを推測できます/ block/*がマウントされていません。
実際、fastbootは、フラッシュするパーティションの名前のみを送信します。それは、fastbootのブートローダーだけが情報を知っていることを意味します。