Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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

3,010 views

Published on

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

  • poor man's て表現はときどき見かけるが、いつもどう訳せばよいのかよくわからない。お手軽とかでいいのかな
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

×