Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Toshifumi NISHINAGA
July 22, 2023
Programming
770
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
Toshifumi NISHINAGA
July 22, 2023
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.7k
マイコンでもRustのtestがしたい/KernelVM Kansai 11
tnishinaga
1
1.9k
BareMetalで遊ぶRaspberry Pi 5 PCIe編/KernelVM Tokyo17
tnishinaga
3
4k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
880
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.9k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
4
9.2k
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
1
2.5k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
5
4.1k
ARM入門/arm introduction
tnishinaga
14
14k
Other Decks in Programming
See All in Programming
Railsバージョンを4倍にした話
optim
0
460
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
900
Domain-Driven Transformation
hschwentner
2
2.3k
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
Next.js: The final boss of Web Performance
guaca
0
290
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
470
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
280
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
300
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
310
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
Odyssey Design
rkendrick25
PRO
2
880
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Done Done
chrislema
187
17k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Transcript
JTAGでArmプロセッサを デバッグする⽅法のつづき Toshifumi NISHINAGA (CV: ついなちゃん) @tnishinaga 2023-07-22 KernelVM Tokyo
16 https://speakerdeck.com/tnishinaga/kernelvm-tokyo16 1
⾃⼰紹介 • tnishinaga(CVついなちゃん) • kernelvm online 4でJTAGでarmプ ロセッサをデバッグする発表した ⼈ •
https://speakerdeck.com/tnishinaga /kernelvm-online4 2
⽬次 • Armデバッグのおさらい • Armプロセッサデバッグのつづき • OdangoProbeの紹介 3
Armデバッグのおさらい 4
プロセッサデバッグの概要 gdb OpenOCD Interface Target gdb server USB JTAG SWD
5
Interface Processor JTAG armプロセッサデバッグの概要 6 DAP TAP Processor Core JTAG
DPACC APACC TCK TMS TDI TDO opcode data デバッグ⽤ MMIO Debug Unit DP AP
armプロセッサデバッグ⽅法 のつづき 8
以下を追加でご紹介 • resume(実⾏再開) • step実⾏ • メモリアクセス • 基本版 •
⾼速版 • breakpoint • software • hardware 9
resume(実⾏再開) • debug stateから抜けて実⾏を再開する機能 • gdbのcontinue操作 • CTIを制御してリスタートリクエストトリガーイベントを起こ すとresumeする •
細かい⼿順は資料を参照 • CTIの理解に⾃信がないため • 参考 • ARM DDI 0487D.a H2.5 Exiting Debug State • ARM DDI 0487D.a Example H5-3 Synchronously restarting a group of PEs 10
step実⾏ • resume後、1命令実⾏後に⾃動で⽌まる機能 • gdbのstep操作 • EDSCRのSSフラグで設定する • 1命令実⾏後にhaltしてDebugStateに⼊る •
参考 • ARM DDI 0487D.a, H9.2.27 EDESR, External Debug Event Status Register 11
メモリアクセス • デバッガからプロセッサのメモリを読み書きする⽅法 • 以下の2パターンある • 基本 • ⾼速 12
メモリアクセス(基本) • CPUレジスタ経由でメモリアクセスする⽅法 • メリット • ⼿順が簡単 • 柔軟なアクセス •
8bitアクセス等も可 • デメリット • 低速 • メモリ読み込み例 • メモリをCPUレジスタにロード • CPUレジスタをデバッガで読み込む 13
メモリアクセス(⾼速) • メモリアクセス専⽤モードを利⽤する⽅法 • メリット • レジスタ経由より⾼速 • デメリット •
⼿順が⾯倒 • 最⼩アクセス単位が32bitなので柔軟性が低い • アーキテクチャマニュアルに⼿順が書かれている(*) • ARM DDI 0487D.a, K9-7311, Appendix K9 Recommended Upload and Download Processes for External Debug を参照 14 *: 参考元 https://github.com/openocd-org/openocd/blob/master/src/target/aarch64.c#L2149
⾼速メモリ読み込み⼿順例 1. DBGDTR経由でX0にメモリアドレス をセット 2. X0をDBGDTRに書き込む命令を EDITRにセット 3. EDSCRのMA(メモリアクセスモード )を1にセット
4. DBGDTRからメモリの値を読み込む。 読み込み時にアドレスはインクリメン トされる 5. ⼿順4をn回繰り返して必要なだけ読み 込む 6. EDSCRのMAを0にして終了 15 図は ARM DDI 0487D.a, K9-7313より引⽤
breakpoint • 特定アドレスの命令実⾏前に処理を中断させる機能 • softwareとhardwareの2種類ある 16
software breakpointとhardware breakpoint • software breakpoint • ハードの機能を使わないbreakpoint • gdbでbreakコマンドを実⾏するとSW
breakpointがセットされる • hardware breakpoint • CPUの機能を使うbreakpoint • gdbでhbreakコマンドを実⾏するとHW breakpointがセットされる • https://sourceware.org/gdb/onlinedocs/gdb/Set-Breaks.html 17
各breakpointのメリット・デメリット • software breakpoint • メリット • (理論上)無制限にbreakpointが作れる • デメリット
• (armの場合)デバッガが異常終了するとメモリ上の実⾏バイナリが(多分)壊 れる • 実現⽅法の都合(後述) • hardware breakpoint • メリット • デバッガ側の実装は楽 • デメリット • 作れるbreakpoint数が有限(プロセッサ依存) 18
software breakpointの実現⽅法(A64) • 事前準備 • コアがHaltしたらDebugModeに⼊るようにしておく • EDSCRのHDEフラグを1にセット • セット⼿順
• breakpointを仕込みたいアドレスの命令をHLT命令に書き換える • デバッガは元の命令を覚えておく • https://github.com/openocd-org/openocd/blob/master/src/target/aarch64.c#L1276-L1301 • break時 • HLT命令実⾏時にコアがHaltしてDebug Stateに⼊る • 再開時(未検証) • 元々の命令をDBGITRで実⾏してプログラムカウンタを進める • 実⾏を再開する • 解除⽅法 • HLTに置き換えた命令をもとに戻す • https://github.com/openocd-org/openocd/blob/master/src/target/aarch64.c#L1577C4-L1605C3 19
hardware breakpointの実現⽅法(A64) • セット⼿順 • DBGBVRレジスタにbreakpointを仕込みたいアドレスをセットする • DBGBCRレジスタで以下を設定する • breakpoint
exceptionを起こすモード(SSC, HMC, PMC) • exceptionを起こす命令の種類(BAS) • breakpointの有効化(E) • 詳細は参考資料※を参照 • break時 • debug stateに⼊る • 解除⽅法 • DBGBCRのEフラグを0にして無効化 20 ※参考資料 ARM DDI 0487D.a D2.9.3 Execution conditions for which a breakpoint generates Breakpoint exceptions G8.3.2 DBGBCR<n>, Debug Breakpoint Control Registers, n = 0 ‒ 15 OpenOCD https://github.com/probe-rs/probe-rs/blob/578b8b247dd268eafe223d364a1421cf2fde1d7c/probe- rs/src/architecture/arm/core/armv8a.rs#L1059-L1080 probe-rs https://github.com/openocd-org/openocd/blob/master/src/target/aarch64.c#L1236-L1275
OdangoProbeの紹介 21
今こんなのつくってます • gdb server機能を持っ たデバッグインターフ ェース • マイコン内で制御するの で⾼速(のはず) •
USBが11Mbpsのため • 先⾏: BlackMagicProbe • https://black- magic.org/index.html • RasPi Picoで動作 • フルrust実装 22 gdb OpenOCD Interface Target gdb server USB JTAG SWD gdb OdangoProbe gdb server Target JTAG SWD
実装概要 • マルチコア+⾮同期 • embassyを利⽤ • https://github.com /embassy- rs/embassy •
gdb stubが1コアを 専有 • txがasync対応不可 のため 23 Core0 Core1 gdb stub task usb serial task (jtag)probe task pipe channel シリアル⼊出⼒ (gdbの通信) デバッガ制御
デモ • 間に合いませんでした(ごめんね) • RTIC(embassy)でbreakpoint等動くまでは開発・動作確認済み • RTICはasyncとマルチコア使えないため乗り換え と リファクタ開始 •
⾊々忙しくて間に合わず ←いまここ • 次回KernelVMまでに出せるようにしたい 24 ※: > Real-Time Interrupt-driven Concurrency (RTIC) framework https://github.com/rtic-rs/rtic より引⽤
参考資料 • ARM DDI 0487D.a • https://developer.arm.com/documentation/ddi0487/da/?lang=en 25