「小さな」Linuxを使用するボード上にドライバを開発することは全く新鮮です。私がすべてを作り、PC上の ".bin"ファイルを取得し、ボードに ".bin"をftpすると、システムはうまく動作します。GDBのないボードでLinuxカーネルをデバッグ
問題が発生しました。私はシステムをチェックし、gdbを使うことはできません。だからシステムがクラッシュすると、ちょうど厄介なアドレス情報を提供するコアダンプファイルが提供されます(役に立たないか、少なくとも私はこれをどのように使うべきかわかりません)。
経験豊富なエンベデッドデベロッパーは、何か提案をいただきましたか?どのようにあなたの仕事でデバッグ?
ところで、コンソール印刷のクラッシュ情報にスタック情報とコールトレースが含まれている場合、epcとraは(私はそれを学んだだけです)。 epc(クラッシュしたアドレス)はまだ見つかっていますか?
どのようなデバッグ出力手段がありますか? printf出力に使用できるUARTはありますか?シングルステッピングやメモリ検査のためのJTAGインターフェイス? – Throwback1986
@ Throwback1986私はPCコンソールに物事を印刷するためにUARTを持っていますが、非常に原始的です。そして、私はシステムを遅くする多くの印刷できません –
ちょうどprintkを使用してデバッグはプリミティブと思われるかもしれませんが、コードや状況がブレークポイントを許容しない場合は効果的です。コードを机上でチェックするとバグの99.9%を捕まえることができるので、C(とプログラム/システム)を知ることができます。 (例えば、マニュアルページを読み、すべての顕著なリターンコードをテストする)防衛的に(例えば、assert()の自由使用など)を体系的に記述しなければなりません。コンパイラの警告を修正しました。 debug_flag変数を使用して冗長性を制御し、どのプリントがアクティブであるか非アクティブであるかを制御します(つまり、常にすべてのprintkをアクティブにする必要はありません)。パニックの場合は、冗長パニックを有効にし、記号を削除しないでください。 – sawdust