v5.4 以上のカーネル バージョンを使用する Android 12 を搭載してリリースするデバイスには、GKI カーネルを搭載して出荷する必要があります。パートナーが GKI カーネルで開発を行う間 userdebug ビルドで DebugFS
にアクセスできるように、GKI defconfig でカーネル構成 CONFIG_DEBUG_FS
が有効になっています。Android 12 を搭載してリリースするデバイスのユーザービルドには DebugFS
をマウントしないでください。
userdebug ビルドはユーザービルドよりもテスト カバレッジが広く、開発サイクル全体で徹底的にテストされます。以下のように計画することで、DebugFS
へのアクセスに関してその 2 つのビルドタイプ間の相違を最小限に抑え、次のようなメリットを得ることができます。
- userdebug ビルドが新機能に関して誤って
DebugFS
に依存することがなくなる - DebugFS が欠如していて互換性のない既存の機能を、開発サイクルの早い段階で認識できるようになる
userdebug ビルド内での Debugfs へのアクセスは、以下のカテゴリに分類されます。
- デバイスの起動中での
DebugFS
ファイルの初期化: デバッグデータの収集を有効にするためのDebugFS
でのファイルへの書き込みアクセス権など。 - バグレポートの生成:
dumpstate
がDumpstateBoard()
を呼び出すと、dumpstate HAL がDebugFS
ファイルを読み取ります。この情報がバグレポートの一部になります。 - デバイス固有のテストと検証。
次の表に、Android 12 でこの 3 つのカテゴリがそれぞれどのようにサポートされるかを示します。ユーザービルドには DebugFS
をマウントできないため、以下は userdebug ビルドのみ該当します。
ユースケース | Android 12 の userdebug ビルド |
---|---|
1 回限りの DebugFS ファイルの初期化(起動中): このアクセスは起動中に 1 回だけ行われます。 |
dumpstate HAL が HAL の初期化中にこれを実行します。これを有効にするために、init が HAL の初期化より前に userdebug ビルドに DebugFS をマウントします。デバイスの起動が完了すると、Init は DebugFS 上で umount() を呼び出します。 |
バグレポートの生成: dumpstate HAL がバグレポートの一部となる DebugFS ファイルを読み取ります。 |
dumpstate(DumpstateDevice.cpp)によって呼び出されたときに、DumpstateBoard() 内の dumpstate HAL が実行します。dumpstate ツール(Android フレームワークの一部)により、呼び出し中に DebugFS がマウントされます。 |
デバイス固有のテストと検証 | adb の root とシェル。root アクセス権を使って adb シェルから DebugFS をマウントします1。 |
1root アクセス権を使って adb shell
から DebugFS
をマウントするには、次のコマンドを使用します。
adb shell mount -t debugfs debugfs /sys/kernel/debug
パートナーに必要なアクション
パートナーは、Android 12 搭載デバイスにおける上記の変更に基づいて、以下を行う必要があります。
DebugFS
ノードの起動時の初期化はすべて、dumpstate HAL の初期化中に行うようにします。その方法の例については、DNM: 起動時におけるDebugFS
ファイルの初期化の例をご覧ください。- ランタイムでの
DebugFS
へのアクセスは許可しないでください。ただし、以下の例外があります。- バグレポートの生成(dumpstate HAL から)
- テストと検証(
adb root
とshell
でアクセスできる - 先に DebugFS がマウントされていることを確認する)
デベロッパーは、デバッグ用の永続的プロパティ persist.dbg.keep_debugfs_mounted
を設定して、userdebug ビルドと eng ビルドの再起動後も DebugFs
をマウントした状態を保持できます。
GTS コンプライアンス テストでは、DebugFS
ファイルシステムがユーザービルドにマウントされていないことが確認されます。Sepolicy の neverallow
ステートメントを使用すると、Android 12 以上を搭載してリリースされたデバイス内で、未承認プロセスに DebugFs
へのアクセスが許可されないように徹底できます。