poor man’s JTAG	     2012年4月1日    第19回PF部勉強会
本日の発表内容	★自己紹介★お金をあまり掛けずにAndroid Kernelのデバッグ •PCとターゲットボードだけ •安価なJTAGボードを使って
自己紹介	★東の羊★twitter @pakuqi★Blog 電脳羊(http://xiangcai.at.webry.info/)→Androidが動作するボードの話題が多いです。BeagleBoard, BeagleBoard xM, Pa...
今回の発表のきっかけ	PF部の第3回勉強会、通称Init祭りで@tetsu_kobaさんによる「自社製品デバッガーの説明」がありました。Initで止めて処理を追っかけたりhttp://www.yokohama.android-pf.org/st...
その後	Pandaboardに関する調べものをしてた時に、以下の動画を偶然見つけました。http://www.youtube.com/watch?v=8wK9q3XqnFYHowto: BeagleBoard and PandaBoard wi...
TinCanTools Flyswatter 	http://www.tincantools.com/
オーダー	オーダーはTinCanToolsのサイトから行います。Registerから必要情報を入力して登録してからクレジットカードで支払います。
実際のオーダー	下にあるようにFlyswatter2本体(SKU600)が$89、JTAGの20ピンから14ピンへの変換(SKU620)が$22、送料が$31.90送料は3つから選べて2番目に早いの(PriorityMail)にしました。1週間...
安いだけじゃない	   オプションの変換コネクタとケーブル   必要だけど最初からBeagleBoardに   対応してる!!
OpenOCDも対応	     OpenOCD(後で説明します)も     BeagleBoard     BeagleBoard-xM     PandaBoard     対応!!
Linaro Connect Q4.11	Linaro Connect Q4.11でTinCan Toolsの中の人がデモしてるの発見!!http://www.youtube.com/watch?v=FhMhH5kEcGw
Android Builders Summit                2012	前回のPF部でABS 2012の資料斜め読みしましたが、以下のプレゼンがありましたUsing OpenOCD JTAG in Android Kernel ...
本日の発表	—  大貧民コース(PCとターゲットボードのみ)—  貧民コース(安価なJTAGボード:Flyswatter2を使用)—  大富豪コース(対象外)     PARTNER-Jet買って下さい(^^;
PCとターゲットのみ	●ハードウエア構成  PCとターゲートボード(PandaBoard)をシリアルケーブルで  接続します。	              シリアル              ケーブル
PCとターゲットのみ	●ソフトウエア構成(概略)  gdbを使ってデバッグします。ターゲットボードのカーネルにStub  (gdbの通信相手)のkgdbを組み込みます。  gdbのFrontendとしてDDD(Data Display Debu...
PCとターゲットのみ	●ソフトウエア構成(詳細)  先ほどの図ですと、gdbがシリアルケーブルを使うのでPCから  Consoleを使った操作や表示が出来なくなります。  そのため、間にagent-proxyを入れると両方とも有効に出来ます  ...
環境構築の概要	●カーネル側kgdb:Linuxカーネル2.2.26から統合されました。カーネルコンフィグで有効にすれば使えるようになります。(後述)●PC側gdb:Androidのprebuiltを使いますprebuilt/linux-x86...
kgdbの有効化	(1)環境変数設定export ANDROID_ROOT=$PWDexport ARCH=armexport CROSS_COMPILE=$ANDROID_ROOT/prebuilt/linux-x86/toolchain/a...
kgdbの有効化	(4)kgdbを有効にする$ make menuconfigメニュー画面が表示されるので、「Kernel hackingの中に入る」Compile the kernel with debug infoを有効「KGDB: ker...
kgdbの有効化	(5)カーネルのビルド$ make uImage modules -j8(6)カーネルをSDカードにコピー(7)ブートパラメータの追加ブートローダがカーネルに渡すカーネルパラメータにkgdbocを追加します。	kgdboc=[...
PC側の処理	(1)agent-proxyの起動$ agent-proxy 4440^4441 0 /dev/ttyUSB0,115200 &Agent Proxy 1.95 Started with: 4440^4441 0 /dev/tty...
PC側の処理	(4)ターゲットボードのkgdbへ接続DDDのGDB Consoleで(gdb) target remote localhost:4441※通常は(gdb) target remote /dev/ttyUSB0とコンソールを指定し...
安価なJTAGボードFlyswatter2        を使用	●ハードウエア構成  PCとターゲートボード(PandaBoard)をシリアルケーブルと  JTAGで接続します。	                               ...
実物	                                       Flyswatter2                       20ピンから14ピンへ変換JTAG接続:14ピン              シリアル接続
安価なJTAGボード:                  Flyswatter2を使用	 ●ソフトウエア構成(詳細)  先ほどの図と似ています。agent-proxyの代わりにOpenOCD  が間に入っています。	              ...
環境構築の概要	差分のみ示します●PC側OpenOCDTinCanToolsのサイトにビルド手順があります。それに従ってやれば構築出来ます。 詳細はブログを参照ください。 http://xiangcai.at.webry.info/201203...
デバッグ操作	実際のデバッグ操作です。詳細はブログに書いたのでそちらを参考にして下さいhttp://xiangcai.at.webry.info/201204/article_1.htmlここでは概略を説明します。(1)Flyswatter2と...
デバッグ操作	Open On-Chip Debugger 0.5.0 (2011-11-13-22:03)Licensed under GNU GPL v2For bug reports, readhttp://openocd.berlios....
デバッグ操作	(4)TelnetでOpenOCDに接続します。コマンドプロンプト”>”で入力出来ます。	$ telnet localhost 4444Trying ::1...Trying 127.0.0.1...Connected to lo...
デバッグ操作	(6)DDDの実行	$ ddd --debugger arm-eabi-gdbGDB Consoleでコマンドを実行	(gdb) file vmlinux(gdb) target remote localhost:3333→接続先...
デバッグ操作
デバッグ操作	(8)Telnet上でコマンド「resume」を実行します。	> resume(9)DDDのGDB Consoleで「c」を実行します。(10)コンソールで$ mkdir tmpを実行します。		(13)DDDのブレークポイントに...
デバッグ操作
まとめ	※Kernelデバッグって大変そう※高価な機材が必要みたいなイメージがあるかと思いますが、比較的安価で気軽に出来ることが分かりました。デバッグ以外にも学習のために実際に動かしてブレークポイントを張ってステップ実行しながら、想定通りに動い...
今後の予定	★OpenOCD、JTAGの使い方に習熟する今は何となく使ってる感じなので★デバイスドライバー組み込んでデバッグまずはHello Worldレベルのものをカーネルに組み込んでデバッグ出来るか事前に調べた感じでは、ごにょごにょしないと...
参考情報	●電脳羊http://xiangcai.at.webry.info/201203/article_1.htmlhttp://xiangcai.at.webry.info/201203/article_2.htmlhttp://xian...
Upcoming SlideShare
Loading in...5
×

PF部第19回資料 poor man's JTAG

2,674
-1

Published on

4月1日のPF部第19回資料です。若干追加しています。

1 Comment
1 Like
Statistics
Notes
  • poor man's て表現はときどき見かけるが、いつもどう訳せばよいのかよくわからない。お手軽とかでいいのかな
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
2,674
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
21
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

PF部第19回資料 poor man's JTAG

  1. 1. poor man’s JTAG 2012年4月1日 第19回PF部勉強会
  2. 2. 本日の発表内容 ★自己紹介★お金をあまり掛けずにAndroid Kernelのデバッグ •PCとターゲットボードだけ •安価なJTAGボードを使って
  3. 3. 自己紹介 ★東の羊★twitter @pakuqi★Blog 電脳羊(http://xiangcai.at.webry.info/)→Androidが動作するボードの話題が多いです。BeagleBoard, BeagleBoard xM, PandaBoard, Snowball★2011年4月からAndroid関連の部署に異動して1年経ちました
  4. 4. 今回の発表のきっかけ PF部の第3回勉強会、通称Init祭りで@tetsu_kobaさんによる「自社製品デバッガーの説明」がありました。Initで止めて処理を追っかけたりhttp://www.yokohama.android-pf.org/study/20101204いいなーと思いながら、お約束の「でも、お高いんでしょ?」@tetsu_kobaさんも個人で買うもんじゃないので会社で買ってもらって下さいorz
  5. 5. その後 Pandaboardに関する調べものをしてた時に、以下の動画を偶然見つけました。http://www.youtube.com/watch?v=8wK9q3XqnFYHowto: BeagleBoard and PandaBoard with the TinCanToolsFlyswatter (OpenOCD) JTAG Debugger
  6. 6. TinCanTools Flyswatter http://www.tincantools.com/
  7. 7. オーダー オーダーはTinCanToolsのサイトから行います。Registerから必要情報を入力して登録してからクレジットカードで支払います。
  8. 8. 実際のオーダー 下にあるようにFlyswatter2本体(SKU600)が$89、JTAGの20ピンから14ピンへの変換(SKU620)が$22、送料が$31.90送料は3つから選べて2番目に早いの(PriorityMail)にしました。1週間くらいで届きました。
  9. 9. 安いだけじゃない オプションの変換コネクタとケーブル 必要だけど最初からBeagleBoardに 対応してる!!
  10. 10. OpenOCDも対応 OpenOCD(後で説明します)も BeagleBoard BeagleBoard-xM PandaBoard 対応!!
  11. 11. Linaro Connect Q4.11 Linaro Connect Q4.11でTinCan Toolsの中の人がデモしてるの発見!!http://www.youtube.com/watch?v=FhMhH5kEcGw
  12. 12. Android Builders Summit 2012 前回のPF部でABS 2012の資料斜め読みしましたが、以下のプレゼンがありましたUsing OpenOCD JTAG in Android Kernel Debuggingスライドhttps://events.linuxfoundation.org/images/stories/pdf/lf_abs12_anderson.pdfビデオhttp://video.linux.com/videos/using-openocd-jtag-in-android-kernel-debuggingビデオ(01:51:54)見ましたが●前振りが長い●途中で音声が切れてる(@tetsu_kobaさんによるとマイクのトラブルらしいです)●デバッガーは動かしてるけど、実際にデバッグはしてなさそう
  13. 13. 本日の発表 —  大貧民コース(PCとターゲットボードのみ)—  貧民コース(安価なJTAGボード:Flyswatter2を使用)—  大富豪コース(対象外) PARTNER-Jet買って下さい(^^;
  14. 14. PCとターゲットのみ ●ハードウエア構成 PCとターゲートボード(PandaBoard)をシリアルケーブルで  接続します。 シリアル ケーブル
  15. 15. PCとターゲットのみ ●ソフトウエア構成(概略) gdbを使ってデバッグします。ターゲットボードのカーネルにStub (gdbの通信相手)のkgdbを組み込みます。  gdbのFrontendとしてDDD(Data Display Debugger)を使います gdbの Frontend Kernel Stub DDD gdb kgdb
  16. 16. PCとターゲットのみ ●ソフトウエア構成(詳細) 先ほどの図ですと、gdbがシリアルケーブルを使うのでPCから  Consoleを使った操作や表示が出来なくなります。  そのため、間にagent-proxyを入れると両方とも有効に出来ます  詳細は以下のようになります target remote localhost:4441 Target DDD gdb agent-proxy Kernel Stub kgdb Console telnet localhost 4444
  17. 17. 環境構築の概要 ●カーネル側kgdb:Linuxカーネル2.2.26から統合されました。カーネルコンフィグで有効にすれば使えるようになります。(後述)●PC側gdb:Androidのprebuiltを使いますprebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gdbDDD(Data Display Debugger)Ver3.3.11 システム→システム管理→Synapticパッケージマネージャagent-proxy  $ git clone git://git.kernel.org/pub/scm/utils/kernel/kgdb/agent-proxy.git
  18. 18. kgdbの有効化 (1)環境変数設定export ANDROID_ROOT=$PWDexport ARCH=armexport CROSS_COMPILE=$ANDROID_ROOT/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-(2)カーネルソース取得$ mkdir kernel$ cd kernel/$ git clone https://android.googlesource.com/kernel/omap$ cd omap$ git checkout -b android-omap-panda-3.0 origin/android-omap-panda-3.0(3)コンフィグファイルの作成$ make panda_defconfig
  19. 19. kgdbの有効化 (4)kgdbを有効にする$ make menuconfigメニュー画面が表示されるので、「Kernel hackingの中に入る」Compile the kernel with debug infoを有効「KGDB: kernel degugger」を有効にしてサブメニューの「KGDB: user kgdbover the serial console (NEW)」を有効にする
  20. 20. kgdbの有効化 (5)カーネルのビルド$ make uImage modules -j8(6)カーネルをSDカードにコピー(7)ブートパラメータの追加ブートローダがカーネルに渡すカーネルパラメータにkgdbocを追加します。 kgdboc=[シリアルデバイスファイル],[ボーレート]という形式で指定します。 PandaBoardだと kgdboc=ttyO2,115200になります。
  21. 21. PC側の処理 (1)agent-proxyの起動$ agent-proxy 4440^4441 0 /dev/ttyUSB0,115200 &Agent Proxy 1.95 Started with: 4440^4441 0 /dev/ttyUSB0,115200Agent Proxy running. pid: 2641(2)コンソールの表示:TELNETでアクセスするとプロンプトが表示$ telnet localhost 4440Trying ::1...Trying 127.0.0.1...Connected to localhost.Escape character is ^].root@android:/ #(3)DDD起動$ ddd --debugger arm-eabi-gdbvmlinuxがあるディレクトリででDDDを起動します。 (4)デバッグイメージの読み込みDDDのGDB Consoleで(gdb) file vmlinux
  22. 22. PC側の処理 (4)ターゲットボードのkgdbへ接続DDDのGDB Consoleで(gdb) target remote localhost:4441※通常は(gdb) target remote /dev/ttyUSB0とコンソールを指定して接続しますが、agent-proxyが起動しているので上記のように接続します。ターゲットに接続すると自動的にターゲット側がkgdbモードに切り替わります。コンソール上にメッセージが表示されます。(5)デバッグ例printkにブレークポイントを張る (gdb) b printk(gdb) cでブレークポイントに止まります。 DDD上で変数の中を見たり、ステップ実行が出来ます
  23. 23. 安価なJTAGボードFlyswatter2 を使用 ●ハードウエア構成 PCとターゲートボード(PandaBoard)をシリアルケーブルと  JTAGで接続します。 リボンケーブル 14ピン USBケーブル Flyswatter2 シリアルケーブル
  24. 24. 実物 Flyswatter2 20ピンから14ピンへ変換JTAG接続:14ピン シリアル接続
  25. 25. 安価なJTAGボード: Flyswatter2を使用 ●ソフトウエア構成(詳細) 先ほどの図と似ています。agent-proxyの代わりにOpenOCD が間に入っています。 リボン target remote localhost:3333 ケーブル DDD gdb Target OpenOCD Flyswatter2 Kernel telnet client config telnet localhost 4444 シリアル ケーブル Console minicom /dev/ttyUSB0
  26. 26. 環境構築の概要 差分のみ示します●PC側OpenOCDTinCanToolsのサイトにビルド手順があります。それに従ってやれば構築出来ます。 詳細はブログを参照ください。 http://xiangcai.at.webry.info/201203/article_3.html補足OpenOCDはデーモンとして起動して特定のポートで接続を受け付けます。3333:gdb4444:telnetOpenOCD自体への操作はTelnetで接続してコマンドラインで行います。デバッガ:gdbからの操作をJTAGコマンドに変換してJTAGを通じてデバッグ操作を可能にします。Flyswatter2はシリアルの口を持っているので、minicomでttyUSB0などに接続すればAndroidのコンソールでの操作や表示が見れます。
  27. 27. デバッグ操作 実際のデバッグ操作です。詳細はブログに書いたのでそちらを参考にして下さいhttp://xiangcai.at.webry.info/201204/article_1.htmlここでは概略を説明します。(1)Flyswatter2とPandaboardの電源を入れます。(2)minicomを起動してコンソールを表示させます。(3)OpenOCDを起動します。 $ sudo ./openocd -f interface/flyswatter2.cfg -f board/ti_pandaboard.cfgOpenOCDを起動するにはJTAGとターゲットボードの情報記載したConfigファイルを指定する必要がありますが、Flyswatter2, Pandaboardは標準で対応しているのでOpenOCDのインストールディレクトリにあるものを指定します。起動ログを次ページに示します。最後にPolling succeeded againと表示されればOKです。
  28. 28. デバッグ操作 Open On-Chip Debugger 0.5.0 (2011-11-13-22:03)Licensed under GNU GPL v2For bug reports, readhttp://openocd.berlios.de/doc/doxygen/bugs.htmlInfo : only one transport option; autoselect jtag15000 kHzRCLK - adaptiveUsing dbgbase = 0x80000000force hard breakpointstrst_only separate trst_push_pullInfo : max TCK change to: 30000 kHzInfo : RCLK (adaptive clock speed)Info : JTAG tap: omap4430.jrc tap/device found: 0x3b95c02f (mfg: 0x017, part: 0xb95c,ver: 0x3)Info : JTAG tap: omap4430.dap enabledPolling target failed, GDB will be halted. Polling again in 100msPolling target failed, GDB will be halted. Polling again in 300msInfo : JTAG tap: omap4430.m30_dap enabledPolling target failed, GDB will be halted. Polling again in 700msInfo : JTAG tap: omap4430.m31_dap enabledInfo : omap4430.cpu: hardware has 6 breakpoints, 4 watchpointsInfo : omap4430.m30: hardware has 6 breakpoints, 4 watchpointsInfo : omap4430.m31: hardware has 6 breakpoints, 4 watchpointsPolling succeeded again
  29. 29. デバッグ操作 (4)TelnetでOpenOCDに接続します。コマンドプロンプト”>”で入力出来ます。 $ telnet localhost 4444Trying ::1...Trying 127.0.0.1...Connected to localhost.Escape character is ^].Open On-Chip Debugger>(5)Telnet上でコマンド「halt」を実行します。 > halttarget state: haltedtarget halted in ARM state due to debug-request, current mode: Supervisorcpsr: 0x200000d3 pc: 0xc00637f0MMU: enabled, D-Cache: enabled, I-Cache: enabled
  30. 30. デバッグ操作 (6)DDDの実行 $ ddd --debugger arm-eabi-gdbGDB Consoleでコマンドを実行 (gdb) file vmlinux(gdb) target remote localhost:3333→接続先はOpenOCDです。(7)デバッガでのブレークポイント設定(gdb) b sys_mkdirDDDの画面を次ページに示します。
  31. 31. デバッグ操作
  32. 32. デバッグ操作 (8)Telnet上でコマンド「resume」を実行します。 > resume(9)DDDのGDB Consoleで「c」を実行します。(10)コンソールで$ mkdir tmpを実行します。 (13)DDDのブレークポイントに止まります。 pathnameとして“tmp”が表示されています。→次のページ参照変数の内容を見たり、ステップ実行などが出来ます。
  33. 33. デバッグ操作
  34. 34. まとめ ※Kernelデバッグって大変そう※高価な機材が必要みたいなイメージがあるかと思いますが、比較的安価で気軽に出来ることが分かりました。デバッグ以外にも学習のために実際に動かしてブレークポイントを張ってステップ実行しながら、想定通りに動いていることが確認できるとカーネルへの理解が深まると思います。
  35. 35. 今後の予定 ★OpenOCD、JTAGの使い方に習熟する今は何となく使ってる感じなので★デバイスドライバー組み込んでデバッグまずはHello Worldレベルのものをカーネルに組み込んでデバッグ出来るか事前に調べた感じでは、ごにょごにょしないといけないらしい★Insight、Eclipseを使ったデバッグ今回はgdbのFrontendとしてDDDを使いました。GUIなデバッグ環境としてInsightというものがありますが、コンパイルでエラーになってまだ構築できていないので続きをまた、DDDもInsightも開発が止まっているっぽいので、Eclipse上で操作が出来ると良いかなと(こっちはこれから調べます)
  36. 36. 参考情報 ●電脳羊http://xiangcai.at.webry.info/201203/article_1.htmlhttp://xiangcai.at.webry.info/201203/article_2.htmlhttp://xiangcai.at.webry.info/201203/article_3.htmlhttp://xiangcai.at.webry.info/201203/article_4.htmlhttp://xiangcai.at.webry.info/201204/article_1.html●@IT MONOist実践しながら学ぶ Android USBガジェットの仕組み(1):http://monoist.atmarkit.co.jp/mn/articles/1107/22/news001.html●TinCanToolshttp://www.tincantools.com/wiki/Flyswatter2http://www.tincantools.com/wiki/Flyswatter2_Pandaboard_How_Tohttp://www.tincantools.com/wiki/GDB_Debugger
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×