2007-01-26

Solaris用のW-ZERO3ドライバ4

前回の続き。

pingが通った!
予想通り、RNDISヘッダがおかしかったのが原因。orz...

W-ZERO3からDHCPでアドレスをもらうのもばっちりできた。W-ZERO3側はDHCPサーバとして168.254.2.1というアドレスを持っていて、Solaris側には168.254.2.2を振ってくる。
PDA'ごとき'にアドレスを振ってもらうというのも妙な気がするけど、考えてみるとこれはこれで合理的なのかも。

まだいろいろ細かいところがおかしくて、snoop中にunplumbするとパニックしたり、ケーブルをいきなり抜くとドライバがdetachする時にパニックしたり。synceもまだ動いてない。

以下dmesg。ドライバ名がwzsunなので、wzsun0というデバイス名になってる(なぜwzsunかというと、W-ZERO3だから…ww)

Jan 26 01:47:42 etta unix: Port4: USB descriptor tree for SHARP CORPORATION SHARP WS004SH ActiveSync Remote NDIS Driver
Jan 26 01:47:42 etta unix: Port4: highest configuration found=0
Jan 26 01:47:42 etta unix: Port4: Configuration #0 (Addr= 0xd601a2e8)
Jan 26 01:47:42 etta unix: Port4: String descr=
Jan 26 01:47:42 etta unix: Port4: config descr: len=9 tp=2 totLen=62 numIf=2 cfgVal=1 att=0xc0 pwr=50
Jan 26 01:47:42 etta unix: Port4: usb_cfg_data_t shows max if=1 and 0 cv descr(s).
Jan 26 01:47:42 etta unix: Port4: interface #0 (0xd5a3ed20)
Jan 26 01:47:42 etta unix: Port4: Alt #0 (0xd57f8fb0)
Jan 26 01:47:42 etta unix: Port4: String descr=
Jan 26 01:47:42 etta unix: Port4: if descr: len=9 type=4 if=0 alt=0 n_ept=1 cls=239 sub=1 proto=1
Jan 26 01:47:42 etta unix: Port4: usb_alt_if_data_t shows max ep=0 and 3 cv descr(s).
Jan 26 01:47:42 etta unix: Port4: endpoint[0], epaddr=0x81 (0xd5a3ed00)
Jan 26 01:47:42 etta unix: Port4: len=7 type=5 attr=0x3 pktsize=8 interval=1
Jan 26 01:47:42 etta unix: Port4: alt cv descriptor #0 (0xd606e1d0), size=5
Jan 26 01:47:42 etta unix: Port4: 5 24 1 0 1
Jan 26 01:47:42 etta unix: Port4: alt cv descriptor #1 (0xd606e1d8), size=4
Jan 26 01:47:42 etta unix: Port4: 4 24 2 0
Jan 26 01:47:42 etta unix: Port4: alt cv descriptor #2 (0xd606e1e0), size=5
Jan 26 01:47:42 etta unix: Port4: 5 24 2 0 1
Jan 26 01:47:42 etta unix: Port4: interface #1 (0xd5a3ed28)
Jan 26 01:47:42 etta unix: Port4: Alt #0 (0xd601a1a8)
Jan 26 01:47:42 etta unix: Port4: String descr=
Jan 26 01:47:42 etta unix: Port4: if descr: len=9 type=4 if=1 alt=0 n_ept=2 cls=10 sub=0 proto=0
Jan 26 01:47:42 etta unix: Port4: usb_alt_if_data_t shows max ep=1 and 0 cv descr(s).
Jan 26 01:47:42 etta unix: Port4: endpoint[0], epaddr=0x82 (0xd5f7b6e0)
Jan 26 01:47:42 etta unix: Port4: len=7 type=5 attr=0x2 pktsize=64 interval=0
Jan 26 01:47:42 etta unix: Port4: endpoint[1], epaddr=0x3 (0xd5f7b6f0)
Jan 26 01:47:42 etta unix: Port4: len=7 type=5 attr=0x2 pktsize=64 interval=0
Jan 26 01:47:42 etta unix: Port4: Returning dev_curr_cfg:0xd601a2e8, dev_curr_if:0
Jan 26 01:47:42 etta unix: wzsun0: wzsun: type "ether" mac address 80:00:60:0f:e8:00
Jan 26 01:47:42 etta unix: USB 2.0 interface (usbif4dd,9103.config1.0) operating at full speed (USB 1.x) on USB 1.10 external hub: interface@0, wzsun0 at bus address 4
Jan 26 01:47:42 etta unix: SHARP CORPORATION WS004SH ActiveSync Remote NDIS Driver
Jan 26 01:47:42 etta unix: wzsun0 is /pci@0,0/pci1106,aa03@11,2/hub@1/device@2/interface@0
Jan 26 01:47:42 etta unix: /pci@0,0/pci1106,aa03@11,2/hub@1/device@2/interface@0 (wzsun0) online

2007-01-23

ゲームパッド

1コンティニューくらいでEasyの5面にいけるくらいにはなりますた。

弱っ orz...

ここまで弱いのはきっとパッドが悪いということに(脳内)決定。
実際、500円程度の安物のパッドなので、方向も定まりづらかったし、
アソビがありすぎて反応が遅すぎという問題もあった。
それでさっそく調べてみると、PS2のコントローラをUSBに変換するコンバータが
1500円位であるらしいので、ウィッシュリストに追加。

や、普通のパッドを買ってもよかったのだけど、
いままでのものとあわせて2つもあるのはなんかやだなあと。

Solaris用のW-ZERO3ドライバ3

前回の続き。

バッファの二重開放バグを修正。だけど、まだICMP ECHO REPLYが帰ってこない orz...

snoopコマンドの出力を見ると、W-ZERO3からは確かにパケットを受信しているし、DLPI的には送信もしている。
となると、ドライバで送信できていないということになるかな…

STREAMSのmsgb(message block?)構造体が分散しているのが
USBドライバに蹴られているのかと思い、単一データブロックにしてみたけど効果なし。
Bulk-OUTじゃないパイプに送っているのかと思ったけど、
返り値を信じる限りエラーは検知していない。
最後になって、RNDISヘッダに入れている値がおかしいっぽいのを発見したけど、
これの対応は時間切れ。

ところで、LinuxのskbってSysVのSTREAMSに対応するという認識でいいのかなあ?
どちらもデータのコピーを押さえたままヘッダ/トレイラを処理するためのものなので。
もちろん前者はネット関係しか使われていないのに対し、
後者はread()/write()はもちろんのこと、ioctl()にさえ対応できる無駄に凝った
たくさんの機能を持つという違いはあるけど。

mmap(2)された領域へのDMA2

前回の続き。前回は
  • DMA objectとなるのはbuf(9S)かumem_cookieで示される領域。
  • memory mappingの対象となるのは、device memoryかumem_cookieで示される領域。

なので、どちらの性質も持たせるならumemを使うしかなかったが、
umemを偽造するのはDDI/DKIに違反しているし、
そもそも安全でないという問題もついてまわるという話を書いた。

これに対して、検討中の方式は以下の通り
バッファを要求されたら、カーネル空間内でumemを割り当て、それに対するuioを作成。uioは簡単な構造体で、umemに比べるとたやすく偽造できる。

umemはユーザ空間にエクスポート(user mapping)できるので、mmap(2)されたら(少なくともDMAが行なわれていない間は)アクセス可能なようにできる。

DMA開始時は以下のことをする。
  1. uioに対応したbuf(ここでのbufはSTREAMSのbuf構造体のこと)を作成し、physio(9f)に渡す。
  2. physio(9f)はbuf.b_un.b_addrにロックダウンされたメモリのアドレスを入れる
  3. physio(9f)はライブラリのmlb_strategy()を呼んでbufを渡す
  4. mbl_strategy()はdevmap_unload()を呼んでuser mappingを無効化
  5. mbl_strategy()はddi_dma_buf_bind_handleを呼び、DMA転送の準備
  6. mbl_strategy()はクライアントドライバのstrategy(9e)を呼び、DMA転送を開始
  7. physio(9f)はbiowait()を実行、待ち状態になる

DMA転送終了の割り込みが入ったら、
bufに対してbiodone()またはbioerror()を呼んでやればよい。
これにより、physio(9f)はbiowait()からリターンし、physio()自身もリターンする。

どんなものかなあ。
physio()を呼ぶのでブロッキング動作になってしまうのがちょっとイヤかも。

2007-01-12

mmap(2)した領域へのDMA

bt848xドライバではmmap(2)した領域へDMAを行なっているけど、じつはこれは相当に危ないシロモノである。

この方式は

  • ddi_dma_mem_alloc()でDMAオブジェクト(=DMAバッファ)を取得
  • DMAオブジェクトからumem_cookie(=mmap用のデータ構造)を偽造
  • umem_cookieをddi_devmap_umem_setupにてユーザ空間にエクスポート

というもので、2つの危険性がある。

まず1つめはumem_cookieを自前ででっち上げている点で、現状ではひとまず問題はないっぽいけど、カーネルのバージョンが上がったらいつダメになるかわからない危うさがある。
2つめがDMA転送中にユーザによるメモリアクセスが発生することを阻止できない点で、DMA転送によって生じたパリティ不整合を検知してしまう可能性がある。もし検知した場合はまず間違いなく訂正不能なパリティエラーになり、カーネルが落ちることになる。

じゃあ、こんなややこしくてあぶないことは最初からしなければいいじゃんというのはもっともな話なのだけど、DMA転送の対象となる領域は、ユーザ空間にエクスポートできる領域とは個別に管理されており、実は両者の性能を備えた領域を確保することは不可能だったりする。DMAはDMAオブジェクトとして申請した領域か、デバイスのレジスタ領域だけでしかできず、一方ユーザ空間へのエクスポートはumem_cookieを使うしか手段がない。
なので、従来はmmap(2)した領域へのDMAは無理というのが定説だったはずで、それを無茶を承知でごまかしたのがbt848xドライバ、無茶が通らなくなったのがcaptorsドライバというわけだ。

なので、多少複雑になるのはあきらめて、新しい安全なDMA転送方法を検討中。詳細は次回。

新しいお仕事

機種Tの仕事は3月までに引き継ぎを終えることになっていて、それまではゆっくり過ごせると思っていたのだけど…
機種Wがちょっとまずい状況になっていて、1月からモジュールの手伝いにいくことに。また、人を取られてしまったのでさらに最近になってモジュール間I/Fの検討もやらされることになった。理不尽だ…

昇格審査

会社で昇格の話があって、小論文を書けという話に。分かってはいたけど、めんどくさいなあ… ありがたい話ではあるけど、どうせ予定調和な年功序列の枠の中の話に過ぎないし、どちらかというとありがた迷惑げふんげふん。

まずは直属のリーダと相談して下書を検討しろとのこと。ネタ自体は仕込があるから大丈夫だとは思っているのだけど、時期的に具体的な成果を出せるところまではいってないため、予測で結論を出さないといけないのが苦しいところ。

Solaris用のW-ZERO3ドライバ2

Solaris用W-ZERO3 RNDISドライバの続き。

CTRL転送だけでなく、バルク転送も実装。snoopコマンドを使うとちゃんとEthernetフレームをやりとりしてる様子がうかがえて感動したんだけど、msgbの解放時コールバックがまだ悪さをしているようなのでpingの応答が得られるところまではいってない。まあぼちぼちとやろうかなと。

最初、データリンクを確立してもぜんぜんパケットが出ていかなくてあせったんだけど、これはifconfig upしてなかったのが原因だった。ifconfig plumbは知ってたのにね…

あと困っているのがDHCP。W-ZERO3を接続したときにはISC DHCPを使ってアドレスを割り当てようと思っているのだけど、普通にこれをブート時に起動させようとすると、ブート時には監視すべきサブネットにつながるインターフェースがないため、起動を拒否されてしまう。微妙に使いづらい… libdevinfoあたりを使って、W-ZERO3の接続を検知したらifconfig plumb + up、DHCP再起動、~/.synce/active_connectionの更新をすればいいのかなと。

2007-01-05

弾幕

ぱにぽにだっしゅ!も連続で見ると、さすがに20話くらいで集中力が落ちる。
で、某弾幕STGにチャレンジ。
もともとSTGはぜんぜん興味なくて、腕も最悪クラスなんだけど、そこは正月のまったりさに負けて…

で、見事にハマってしまいましたww
いや、ゲーム自体は紅魔郷のEasyレベルをコンティニュー付きでようやく回れる程度(へたくそすぎorz...)なんだけど、二次創作作品が面白い。アリマリとか最高。ああ、もっと早く知っていれば…

というわけで、絵師さんのサイト巡りと弾幕くぐり(傍から見ると単なる特攻かもしれないけどw)に明け暮れた1/2〜1/3ですた。

で、仕事初めの1/4…
会社のディスプレイを見たら弾の残像が見える! コンビニの支払いをするためにコインをレジのテーブルに置いたら、つい避けるすきまを探してしまう! どうしよう… orz

ちなみに敵キャラ的にはチルノ・レティ・アリスあたりが好き。弱いから… Normalモードの彼女らは好きじゃない(マテ)

ぱにぽにだっしゅ!

元旦くらいはゆっくりしようと思ってぱにぽにだっしゅ!の録画を再視聴。
うーん、新房監督らしさ炸裂で面白い。

でも… やはり「ネギま!?」に似ているのが気になる。
ていうか、チュパカブラとか言ってるのとか、蛙みたいなのが出てるところとか…

グレ子スレ

もう一つ元旦らしいことと言えば、2ちゃんねるのおみくじ機能。
特におかしかったのがグレ子スレ。

854 :名無しさん@お腹いっぱい。:2007/01/01(月) 00:22:31 ID:0FXsx9vs
あけましておめでとうグレ子
今年は、いいことがあると良いね

855 : 【1060円】 :2007/01/01(月) 00:38:29 ID:Ivpvo7F+
↑グレ子にお年玉プレゼント

856 : 【434円】 :2007/01/01(月) 00:50:11 ID:EEzX39Fy
うちお兄様にグレ子が貢ぐ金額

857 : 【664円】 :2007/01/01(月) 00:59:13 ID:VEZ4kX3N
リヨン様からグレ子にお年玉だよ

858 : 【1555円】 :2007/01/01(月) 01:21:32 ID:eHSf6zUr
                  }  ,リ
                __  ヽ ,リ
 , -ーー—-- 、  / ...::::::::::::..``>、リ
  `¨ー=-_   `ゝ、::::::::::::::::::::::/ヽ=ヘ
      ̄ ≧_{×} 「`` 二二 _二ヘ、
        / .:.:¨/ /ヽ.:.:.:.:.N-ヾ::|L!トr-z_
         |」ニY ,ィイ::|'"¨゙VV`_ V! }}ニ≦`
         ヘ.>ヽ>NN z==  _  ̄` リ_ノ
        /::´〉} }ト、    -‐   ノ|    グレーテル、ちょっとジャンプしてみてよ
      Z:/:./弋-`-'>t- r イ/      
       '" '"   \/二三ミlヲ´
                j"/⌒ヽ、{.{ハ>
             く /  i◎i}} {}{} l
              | /(8|.'.|8)ヽ  |
                |.:::. 0 i) );: ,-、|
              '=..,,_ :ノ|| {.Y}|
「奪われた金額」

ちょ、マイナスw

861 :!omikuji:2007/01/01(月) 01:38:57 ID:ZG93uLVW
↑今年のグレ子の運勢

うまくいってなかったら


862 :!omikuji:2007/01/01(月) 01:44:54 ID:ytVD/CzC
今年も失敗ばかりってことか
それでこそグレ子

863 : 【大凶】 :2007/01/01(月) 01:49:58 ID:r5b2fzt1
今年のグレ子のアニメ活躍度おみくじ

864 :名無しさん@お腹いっぱい。:2007/01/01(月) 01:55:35 ID:5L3tlsZd
ちょwwWw

865 : 【1753円】 :2007/01/01(月) 01:58:26 ID:RlHc6OMc
あけおめ
グレ子にお年玉やるか

866 : 【大吉】 【846円】 :2007/01/01(月) 03:03:42 ID:BxHAqpI0
グレ子よ永遠に

少し持ち直した。
870 : 【78円】 :2007/01/01(月) 03:30:38 ID:Th3LYSYj
お年玉

871 :名無しさん@お腹いっぱい。:2007/01/01(月) 03:36:43 ID:5L3tlsZd
安すぎwwWw

878 :グレ子の運勢 【大凶】 グレ子の所持金 【1806円】 :2007/01/01(月) 09:43:41 ID:7KYhxyt8
[AA略]

882 :グレ子の運勢 【豚】 グレ子の所持金 【983円】 :2007/01/01(月) 12:01:51 ID:BI9rsEt/
>>878
大凶って俺が変えてやろう

成功するかな

883 :名無しさん@お腹いっぱい。:2007/01/01(月) 12:05:49 ID:5W/F6SCJ
>>882
なんてことしやがるwww


890 :グレ子の値段 【93円】 グレ子の運勢 【豚】 :2007/01/01(月) 15:32:36 ID:rwcERB6T
何か無駄に気合はいってるなあw

891 :俺とグレ子の将来 【凶】 グレ子に貢ぐ値段 【485円】 :2007/01/01(月) 15:57:35 ID:fRYRKoBd
>>888
GJ!

892 : 【だん吉】 :2007/01/01(月) 16:29:13 ID:CTS1d+3Z
このスレの運勢が悪いのは気のせいか?

897 :名無しさん@お腹いっぱい。:2007/01/01(月) 21:43:23 ID:jkHI2cZn
グレ「あけましておめでとうございます、お兄様」
ヘン「お前と話すと運気が下がる!」

898 :名無しさん@お腹いっぱい。:2007/01/01(月) 21:52:13 ID:CEJhJcs/
ひでぇw


確かにヒドスwwww。何度か試してみたけど、これだけ大凶や豚が連続するのってない。
でも住人に愛されてるよグレ子。

年末年始の準備

と書くと正月らしいことしてないようだけど、
一応煮豚と雑煮を作り、スーパーで買っておいた煮しめを食べた。
ちなみに大晦日も(インスタントではない)たぬきそば。

実家では煮豚と筑前煮なんだけど、こちらでは煮しめらしい。
久しぶりに煮豚を作ったので、半熟の味付け煮卵に挑戦。
これが我ながらホレボレするデキで、写真とっておけば良かったかもと思うくらい。

でも、けっこう手間かかるよねえ… ラーメン屋で100円とか安いくらいかも。

Solaris用のW-ZERO3ドライバ1

W-ZERO3用のドライバ

synceプロジェクトでWindows Mobile5のドライバが出来ているらしいと聞き、Solaris用のW-ZERO3ドライバを作り始めたけど…
Sun Blade 100に入っているSolaris9のUSBドライバのバージョンが古く、それ用のマニュアルが入ってないことが判明!
まあこういう時のためのネットブートなので、別のx86マシンにさっくりとSolaris10を入れて、シコシコと実装を開始。
INITメッセージをやり取りするところで心理的飽和状態に達した。要するに集中力が切れたってことなんだけどw

これが12/30〜12/31の話。
年を越えたのをsyslogメッセージの時刻で知るというのはどうよ… orz

冬休み

今年の年末年始はいろいろ忙しく、冬休みは12/30〜1/3までだった。
ちなみに帰省とかせず、ずっととぐろを巻いていた。
まあ、実家に戻るのも面倒だしゆっくりできて良かったのだけど。