2009年07月09日

JTAG-ICE デバッガの感動

KMC に入社して、初めて JTAG-ICE デバッガを触った時は感動しました。(と言っても、わずか半年ほど前なのですが。)

それまで私は PC の世界しか知らなかったので、いきなり CPU (たしか、たまたま社長の手元にあった MIPS ボード ?) が剥き出しの基板を渡されても、「これで一体何をどうすれば良いのだろうか…」と戸惑ってしまいました。

PC の上でプログラムを書いていた時、いかに自分が分厚く抽象化された世界の上で生きていたのかということを実感させられます。シェルはもちろん、OS も何も無い世界。当然ディスプレイもマウスもキーボードも、つながるインタフェースすらありませんし、唯一存在している NIC も、ドライバが無いのでそんなに簡単には動かせません。はてさてどうしたものか。

すると社長が慣れた手つきで、ささっと JTAG コネクタにケーブルを指して、JET と PC をつないでデバッガを起動してくれました。PARTNER デバッガは ELF を理解するので、GCC などのクロスコンパイラが生成した実行ファイルをそのままロードできるのですが、これだけでも驚きました。そしてそのままステップ実行できる。全てのメモリが見える。レジスタの値も何もかも自由に変えられる。すごいと思いました。

次に感動したのは、シリアルコンソールがつながった時でした。もちろんシリアルコンソールなんて使ったのは初めてでした。最終的には、最も素朴なメモリマップト I/O を叩くわけで、printf とかも最終的にはこういう風なところに落ちるんだなぁと、もちろんそれまで知識は多少あったわけですが、やはり実際に経験してみたことにより、ふっと腑に落ちてつながる感覚がありました。

プログラミングの入門書の一番最初の例題である printf が出るまでには、シェルが動いてローダが動いて OS が動いてドライバが動いて… 数え切れない抽象化層を経由して、GUI が作り出した仮想のコンソールの上に文字が出るわけです。

そういう抽象化層を全て取っ払った世界にいきなり入ることが出来る。やはり JTAG-ICE デバッガの感動は、実際に味わってみるのが一番ではないかと思います。組み込み業界の社会人だけではなく、むしろ学生さんにこそデバッガ使って欲しいなと思ったりもします。CPU を身近に感じられ、教育用にも最高なのではないかと思います。

この直接 CPU を操作できるという JTAG-ICE デバッガのメリットは、開発や教育だけでは無く、実は意外なことに、CPU シミュレータ作成においても大変魅力的だと私は個人的に思っています。

CPU のシミュレータだけ作っても、基本的には何もできません。I/O メモリを実装して、割り込みが動くようにして、シリアルコントローラや NIC などの仮想ハードウェアエミュレーションを実装して、プログラムをロードするしくみを作って… 実際に、QEMU などのエミュレータでは、自前の ELF ローダや、I/O デバイスや UI という、ある意味では非本質的な部分に非常に多くの労力が割かれています。

デバッガがあれば、CPU とデバッガをつなぐ部分 (デバッガにレジスタやメモリの値を渡す通信のしくみ。簡略化された JTAG インタファースを、ソフトウェア的に実装するようなイメージ) さえ実装すれば、あとは PARTNER デバッガソフトウェアの汎用的なしくみをそのまままるごと利用することができます。ローダなどの再実装は不要で、いきなり ELF をシミュレータのメモリにロードして実行することができます。OS もシェルも何も動いていなくても、PARTNER のマクロ機能を使えば、様々なテストが自動化可能です。

私は今、PARTNER に直接つながるシミュレータを研究開発しているわけですが、自分で書いた(と言っても、基本部分を社長が既に実装したものを引きついだのですが) ARM シミュレータに PARTNER がつながって、実機と同様に動いてデバッグできるというのは、ものすごく楽しくてうれしいものです。このシミュレータの上で、これまた自分で移植した Linux が動いた時が、第三の感動でした。

トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード