前の記事では、我々はリカバリモードのアップグレードプロセスを導入し、スクリプトの基本的な構文をアップグレードします。今日、私たちはどのようにアップグレードプロセスを見て、我々はより便利なデバッグ情報を取得する方法、デバッグ情報を追加する必要があります。
基本的な環境
Androidのバージョン:アンドロイド6.0
チップのハードウェア:H6チー
一般的なログ取得モード
私たちは、リカバリアップグレードをデバッグ、私たちは多くの場合、ログの回復を確認する必要があり、Googleの私たちが取得する必要があるコマンドを入力し、プリミティブロジック、回復ログはシリアルポートに直接出力されていない、我々は、以下の3つの方法があります。
最初:回復、コマンドを入力して、猫の/tmp/recovery.log
第二:次のandroid、入力したコマンド、猫/キャッシュ/回復/ last_log
この環境では、私は、あなたがデバッグ情報を再起動するために必要とされるビューので、毎回コマンドを入力し、[を通じてプロセスを参照する2番目の方法をログに記録することはできません。まだデバッグ情報を取得するための便利な方法はもうありません。はい、それはシリアルポートに直接ログ出力されます。
シリアルポートへの出力
時には我々は、我々は次の回復にコードを変更する必要があり、ターミナルのシリアルポートに直接回復ログ出力を配置する必要があります。
コードパス:ブート可能/回復/ recovery.cpp
出典:
static const char *TEMPORARY_LOG_FILE = "/tmp/recovery.log"; static void redirect_stdio(const char* filename) { // If these fail, there's not really anywhere to complain... ... ... //重定向输出 freopen(filename, "a", stdout); setbuf(stdout, NULL); freopen(filename, "a", stderr); setbuf(stderr, NULL); ... ... } Int main(int argc, char **argv) { ... ... redirect_stdio(TEMPORARY_LOG_FILE); ... ... }
レビュー:
私達はちょうどすることができ「は/ dev /コンソール」に変更「/tmp/recovery.log」があり、関数のパラメータをredirect_stdioする必要があります。
static const char *TEMPORARY_LOG_FILE = ”/dev/console”;
あなたが最初に確認することができますので、異なるプラットフォームは、異なる場合があります
エコー「111111111」>は/ dev /コンソール
シリアルポートに通常のプリント出力の下でテストするかどうか。
もちろん、私のいくつかのポットの友人が自宅でもあり、外部の画面がありますので、さらに便利にログを表示します。
画面に出力
インタフェース内のコールの回復は、画面に直接印刷することができます。
パス:
bootable/recovery/updater/install.h void uiPrintf(State* state, const char* format, ...);
例:
uiPrintf(state, "%s: failed to mount %s at %s: %s\n",name, location, mount_point, strerror(errno));
出典:
static void uiPrint(State* state, const std::string& buffer) { UpdaterInfo* ui = reinterpret_cast<UpdaterInfo*>(state->cookie); // "line1\nline2\n" will be split into 3 tokens: "line1", "line2" and "". // So skip sending empty strings to UI. std::vector<std::string> lines = android::base::Split(buffer, "\n"); for (auto& line: lines) { if (!line.empty()) { fprintf(ui->cmd_pipe, "ui_print %s\n", line.c_str()); fprintf(ui->cmd_pipe, "ui_print\n"); } } // On the updater side, we need to dump the contents to stderr (which has // been redirected to the log file). Because the recovery will only print // the contents to screen when processing pipe command ui_print. fprintf(stderr, "%s", buffer.c_str()); } __attribute__((__format__(printf, 2, 3))) __nonnull((2)) void uiPrintf(State* state, const char* format, ...) { std::string error_msg; va_list ap; va_start(ap, format); android::base::StringAppendV(&error_msg, format, ap); va_end(ap); uiPrint(state, error_msg); }
上記のリカバリーモードのアプリケーションで話していることのアップデータスクリプトスクリプト言語のプリントの見え方を見てみましょう、印刷する方法です。
アップデータスクリプトスクリプトのデバッグ情報
ui_print()メソッドを介して直接、一般的な印刷のデバッグ情報。次のように使用します。
構文:
ui_print( "STR");
説明:
スクリーン印刷出力「STR」
例えば:
ui_print("It's ready!");
スクリーン印刷は、それは準備ができています!
結論
これらは、私たちが助けることを願って、アップグレードプロセスのデバッグログです。興味がある学生は、当社のマイクロチャネル公共番号を集中することができます。
前:[]アンドロイドAndroidシステムのアップグレードプロセス分析システム(C)---更新スクリプトの構文(紙テール分析を含む実施例)
次へ:目次