ラベル ARM の投稿を表示しています。 すべての投稿を表示
ラベル ARM の投稿を表示しています。 すべての投稿を表示

2011年2月26日土曜日

qemuでデバッグするよ〜第1回 〜まずは環境を準備する〜

まったく開発の進まないLua-TRON・・・
なんでなんでしょうか(´・ω・`)ションボリ
きっと動かしてデバッグする環境がないからいけないんだ!!
とか思ったので今日はqemuを使って動作環境を立ち上げてみる。
tachama氏からbeagleboard借りてる状態であることはこの際考えないことにする。

と言っても、この前金の蔵もくもく会の時にmaster_q氏に教えてもらったことの復習。
ホスト環境はMacbook Air。もちろんMacOSXだ。
某探検隊のようにMac使ってるのにMacOSXじゃない人達とは一線を画している(´・ω・`)
いたってノーマルなマカーだ。
マカーがノーマルじゃないなんて批判は受け付けない。

まずはインストール
とりあえず、qemuをインストールする。
ソースはwiki.qemu.orgから取得する。
2011/02/26時点での最新は、0.14.0。
パッチは知らん。
ソースを入手したらおもむろに展開して configure & コンパイル。
おっと、configureするときはtargetの指定を忘れてはいけない。
じゃないとエラい時間をとられることになる。必要なターゲットだけコンパイルすればえ〜んだ。
自分が指定したのは、--target-list=arm-softmmu 。
これだけあったらいいんだぜ、まる。
本当はSDLオプションも付けたかったけど、何故か今回はうまくいかなかったからはずした。
次はmakeして、あとは何も起こらないことを祈るばかりだ。
インストールの項目だけどインストールは必要ない。
arm-softmmuというディレクトリに、qemu-system-arm というのができている。
これがARMエミュレーションをするqemuだどん。
こいつをそのまま叩けばqemuが起動する。

次はデバッグ用の環境準備。
必要なgdbはどこぞからパクってくるヨロシ(´・ω・`)
今回はtoolchain系は全部devkit様から拝借している。Lua-TRON開発環境に認定!!
devkitがあればDSソフトもPSPソフトも作れちゃう!!何度でも美味しい!!
devkitのサイトからリンクが辿れなかったのでsourceforgeから落とす。
とりあえずはdevkitARMがあれば無問題。
だが、片っ端から落とすのがあるべきWEB乞食の姿なので、理想を求めて全部落とす。
devkitのインストールは簡単、落として来たファイルを適当なディレクトリに展開してパスを通せばおしまい。
で、環境ができた。

さてデバッグ確認。
./qemu -S -gdb tcp::12345 -kernel targetimage

とかする。
-S は起動直後にqemuを停止させるオプション。・・・らしい。
-gdb tcb::12345 はgdbとの接続に使用するポートを12345にするというオプション。好きな数字を割り当てればおk。-Sオプションと組み合わせることで、gdbからの接続待ちで停止する。・・・らしい。
-kernel オプションは使用するターゲットバイナリの指定だ。ヘルプを見るとLinuxオプションみたいなこと書いてあるけど気にするな。俺はしない。とりあえずチャレンジすればいいんだ。ここで指定するのはどうやらelf形式のファイルのようだ。・・・ソース斜め読みした感じでは。

で、もう一つコンソールをひらいてこちらではgdbを実行する。
コマンドは以下。

./arm-eabi-gdb targetimage

ちゃんとdevkit様からツールチェインをとって来てパスを通していれば実行できるハズ。
gdbコンソールでは、

(gdb) target remote localhost:12345

ってやるとあ〜ら不思議!!
qemu上で動いているカーネルのデバッグができちゃうじゃ、あ〜りませんかぁ〜、あ〜りませんか!?

できない・・・だと(´・ω・`)
何故落ちるんだ、qemu。

という訳で次回につづく。

――――――――
今日や明日のことでは無く、もっと未来の方へ向かう。そう、明後日の方向へ!!

2011年2月16日水曜日

ARMv7アーキテクチャ リファレンス マニュアル読むよ〜第1回

前に呼んでて途中で投げたので、もう一回最初から読むよ(´・ω・`)
大事なところだけ、ここにメモっておく。
ページ番号は太字。

A2-11:
R0〜R12は自由に使える汎用レジスタ。32bit
R13〜R15は使用目的の決まっているレジスタ。32bit
R13はスタックポインタ用。別名SP。
R14はリンクレジスタ。別名LR。
R15はプログラムカウンタ。別名PC。
R15は、
ARMモードの時は実行している命令のアドレス+8
Thumbモードの時は実行している命令のアドレス+4
を指す。

A2-14:
APSRってレジスタがある。
アプリケーションプログラム ステータスレジスタらしい。
CPSRとは違うものなのか?何が違うんだ???
と思ったら同ページ最後3行に書いてあった。
”ARMv7A/RではAPSRとCPSRは同じレジスタ。でもアクセスできる情報がAPSRの方が少ない”とか。

A2-15:
実行状態レジスタ。
CPUが解釈する命令の種別を設定する。ARM命令、Thumb命令、ThumbEE命令、JAVAバイトコード。
曰く、”ARMv7A/RではCPSRレジスタの一部だぜ!!(キリッ”
ISETSTATE・・・なんなんだぜ
実行状態レジスタの設定のことみたいだけど・・・。

A2-17:
ITSTATE・・・スルー!!!
わからないと思ったところは飛ばしたっていいんだぜ。
逃げてもいいんだ、逃げてもいいんだ、逃げてもいいんだ。

A2-20:
ARMv7のVFP実装はVFPv3。
へー(棒

A2-21:
アドバンストSIMDとVFPは同じレジスタを使用する。
このレジスタは拡張機能レジスタと呼ぶ。
MMXがFPUのレジスタを使うようなもんか(´・ω・`)
ところでアドバンストSIMDって何・・・NEONのこと???

アドバンストSIMDビューでは拡張機能レジスタは、
16個の128bitレジスタまたは32個の64bitレジスタとして扱うことができる。
この2つのモードは同時に扱うことができる。

〜A2-67:
丸っとスルー!!!
だってSIMDとFPUの動作の説明だし。

A2-69:
Ahead-Of-Time(AOT)ってなんじゃらほい。

〜A2-80:
スルー!!!
JazelleとかThumbとかの説明だし。

A2-81:
ARMアーキテクチャでいう例外とは以下のものだ。
・リセット
・割込み
・メモリシステムアボート
・未定義命令
・スーパバイザコール(SVC)
浮動小数点例外とJazelle例外条件は含まれないよ。

A2-82:
Yield命令ってのがあって、マルチプロセッサとかマルチスレッド環境下では有効らしいよ。
今やってること重要じゃないんだよねーというヒンティングをCPUに対して行うものらしい。ふーん(´・ω・`)

第A2章まで超スピードでおしまい。

む〜ん、ARM自体の話があんまりでて来なかった(´・ω・`)

――――――――
今日や明日のことでは無く、もっと未来の方へ向かう。そう、明後日の方向へ!!