この頃からデバッガxmdを本格的に使い始めますので、メモリやレジスタのダンプが出来るようになってきます。逆になっているではないか!。endianになるとのこと。これでは動くわけ有りません。AXIはarmのバスなんだって。IPコアの汎用性を持たせるために、組み込み市場を席巻しているarmに近づいたんだろう。そのうちディスコンになって、armにリプレースされると思う。FPGAベンダーが独自のcpuを出しても、周辺IPやサポートを考えると商売にならないよね。kernel2.6からlittleサポートしているらしいのですが、まともに動かないという情報もあります。AXIをやめてPLBで設計しなおすことにします。いうことでprojectを作り直し。デフォルト達にあわせる。あるので、一意なアドレス空間を割り当ててくれます。もって行けば良いはずですが、なかなか動きません。そのほうが早く幸せになれます。アドレスをハードコードしたりしてます。■さて、このあたりまで来ると、バナーが表示できるくらいになります。loop...おそらくここで止まって悩むんじゃないかと思います。これはタイマー割り込みが入っていないことが原因です。いった場合、CPUが何処で止まっているか探らないといけません。先のうんともすんとも言わない場合もです。stopでcpuを止めます。pcを見て実行中のアドレスを読み取ります。linuxカーネルを逆アセンブルしたものを容易します。linuxmmuを使っていないので、全部物理アドレスでわかりやすい!。onにしたら混乱したもんなぁ。これで止まっているアドレスが何処かわかります。アセンブラとCソースの対比は勉強がてらやってください。有る程度アセンブラが見られないと、先へ進めなくなりますよ。タイマー割り込みのチェックポイントは次のとおりです。CPU・タイマーは0番の割り込みであること。(最優先)・intc->CPUにちゃんと接続されて、割り込み極性、レベル・エッジがあっていること。この当りがNGだったみたいです。(後からではもうどうNGだったか特定できませんが)intc入力の割り込み極性、レベル・エッジ設定はxpsで変更できないみたいなので、そのままとしました。割り込みの入力ポートはXPSでは2のまま変更できません。etherの3つは必要なので、mhsファイルを手修正しました。固定されているということは2のままでも良いのかもしれません。filesystemマウント不可能のpanicにに出会うと思います。ここまで来たらカーネルはほぼOKです。ユーザランドとそれの適切なドライバの組み込みがあれば起動します。login:■root/rootでログイン広大な..というわけでなく箱庭のようなuCユーザランドが広がっています。ここまでくるとlinuxとして動いているし、コマンドも打てるので満足感が出てきます。いじっていたら、ここらで一杯いきたくなるでしょう。残念ながらまだネットワークは動きません。driverで止まります。転送完了ビットが落ちないためですが、理由はよくわかりません。clockが供給されていないと推測してます。シリアルのレジスタにデバッガで値を書き込むとちゃんとコンソールに文字が出てきます。ことからも簡単に周辺部品のデバッグが出来ます。!SDKでオンボードペリフェラルのテストを作った際のソース類を持ってきて、ちょっとmodしたところ動きました。PHYが絡んでいるようです。突拍子なく止まったことがあるので、まだどこかおかしいかもしれません。(2011.11.30)どうやら、割り込みハンドラの中でdev_kfree_skb()すると固まることがわかりました。dev_kfree_skv_irq()はおそらくIRQセーフなので、これを使えば良いのでしょうか、それに気づく前に割り込み外でdev_kfree_skb()するように変更しました。このほうがロック頻度が低くて高効率なはずです。本来、割り込みハンドラは少しでも早くリターンしたいはずなので。PC->このボードへの転送はめちゃくちゃ遅くて20kB/sくらい。逆は500kB/sくらいあります。ドライバ内でのむだ時間では無いようです。安定して動いているので、速度の問題には追及しないことにします。した直後はパケット受信できないようです。ボード側からpingを打つなり、一度でも送信すると、以後は正常に動作します。理由は不明なのですが、ダミーの送信を入れさえすれば最初から受信することがわかりましたので、ドライバのopen時、割り込み有効にした後で0バイトの送信を入れています。これでifconfigした直後から受信に反応します。(2012.04.19)受信が遅いのは、データ取りこぼし→再送が発生しているのが一因。window制御でどどーっと流れてきたフレームを取りこぼしてしまう。それで再送が頻繁に起きている。liteの設定でPingPong=1にするとダブルフレームになって改善出来るのだろうけど、規模的に難しい。それだけでは説明がつかない遅さなんだけど。■ブートローダ/SPIフラッシュこれもSuzaku用のBBootをそのまま使わせてもらいました。今回はオンボードJTAG接続でflashに書き込めることから、高機能ローダーのHermitは省き、BBootから直接linuxを起動しています。linuxが起動すると、割り込みベクタなどがBRAM領域にコピーされるため、何もケアしないとBBootが上書きされ壊れます。resetで再起動できなくなるため、0x08〜0x7Fを空けています。このボードのFlashはQuad-SPI(正しい表現か不明)で従来よりバス幅を広げて高速化したものがついています。Spartanがコンフィグするときはこのモードのようです。一瞬でコンフィグされます。IPはこれに対応していないので、通常の2線式です。余ったピンはHレベルにする必要があります。PartitionはSuzakuと同じにして、残り8Mbをjffs2用として残しましました。NORなので、こういう使い方をしていいのかわかりませんが。SPIのlinux側のドライバはSuzakuにパッチしてます。FlashのデータシートはMicronとNDA契約しないと落とせないみたいです。チップID(0x20BA18)は現物あわせです。■GPIOドライバSuzakuのものを使わせてもらいました。すし、よくわからない(misc何とかに包含されている)ので素直にできているSuzakuドライバを使いました。作動中にLEDをパカパカするアプリ(/bin/blink_led)を作ってユーザランドに入れています。Flashへの書き込みはIMPACTよりsfutil(Digilentより落っことしてくる)のほうが圧倒的に早いです。IMPACTだとだいたい45分くらいかかるのに対して、sfutilだと3分くらいです。IMPACTはmcsを作るだけにとどめて、書き込みはsfutilを使うべきでしょう。BRAMへBBootを入れるのには、data2memを使います。これでBBoot入りのbitファイルを作り、linuxイメージとともにIMPACTでmcsファイルにします。data2memはイセに入っています。output.bitボードの消費電流は実測150〜160mA(5V)でした。以上でこのボードでのlinux搭載は完了です。作りたいものの開発はこれからやっていきます。作成途中なので完全ではありません。SDKのサンプルから持ってきたxemacliteドライバの差分です。自分でいじっている部分は遙かに少ないです。Status[戻る]。