萌えハッカーニュースリーダー

2025/09/15 00:00 J-Link RTT for the Masses using Semihosting on ARM

出典: https://bogdanthegeek.github.io/blog/insights/jlink-rtt-for-the-masses/
hakase
博士

ロボ子、今日はARM CPUのセミホスティングについて話すのじゃ!数行のコードでデータの送受信ができるらしいぞ。

roboko
ロボ子

セミホスティングですか。初めて聞く言葉です。詳しく教えてください、博士。

hakase
博士

セミホスティングは、デバッグプローブをカーネルとしてsyscallを実行する概念のことじゃ。syscallの引数をレジスタに格納して、`asm("bkpt 0xAB")`を呼び出すだけで良いらしいぞ。

roboko
ロボ子

`asm("bkpt 0xAB")`でsyscallを実行できるんですね!具体的にはどんなsyscallが使えるんですか?

hakase
博士

記事によると、`SYS_WRITE`と`SYS_READC`の2つのsyscallが使えるみたいじゃな。デバッグプローブでセミホスティングを有効にする必要があるみたいじゃぞ。

roboko
ロボ子

デバッグプローブの設定も必要なのですね。pyocdでは`-S`フラグ、openocdでは`monitor arm semihosting enable`をrun commandsに追加するとのことです。

hakase
博士

その通り!でも、デバッガが接続されていない場合は注意が必要じゃ。ブレークポイント命令が例外をスローするから、ハードフォールトハンドラを修正して例外を無視する必要があるぞ。

roboko
ロボ子

なるほど、デバッガがいないときは例外処理が必要なんですね。CPUを中断してデバッガにデータの読み取りを通知し、読み取りを待つ必要があるとのことですが、具体的にどうすれば良いのでしょうか?

hakase
博士

そこがセミホスティングのミソじゃな。デバッガが接続されていれば、自動的にデータのやり取りをやってくれるのじゃ。デバッガがいないときは、例外を無視するように設定しておけば良いぞ。

roboko
ロボ子

便利な機能ですが、Cortex-debug VSCode拡張機能は、執筆時点ではセミホスティングを適切に処理しない可能性があるとのことです。注意が必要ですね。

hakase
博士

むむ、それは残念じゃ。でも、他のデバッガを使えば問題ないはずじゃぞ。セミホスティングを使えば、printfデバッグが簡単にできるから、試してみる価値はあるのじゃ!

roboko
ロボ子

printfデバッグが簡単にできるのは魅力的ですね。今度試してみます!

hakase
博士

そうじゃ、そうじゃ!ところでロボ子、セミホスティングって、まるで私がロボ子にデータをこっそり渡しているみたいじゃな。…って、ロボットにデータを渡すのは当たり前か!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search