問題タブ [openocd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
eclipse - OpenOCDを使用したARM LPC1768のEclipse GDBの「init」および「run」設定?
この LPC1768 ミニ ボードでコードを実行する方法をようやく見つけましたが、今はデバッグを機能させようとしています。
私が使用しているツールチェーンは、Yagarto + Eclipse (Indigo) (GDB ハードウェア デバッガー付き) + OpenOCDです。私の JTAG インターフェイスは、Bus Blaster V2ボードです。
同様のセットアップを説明するガイドを1 つ見つけましたが、それは別の JTAG インターフェイス用であり、あまり役に立ちません。LPC1768 の例に関するこの投稿もありますが、gdb コマンドは OpenOCD 用ではありません。
この時点で、私が確実に知っている唯一のコマンド (init 用) はtarget remote localhost:3333
(OpenOCD gdb サーバーへの接続用) です。
このダイアログでは、どの設定と gdb コマンドを使用する必要がありますか?
(「SAM7X256」は無視してください。上記のリンクのいずれかからスクリーンショットを再利用してください。私はARM LPC1768を使用しています)
また、ボードがセカンダリ ブートローダー(ユーザー コードは 0x2000 で始まる) を使用しているという事実は、これらのデバッグ設定に影響しますか?
更新: dwelch のアドバイスを受けて、いくつかの基本的な OpenOCD コマンド ( reset init
、mdw
、mww
、load_image
など) を機能させることができました。奇妙な「JTAG-DP STICKY」エラーは、RAM リンカ スクリプトで発生したもので、RAM リンカ スクリプトを使用して LPC1758 のプロジェクト テンプレートを見つけ、LPC1768のメモリ サイズを変更するだけで、load_image がうまく機能しました。
ただし、GDBデバッグ用にEclipseを適切に構成する方法を知りたいです。
gdb - lmaはどういう意味ですか?
OpenOCDとGDBを使用して実行可能ファイルをボードにロードすると、次のようなものが得られます(ここから抜粋したスニペット):
lma
この文脈ではどういう意味ですか?
gcc - openocd を介して gdb (ターゲット アーム) を使用してマルチソース (asm および c) プログラムをデバッグする
複数のオブジェクト ファイルからリンカによって作成されたプログラムのソースを段階的にデバッグしたいと考えています。
簡単にするために、1 つのソースはスタートアップ ルーチンが配置されているアセンブリ ファイルであり、もう 1 つは C ファイルであると仮定します。プログラムは以下のmakefileでビルドされます
私の問題はopenocdに依存していないと思いますが、完全を期すためにopenocd固有の部分を述べます。openocd デーモンが開始された後、次のコマンドでデバッグ セッションを開始します。
ここで、$memory_location は .text セクションの最初のアドレスです。開いた後ddd
、プログラムは目的のアドレスで停止し、通常どおりアセンブリ ラインを 1 ステップ実行できます。最後に、Cファイルにある関数にジャンプするジャンプ命令に到達します。もう1ステップ後、プログラムが実行されている間、gdbは応答しなくなります。
たぶん、あなたの専門家の 1 人が、私が何を変更しなければならないかのヒントを教えてくれるので、この時点で gdb が c ソースに切り替わり、段階的な実行を続けることができます。
eclipse - STM32F4Discovery ボードで動作するように Eclipse、GCC、および OpenOCD を構成するにはどうすればよいですか?
私は STM32F4 マイクロコントローラと ST-LINKv2 デバッガ インターフェイスの両方を含む STM32F4Discovery ボードを所有しています。このセットアップで簡単な C プログラミングを行いたいと考えており、自由に利用できるツールを使用してそれを行いたいと考えています。
私が知っていることは次のとおりです。
- Eclipse は、YAGARTO などのさまざまなツールチェーンを使用して、さまざまな ARM ターゲット用にクロスコンパイルするように構成できます。
- Eclipse は GDB を使用してリモート デバッグを実行できます。
- OpenOCD は GDB サーバーを提供します。
- OpenOCD (最新バージョン) は、ST-LINKv2 と STM32F4Discovery ボードの両方をサポートしています (このボード用のスクリプトが含まれています)。
これが私が知らないことです:これらの断片を首尾一貫した全体にまとめる方法. 必要な可動部分は揃っていると思いますが、組み立て方に困っています。多くの場合、「Eclipse Indigo をインストールする」などで始まります。簡単なチュートリアル、手順のリスト、またはチェックする項目はありますか?
kernel - JTAG + openocd + カーネルのデバッグ (vmlinux にデバッグ情報がない?)
Eclipse からターゲットに接続すると、次のメッセージが表示されます。
しかしその後、実行中のカーネルを停止すると: 0xc06f2674
No source available for ""
また、ステップしようとすると: target request failed: Cannot find bounds of current function.
vmlinux にはシンボルがないようです。ただし、カーネルは DEBUG_KERNEL と DEBUG_INFO の両方が設定された状態で再構築されます。
カーネル 2.6.39 CPU AT91SAM9G25
debugging - Jtag を使用した Linux のデバッグ - [ARM9][AT91SAM9G25] - Amontec、openocd、gdb、eclipse
このシステムでカーネルのデバッグを開始しようとしています: Amontec JTAGkey2、openocd、gdb、eclipse。
最後に、実行中のカーネルとアプリケーションをデバッグしたいと思います。問題はほとんどなく、順次解決する必要があるようです。現在、CPU の一時停止/再開、RAM の読み取り/書き込みがあります。不足しているもの: ステップ イン、ステップ オーバー、C/C++ レベルのデバッグ。
私は次のことを行います: - JTAG を接続し、ボードの電源を入れ、Uboot を介してデバッグ メッセージで uImage を起動します - openocd を起動します:
出力:
そして問題はここから始まります:
openocd:
日食:
JTAG がコードを 0x0 にロードしようとしているようにも見えますが、これは間違っていると思います:
更新 1 :
ARM のいくつかのオンライン チュートリアルを分析した後:
Eclipse のリセットおよび停止コマンドは完全には機能しません。それらのチェックを外して、コマンド ウィンドウに書き込むことをお勧めします。また、ロードアドレスを追加することもできます:
使わない
Uboot を起動して、RAM やその他の周辺機器を初期化します。次に、シェルに入って Uboot を停止します。次に、Eclipse に Linux を RAM に書き込んで起動させます。非常に時間がかかりますが、少しはうまくいきます。カーネルは、コンソールを返さずに RPC 初期化で開始および停止します。
- Uboot コンソール内でカーネルを RAM にロードし、その後 JTAG セッションを開始することはできますか?
- [load ...] コマンドと [monitor load...] コマンドの違いは何ですか
- uImage の代わりに /compressed/vmlinux をロードする必要があるのはなぜですか?
- Eclipseウィンドウには、2つのロードフィールドがあります。イメージをロードし、シンボルをロードします。両方のオプションを無効にしますが、load arch/arm/boot/compressed/vmlinux 0x22000000 のみを書き込みます。それはおそらく次の問題の理由ですか?
更新 2 : わかりました。ヒントをありがとう。
私はいくつかの進歩を遂げました。何かアドバイスをいただけないでしょうか。おそらく私はまだ何か間違ったことをしているのかもしれません。
現在、カーネルは JTAG 制御下で実行されていますが、ソース コード レベルでデバッグすることはできません。
私は次のようにします:
- ボードの電源を入れ、uboot シェルに入ります。
- openOCD セッションを開始する
theKernel 呼び出しで bootm.c に Uboot ブレークポイントを設定します。
/li>Eclipse デバッグ セッションを開始します。
- 監視停止
オフセットなしで uboot-a をロードする
/li>uboot を起動して実行します
- 「theKernel」呼び出しで uboot が停止する
カーネルがアドレス 0x20008000 にあることはわかっています。
- openOCD セッションを再起動します
カーネル構成で ecipse デバッガーをもう一度起動します。
- 監視停止
アドレス 0x20008000 にカーネルをロードします
/li>- デバッグセッションを開始
すべてが正常に動作し、カーネルが起動しますが、ソース コード レベルでデバッグすることはまだできません。
「symbol is not available」
カーネルの DEBUG と DEBUG_INFO がオンになっています。
vmlinux スクリーンショット
このファイルに約 50 個の関数シンボルがあることは、私にとって驚くべきことです。
gdb - リモート パイプ モードで OpenOCD を使用すると GDB がハングするのはなぜですか?
GDB と OpenOCD を使用して、Windows 上の STM32F4DISCOVERY ボードで簡単なプログラムをデバッグしています。これは、OpenOCD を個別に起動し、TCP/IP を使用して次のように接続すると、正常に機能します。
完了したらquit
、通常どおり GDB をシャットダウンできます。ただし、OpenOCD を手動で開始および停止する必要はなく、「リモート パイプ」モードで GDB を使用したいと考えています。これは、私にはやや理想的な構成のように思えます。ただし、これを行うと、終了しようとするとハングするため、GDB を終了できません。
OpenOCD ログ ファイルは、GDB 接続が切断されたことを示しています。
しかし、GDB は決して終了しません:
コマンドも同様にハングし、disconnect
二度と戻りません。Ctrl-C でさえ GDB を起動しません。
arm - OpenOCD で ARM マイクロコントローラをフラッシュする前に、objcopy を使用する必要がありますか?
ARM マイクロコントローラ用の「通常の」ARM クロスコンパイルは、通常、次の 3 つまたは 4 つのステップで構成されます。
- アセンブラを使用して、スタートアップ コード (アセンブリの場合) をオブジェクト ファイルにアセンブルします。
- コンパイラを使用してソース コードをオブジェクト ファイルにコンパイルする
- リンカーを使用して、オブジェクト ファイルを .elf ファイルにリンクします。
- objcopy を使用して、.elf ファイルを .hex ファイルに変換します。
- .hex ファイルをフラッシュします
よくわからないのはステップ 4 です。OpenOCD のflash write_image
コマンドのドキュメントには、次のように記載されています。
ファイル [タイプ] は、bin (バイナリ)、ihex (Intel hex)、elf (ELF ファイル)、s19 (Motorola s19) として明示的に指定できます。mem、またはビルダー。
OpenOCD が elf ファイルをサポートしていることは明らかですが、これが実際に何を意味するのかはわかりません。これは一部のターゲットでのみサポートされていますか? JTAG/SWD アダプターは、これが機能するために何らかの objcopy のような機能を提供する必要がありますか? OpenOCDがまだelfファイルをサポートしていなかった時代からの単なる名残りですか?
eclipse - OpenOCD と組み合わせた Eclipse GDB
USBを使用してこのコントローラーをプログラムするために使用eclipse CDT
するソフトウェアを作成するためにstm32f0-discovery
使用しています。ST-link
数日前、私OpenOCD6.0.1
はこのチュートリアルに従ってチップをデバッグしました:
数時間後、私はこの作業を行い、プログラムの設定ブレークポイントと他のすべての通常のデバッグを真に実行できるようになりました。さて、ここで奇妙なことが起こりました。私は自分の設定を -> Monitor reset halt から -> monitor soft_reset_halt に変更し始めました。これを行ったのは、3 本のワイヤ (SWD プログラミング) だけを使用してプログラムできる stm32f0 シリーズのチップを搭載したボードを最終的に開発したいからです。これがうまくいかなかったので、リセットの停止を監視するように設定を復元しました。
今日、私は自分のチップをデバッグしたかったのですが、Eclipse のデバッグを開始すると、デバイスがリセット ハンドラーにあることがわかりました (monitor reset halt コマンドのおかげで、これは正しいように思えます) この時点での openocd の出力は:
ここで、リセット ハンドラをステップ オーバーしてプログラムを開始したいのですが、次の警告が表示されます。
警告: stepi は無視されました。GDB は、ターゲットからレジスタの状態を取得します。
グーグルで調べた後、これを引き起こしている原因に対する答えが見つかりません。誰もがこの問題を解決する手がかりを持っていますか?
c - Eclipse デバッグ (CDT) コンソール writeline
stm32f0 を eclipse(CDT)、gdb、openocd でデバッグしようとしています。var をコンソールに出力する方法はありますか (たとえば、ビジュアル スタジオで行うように)。console.writeline や debug.writeline のようなものですか?
ありがとう