ロード トップ 参照元 逆検索 検索 ヘルプ

[logo] 組み込みTiki/の過去その2


SuzTiki:組み込みTiki

不定期にっき

PDAのコンテンツ 関係で、私的には、PDA の中で Tiki を動かしたい。

そうすると Ruby がないとダメということになる。Tiki を動かす前提で Ruby が必要とする リソースというのは何?

こういう構造 で、作る... というより 組みあげる。

     tiki httpd
  ------------------------
     ruby  [Thread]
  -----------------------
     ライブラリ(Minix)
  ------------------------ <<<<< VOS API
     Virtual OS [FileSystem]
  ------------------------ <<<<< Host OS API
       Host OS

という目的から

という発想になって、

ここまでが いままでの あらすじ。→ ./の過去その1

現在は、

まで作業が進んでいる。


スナップショット

( もし古いバージョンに興味がある人がいれば... 逆にパッチを当ててください。)


@ 002 の変更内容

次の課題は、ストリーミング に関する もの

    isatty / select / ioctl 

をどうするかということであった。

char 型デバイスを作り

   /dev/stdin         c 7 0
   /dev/stdout        c 7 1
   /dev/stderr        c 7 2
   /dev/fd/[0..31]     c 7 [0..31]

というファイルを作る。

これらは、HOST OS の プロセスとして動かしたとき fd と 一致するようにする。

そして、ちゃんとファイルシステムを通すようにする。

そうすると、ioctl / select は fd の変換なしで 行える。

isatty については、0 から 2 まで は、tty それ以外は、not tty と 規定する。

このシステム 0 から 2 までは、stdin/stdout/stderr だが、 このシステムにおいては、それは console という位置付け。


@ 003の変更内容

  • ということで 上記について改造した。

    なんでこんなに面倒なことやっているかというと、name space の問題が あって、HOST OS の read/write のシンボル使うには、 違う .c の 関数に一回飛ばさないといけない。で、stread_read とか では、逆に u.u_base とかが見えないから、v7fs の関数のお世話になる。 read/write はとりあえず、iomove ってのがあったから これをちょっと改造して 使っている。

    ioctl の方はエントリだけ追加。ioctl の場合は、cmd みないと read/write かも わからないから頭がいたい。

    このベースができたので、fcntl/select/isatty を いれてみる。


    次の課題は、どうやって socket を open/close するか。 send/recv は、read/write として、HOST OS にスルーする。

    ここで、ext/socket のライブラリを見る。

       accept, bind listen send sendto shutdown socket socketpair
    
       getaddrinfo, gethostbyaddr, gethostname, getnameinfo,getperrname
       getservbyname, getsockname, getsockopt
    
       setsockopt 
    

    結構たくさんあるじゃないか ... そして どこからどこまでがライブラリで どこからどこまで、システムコールだろう?

    全部サポートすべきかどうか とか いろいろ調べないと。

    ---

    Omicron:RubyVM をみると、Ruby にバイトコードを実装しようという 動きがあるらしい。

    ---

    残問題

    だいぶ減った。


    @ 004の変更内容

    とにかくなんか 動いたといえる 最初のバージョンになった。

    整理しきれていないが

    ToDO:


    うち(RedHat7.2)では動きました。libはパッケージに入ってないのでrubyの方からとってきます。
    esehttpd 使うとforkなしでrubyできそうなんですがどうなんだろ。。あ、pollがいるから×か。。 Tiki に限らずおもしろいことに使えそうだけど。。


    @ 005 変更点


    @ 005a 変更点


    ところで、どうやって スクリプトを動かすのだ ? とか思っていたんだけども。 ファイル名を指定すれば、それに対応した rootfs のファイルシステム から読んで来て動くのか。...

    ようやくruby を動かしてみる。

    気を良くして

    まず、引っかかったのは、require "socket"

    で、socket やら select やら signal やらで 引っかかる。

    デバッグメッセージやらいれて ようやく accept してくれるところまで来た。

    DEBUG_SOCK:select end ret = -1(4)
    DEBUG_SOCK: fd_conv (6:3)
    DEBUG_SOCK:select start n = (7:4) to = -1
    DEBUG_SOCK:select end ret = 1(4)
    DEBUG_SOCK:accept => (7:5)(err 0)
    accept done 5
    socket 0.0.0.0 port 8888 accepted, thread #<Thread:0x2abcca0c>
    rb_thread_wait_fd 2147473288 
    DEBUG_SOCK: fd_conv (6:3)
    DEBUG_SOCK:select start n = (7:4) to = -1
    DEBUG_SOCK:timer_set => 10
    

    いまの問題は、read しようとしている socket (fd = 5) が rb_thread_wait_fd にわたったときは、2147473288 という数字に なってしまっていること。

    なにがどうなって、こうrなっちゃうのか .... ひょっとして Floating ?


    @ 005b 変更点


    @ 005c 変更点



    @ 006 変更点


    @ 006a 変更点

    wwwsrv を動かしてみたが動かないので デバッグ


    @ 006b 変更点

    使いかた

    ToDO


    @ 006c 変更点


    @ 007 変更点


    @ 007a 変更点


    (最終更新 Thu Mar 30 19:07:08 2006)