Your SlideShare is downloading. ×
PF部第19回資料 poor man's JTAG
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

2,447

Published on

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

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,447
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
21
Comments
1
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. poor man’s JTAG 2012年4月1日 第19回PF部勉強会
  • 2. 本日の発表内容 ★自己紹介★お金をあまり掛けずにAndroid Kernelのデバッグ •PCとターゲットボードだけ •安価なJTAGボードを使って
  • 3. 自己紹介 ★東の羊★twitter @pakuqi★Blog 電脳羊(http://xiangcai.at.webry.info/)→Androidが動作するボードの話題が多いです。BeagleBoard, BeagleBoard xM, PandaBoard, Snowball★2011年4月からAndroid関連の部署に異動して1年経ちました
  • 4. 今回の発表のきっかけ PF部の第3回勉強会、通称Init祭りで@tetsu_kobaさんによる「自社製品デバッガーの説明」がありました。Initで止めて処理を追っかけたりhttp://www.yokohama.android-pf.org/study/20101204いいなーと思いながら、お約束の「でも、お高いんでしょ?」@tetsu_kobaさんも個人で買うもんじゃないので会社で買ってもらって下さいorz
  • 5. その後 Pandaboardに関する調べものをしてた時に、以下の動画を偶然見つけました。http://www.youtube.com/watch?v=8wK9q3XqnFYHowto: BeagleBoard and PandaBoard with the TinCanToolsFlyswatter (OpenOCD) JTAG Debugger
  • 6. TinCanTools Flyswatter http://www.tincantools.com/
  • 7. オーダー オーダーはTinCanToolsのサイトから行います。Registerから必要情報を入力して登録してからクレジットカードで支払います。
  • 8. 実際のオーダー 下にあるようにFlyswatter2本体(SKU600)が$89、JTAGの20ピンから14ピンへの変換(SKU620)が$22、送料が$31.90送料は3つから選べて2番目に早いの(PriorityMail)にしました。1週間くらいで届きました。
  • 9. 安いだけじゃない オプションの変換コネクタとケーブル 必要だけど最初からBeagleBoardに 対応してる!!
  • 10. OpenOCDも対応 OpenOCD(後で説明します)も BeagleBoard BeagleBoard-xM PandaBoard 対応!!
  • 11. Linaro Connect Q4.11 Linaro Connect Q4.11でTinCan Toolsの中の人がデモしてるの発見!!http://www.youtube.com/watch?v=FhMhH5kEcGw
  • 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. 本日の発表 —  大貧民コース(PCとターゲットボードのみ)—  貧民コース(安価なJTAGボード:Flyswatter2を使用)—  大富豪コース(対象外) PARTNER-Jet買って下さい(^^;
  • 14. PCとターゲットのみ ●ハードウエア構成 PCとターゲートボード(PandaBoard)をシリアルケーブルで  接続します。 シリアル ケーブル
  • 15. PCとターゲットのみ ●ソフトウエア構成(概略) gdbを使ってデバッグします。ターゲットボードのカーネルにStub (gdbの通信相手)のkgdbを組み込みます。  gdbのFrontendとしてDDD(Data Display Debugger)を使います gdbの Frontend Kernel Stub DDD gdb kgdb
  • 16. PCとターゲットのみ ●ソフトウエア構成(詳細) 先ほどの図ですと、gdbがシリアルケーブルを使うのでPCから  Consoleを使った操作や表示が出来なくなります。  そのため、間にagent-proxyを入れると両方とも有効に出来ます  詳細は以下のようになります target remote localhost:4441 Target DDD gdb agent-proxy Kernel Stub kgdb Console telnet localhost 4444
  • 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. 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. kgdbの有効化 (4)kgdbを有効にする$ make menuconfigメニュー画面が表示されるので、「Kernel hackingの中に入る」Compile the kernel with debug infoを有効「KGDB: kernel degugger」を有効にしてサブメニューの「KGDB: user kgdbover the serial console (NEW)」を有効にする
  • 20. kgdbの有効化 (5)カーネルのビルド$ make uImage modules -j8(6)カーネルをSDカードにコピー(7)ブートパラメータの追加ブートローダがカーネルに渡すカーネルパラメータにkgdbocを追加します。 kgdboc=[シリアルデバイスファイル],[ボーレート]という形式で指定します。 PandaBoardだと kgdboc=ttyO2,115200になります。
  • 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. 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. 安価なJTAGボードFlyswatter2 を使用 ●ハードウエア構成 PCとターゲートボード(PandaBoard)をシリアルケーブルと  JTAGで接続します。 リボンケーブル 14ピン USBケーブル Flyswatter2 シリアルケーブル
  • 24. 実物 Flyswatter2 20ピンから14ピンへ変換JTAG接続:14ピン シリアル接続
  • 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. 環境構築の概要 差分のみ示します●PC側OpenOCDTinCanToolsのサイトにビルド手順があります。それに従ってやれば構築出来ます。 詳細はブログを参照ください。 http://xiangcai.at.webry.info/201203/article_3.html補足OpenOCDはデーモンとして起動して特定のポートで接続を受け付けます。3333:gdb4444:telnetOpenOCD自体への操作はTelnetで接続してコマンドラインで行います。デバッガ:gdbからの操作をJTAGコマンドに変換してJTAGを通じてデバッグ操作を可能にします。Flyswatter2はシリアルの口を持っているので、minicomでttyUSB0などに接続すればAndroidのコンソールでの操作や表示が見れます。
  • 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. デバッグ操作 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. デバッグ操作 (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. デバッグ操作 (6)DDDの実行 $ ddd --debugger arm-eabi-gdbGDB Consoleでコマンドを実行 (gdb) file vmlinux(gdb) target remote localhost:3333→接続先はOpenOCDです。(7)デバッガでのブレークポイント設定(gdb) b sys_mkdirDDDの画面を次ページに示します。
  • 31. デバッグ操作
  • 32. デバッグ操作 (8)Telnet上でコマンド「resume」を実行します。 > resume(9)DDDのGDB Consoleで「c」を実行します。(10)コンソールで$ mkdir tmpを実行します。 (13)DDDのブレークポイントに止まります。 pathnameとして“tmp”が表示されています。→次のページ参照変数の内容を見たり、ステップ実行などが出来ます。
  • 33. デバッグ操作
  • 34. まとめ ※Kernelデバッグって大変そう※高価な機材が必要みたいなイメージがあるかと思いますが、比較的安価で気軽に出来ることが分かりました。デバッグ以外にも学習のために実際に動かしてブレークポイントを張ってステップ実行しながら、想定通りに動いていることが確認できるとカーネルへの理解が深まると思います。
  • 35. 今後の予定 ★OpenOCD、JTAGの使い方に習熟する今は何となく使ってる感じなので★デバイスドライバー組み込んでデバッグまずはHello Worldレベルのものをカーネルに組み込んでデバッグ出来るか事前に調べた感じでは、ごにょごにょしないといけないらしい★Insight、Eclipseを使ったデバッグ今回はgdbのFrontendとしてDDDを使いました。GUIなデバッグ環境としてInsightというものがありますが、コンパイルでエラーになってまだ構築できていないので続きをまた、DDDもInsightも開発が止まっているっぽいので、Eclipse上で操作が出来ると良いかなと(こっちはこれから調べます)
  • 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

×