(toppers-users 2325) Re: ARMでのTINETについて (Was: Re: TINETのWindows上でのシミュレートについて)

ABE Tsukasa abe @ jo.tomakomai-ct.ac.jp
2006年 2月 27日 (月) 08:35:15 JST


大野様

苫小牧高専、情報工学科の阿部です。
今後ともよろしくお願いいたします。
以下の件、次のリリースに反映させていただきます。

>ARM7 (Optimize)で TINET 1.3をIPV4で動かしたことがあるので、
>簡単に報告させていただきます。NICとしてはH8と同じ入手が容易な
>RTL8019を8ビットモードで使いました。以下のような修正が必要でしたが、
>比較的すんなり動きました。
>
>o TINETではイーサネットのフレームとIPパケットとを
> 連続したメモリ内に配置したまま、処理しようとする。
> しかし、イーサのヘッダは14バイトであるため
> IPパケットのsrc と dst が4バイト境界に載らなくなる。
> その結果 ARMでは正しく unsigned longの値として
> 処理できない。
>
> --> tinet_nic_defs.h にて
>
>       #define IF_ETHER_NIC_HDR_ALIGN 2
>
>       とすることで、4バイト境界にIPアドレスが載るように調整。
>
> --> 上記、変更の結果 NICの送受信するフレームの開始アドレスが
>   2バイトずれてしまうので、if_ed.c の ed_get_frame() ならびに
>   ed_stat() にてバッファのアドレスを再調整。

これについては、こちらで対応できるようですので、検討してみます。

>o Ethernetの割り込みをクリアするシステム依存部の新設
>   if_ed.c の if_ed_handler() の最後で 新設した ed_clear_inter()
>   を呼び出すようにした。

ARM は、使用したことがありませんので、よく分かっていないのですが、
if_ed_handler() の中で、NIC の割り込みはクリアしています。
これは、ARM 側の対応ということでしょうか?
いずれにしても、ed_clear_inter() を、新設しても良いような気がします。

>o TCP_CFG_NON_BLOCKING を使わない場合に、
> tcp_cls_cep() で例外が発生する。
>
> --> tcp_user_closed()の結果が NULLであった場合にも
>       ヌルポインタとなった cep を使ってしまうため。
>       return error; の行を追加。

これは、TINET の問題ですね。修正します。

>o put_ipv4addr() でアドレスが正しく表示されない
>
>  --> TINET 1.2.xでは LITTLE ENDIANの場合の処理が間違っていましたが、
>      TINET 1.3では修正されていました。
>
>ここまでの作業で nserv のwwws が動きました。UDPの動作確認と
>ethernetドライバの16ビット化をしてみるつもりでしたが、
>誤ってCPUを壊してしまい、作業休止状態です。
>
>#ユニバーサル基板に手ハンダで組んだ趣味の電子工作のため、
>#再挑戦するなら、すべて組み直すことも検討中です。
>
>tinet.pdf によるとドキュメントとして tinet_ether.pdfが
>存在することになっていますが、配布には含まれていないようです。

確認不足でした。次のリリースに含めます。

>しかしながら、ちょうどトランジスタ技術でRTLの解説記事が出ていますので、
>ドライバの動作は簡単に理解できると思います。
>
>DWMに付録基板がついたこともあり(わたしも2冊買いましたが。。)、
>同様の挑戦をする方もいらっしゃるだろうと思います。
>参考になれば幸いです。
>

私も、DWM を入手してみようと思っています。
それでは、よろしくお願いいたします。

--
.\" 苫小牧工業高等専門学校 情報工学科 教授 阿部 司
.\" E-mail: abe @ jo.tomakomai-ct.ac.jp  TEL/FAX: 0144-67-8937