組み込みシステムのコアダンプ分析

この記事は、China MobileOneOSWeChatパブリックアカウント「EmbeddedSystemCoredumpAnalysis」、作成者:BaiLingから共有されています。

組み込み製品開発の過程で、機能開発が完了した後、ファームウェアが焼き込まれ、テストが行​​われ、テストが行​​われ、プログラムがクラッシュすることは避けられません。

問題解決のアイデア

プログラムのクラッシュの問題が発生したとき、最初に知りたいのは、プログラムがどこでクラッシュしたかということです。最も簡単な方法は、プログラムポインタレジスタを取得することです。たとえば、cortex-mを使用して開発する場合、プログラムがフラッシュにクラッシュするか、印刷するときにのみPC値を保存する必要があります。しかし、マップテーブルを見ると、PCが指す関数はmemcpyなどの汎用関数である可能性が非常に高いです。問題解決のための効果的な情報は提供されません。

したがって、ほとんどのプログラムクラッシュの問題では、完全な呼び出しスタックとスタック上の一時変数を取得するのが最善です。これは、コアダンプの主な機能です。

eCoreDumpコンポーネントの紹介

OneOSのeCoreDumpコンポーネントの主な機能は、elf形式のコアファイルを生成し、変更された組み込みgdbと連携して、組み込みシステムのコアダンプ分析機能を完了することです。具体的なプロセスは、プログラムに問題がある場合、eCoreDumpコンポーネントインターフェイスを呼び出して、レジスタ値とメモリコンテンツをelf形式のコアファイルに編成することです。コアファイルは、シリアルポートから直接出力するか、に保存することができます。閃光。

eCoreDumpコンポーネントワークフロー:

生成されたコアファイルがPCに転送され、ファイルとして保存された後の形式は次のとおりです。

 開発を構成して実行する

OneOS-Cube構成

eCoreDumpコンポーネントは、falコンポーネントのフラッシュストレージ機能とシェル機能に依存します。したがって、eCoreDumpを有効にする前に、開発ボードのfalインターフェイスが使用可能であり、シェルコンポーネントが有効になっていることを確認してください。

menuconfigを使用して、eCoreDump関数を有効にします。

(Top) → Components → Diagnose → eCoreDump
                                                        OneOS Configuration
[*] Using eCoreDump
        Select the arch (armv7m)  --->
[*]     Using example

コンパイル、ダウンロード、実行

eCoreDumpコンポーネントを有効にした後、keilまたはgccを使用してファームウェアをコンパイルできます。特定のコンパイルおよびダウンロード手順については、OneOS開発ドキュメントを参照してください。

4つの新しいシェルコマンドがeCoreDumpコンポーネントに追加されました。

trigger_assert
trigger_fault
corefile_dump
corefile_count

trigger_faultコマンドは、ハードフォールトの例を示します。実行後、ハードフォールトがトリガーされ、生成されたコアファイルがフラッシュに保存されます。分析プロセスについては、次のセクションで説明します。

trigger_assertコマンドはassertをトリガーし、生成されたコアファイルをシリアルポートに出力します。分析プロセスについては、ハードフォールトの例を参照してください。

corefile_countコマンドは、フラッシュに現在保存されているコアファイルの数を確認するために使用され、corefile_dumpコマンドはコアファイルをシリアルポートに出力します。

GDBを使用したハードフォールトの分析

eCoreDumpコンポーネントの機能を示すために、ハードフォールトを引き起こすコードを以下に示します。システムクラッシュの理由は、不正な関数ポインター呼び出しです。

fault_func func = (fault_func)0xFFFF0000;
int x, y;
const char * sx = "84597";
const char * sy = "35268";

float a, b, c;
const char * fsa = "1.1322";
const char * fsb = "45.2547";
const char * fsc = "7854.2";

a = atof(&fsa[0]);
b = atof(&fsb[0]);
c = atof(&fsc[0]);

x = atoi(&sx[0]);
y = atoi(&sy[0]);

func(x * a + y * b * c);

return 0;

ハードフォールトが発生したら、チップを再起動し、shellコマンドを使用して、生成されたコアファイルを表示します(ファイルの内容は16進形式で印刷されます)。

PCでのコアダンプ分析にecdViewを使用するプロセスは次のとおりです。

1)16進形式のファイルコンテンツをecdViewの最初のテキストボックスにコピーし、16進形式のコンテンツをバイナリ形式に変換してファイルとして保存します。
2)OpenElfボタンを使用して、プログラムのelfファイルパスを選択します。
3)BeginGDBボタンを使用して、コアファイル分析のgdbプロセスを開始します。

gdb解析の結果は次のとおりです。

 gdbおよびecdViewのダウンロードアドレス:https://gitee.com/cmcc-oneos/openOCD/releases

OneOSは、モノのインターネット向けにChina Mobileが立ち上げた軽量のオペレーティングシステムであり、調整可能、クロスプラットフォーム、低消費電力、高セキュリティを特長としています。ARMCortex-M / R / A、MIPS、 RISC-V.アーキテクチャは、POSIX、CMSIS、およびその他の標準インターフェイスと互換性があり、Micropython言語開発をサポートし、開発効率を効果的に向上させ、開発コストを削減できるグラフィカル開発ツールを提供し、顧客が安定した、信頼できる、安全で簡単な開発を支援します- IoTアプリケーションを使用します。公式ウェブサイトアドレス:https :
//os.iot.10086.cn/ OneOSソフトウェアアドレス:http:
//www.oschina.net/p/cmcc-oneos OneOSプロジェクトアドレス:https ://gitee.com/cmcc-oneos / OneOS
OneOS技術交流グループ:158631242

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/5443273/blog/5411900