2007年11月13日

D01NXをザウルスで動かす(ためにがんばる人募集)

小さな会社のプチシステム管理者をしている私は、社外での作業用にイーモバイルのD01NXを使っています。いつでもどこでも(でも都市部限定笑)必要な作業が快適にこなせてとっても重宝しているのですが、Windowsでしか動作しないのが玉に瑕。ザウルスでも動いてくれたら、ポケットに入るシステム管理環境が手に入って便利なのにな…と思うのですが、D01NX用のPDAドライバは全く出る気配がありません。半年以上経ってもWindows Mobile版すら出ていないので、ザウルス用ともなるともう望み薄々です。

いつものどおり『ないものは作る!』と言いたいところですが、さすがに1からドライバの開発なんて無理…と半ば諦めモードに突入していると、自称『外人にクレームをつけるのが得意』なkenyaくん@試作が、何とElan社から直接ドライバをもらってきてくれました!すげ〜!

D01NXをLinuxで動かす(ためにがんばる人募集) ― Proto_Type001
http://comomo.shacknet.nu/blog/154

と言うわけで、びっくりするようなところから手に入ったD01NXのLinuxドライバ。こいつを頑張って動かしてみたいと思います。いきなりザウルスだと敷居が高すぎるので、まずはx86なLinuxで動くことを目指します。用意した環境はこんな感じ。

・InterLink MP-XP3210 (Celeron 650MHz / 386MB)
・Gentoo Linux 2006.1 (Kernel 2.6.22)


まずは以下のサイトからドライバをダウンロードします。
http://www.elandigitalsystems.com/eng/drivers/vmb5000/vmb5k_usb_linux.tar.gz

ドライバをダウンロードしたら、/tmpあたりに適当に展開します。普通にmake出来そうな感じだったのでやってみると、普通に怒られました。
# make
ci: RCS/Makefile,v: no lock set by root
ci: RCS/README.TXT,v: no lock set by root
ci: RCS/PROBLEMS.TXT,v: no lock set by root
make: *** [rcs] Error 1

RCSとやらでこけている様子。調べてみるとRCSはバージョン管理用のツールみたいです。う〜ん、とても開発中の香り。とりあえず今はバージョン管理など必要ないので、RCSディレクトリの中身を消してしまいましょう。
# for targ in `find . -name RCS`
> do
> rm -f $targ/*
> done

これでRCS問題は解消。もう一度makeしてみます。するとこんなエラーが。(抜粋&改行追加)
CC [M] /tmp/vmb-driver-1.4/vmb_hcd/vmb_hcd.o
/tmp/vmb-driver-1.4/vmb_hcd/vmb_hcd.c: In function 'print_queued_urb':
/tmp/vmb-driver-1.4/vmb_hcd/vmb_hcd.c:112: error: 'struct urb' has no member named 'bandwidth'
/tmp/vmb-driver-1.4/vmb_hcd/vmb_hcd.c:132: error: 'struct urb' has no member named 'bandwidth'
cc1: warnings being treated as errors
/tmp/vmb-driver-1.4/vmb_hcd/vmb_hcd.c: In function 'vmb_probe':
/tmp/vmb-driver-1.4/vmb_hcd/vmb_hcd.c:1491: warning: 'deprecated_irq_flag' is deprecated
(declared at include/linux/interrupt.h:66)
/tmp/vmb-driver-1.4/vmb_hcd/vmb_hcd.c:1491: warning: 'deprecated_irq_flag' is deprecated
(declared at include/linux/interrupt.h:66)

はてな?と思うが早いか、kenyaくんがさくっと調べてくれました。
ひとつめの"bandwidth"がどーたら、っていうのは、とりあえずデバッグコード
っぽいので一旦削除して逃げる。
んで、2つめのdeprecatedっていうのは、IRQまわりの定義が変わったらしく、

< retval = usb_add_hcd(hcd, irq, SA_INTERRUPT | SA_SHIRQ);
---
> retval = usb_add_hcd(hcd, irq, IRQF_DISABLED | IRQF_SHARED);

てなかんじでSA_*を新しい定義で置き換えればOK。
IRQ周りの定義は、コンパイルエラーにちゃんと出てきて、
include/linux/interrupt.hに明確に書いてあって、以下抜粋。

/*
* Migration helpers. Scheduled for removal in 1/2007
* Do not use for new code !
*/
#define SA_INTERRUPT IRQF_DISABLED
#define SA_SAMPLE_RANDOM IRQF_SAMPLE_RANDOM
#define SA_SHIRQ IRQF_SHARED

というわけで、置き換えればOKとすぐにわかりました。
ちなみにbandwidthのエラーは、これまたinclude/linux/usb.h内に書いてある
struct urbの中に、

int bandwidth

ていうのがあったんだけど、新しいヘッダではその定義がなくなったようです。
それだけ。
さすがはミスターLinuxです。と言うわけで、教えてくれたとおりにプログラムを変更します。
ついでにカードの情報もドライバに記述します(全然ついでじゃないですね)。このドライバは何らかの開発ハード用のドライバと思われるので、そのままだとD01NXのドライバとして動作してくれないからです。この辺の話は以前の話題に詳しいのでそちらを参照してみてください。

まずはpccardctl ident
PRODID_1="NetIndex"
PRODID_2="D01NX"
PRODID_3=""
PRODID_4=""
MANFID=c036,1003
FUNCID=254

続いてmodalias。私の環境では以下の場所に作成されていました。
/sys/devices/pci0000:00/0000:00:09.0/0.0/modalias

中身はこんな感じ。
pcmcia:mC036c1003fFEfn00pfn00paF2BA4352pb73BB32C2pc00000000pd00000000

この2つを元に、vmb_cs/vbm_cs.cの中身を以下のように修正します。
static struct pcmcia_device_id vmb_ids[] = {
PCMCIA_DEVICE_MANF_CARD(0xc036, 0x1003),
PCMCIA_DEVICE_PROD_ID12("NetIndex","D01NX",0xF2BA4352,0x73BB32C2),
PCMCIA_DEVICE_NULL,
};
改めてmakeすると、無事ドライバが作成され、私の環境では以下の場所に配置されました。
/lib/modules/2.6.22-gentoo-r9/extra/vmb_cs.ko
/lib/modules/2.6.22-gentoo-r9/extra/vmb_hcd.ko

この状態でD01NXを差し込むと、自動的にvmb_csvmb_hcdcdc_acmの3つがロードされました。/dev/ttyACM0も作成され、なんかうまく行ってそうな感じです。しかしcuで接続しようとするとcuがハングアップ。あとkenyaくんもまとめに書いているように(そしてPROBLEMS.TXTにも書いてあるように)、カードの取り出しもrmmodもうまく行きません。こうなるとドライバ自体をデバッグしていくしかないのですが、そのスキルがなくて止まってしまっているのが現在の状態です。

デバッグと言えば、このドライバは大量のデバッグコードが出力されます。しかしその止め方が分からない!ソースコード上でpc_debug=0とすればデバッグスイッチはOFFになる(とREADMEに書いてある)はずなのですが、該当箇所を修正しても効き目なし。Makefileの-DPCMCIA_DEBUGを外すとコンパイルすら通らなくなってしまうので困ったものです。まぁとりあえず動かすことが優先なので今はいいんですけど。

カードを刺してから抜くまでのデバッグメッセージをここに置いておきます。読んで理解できる方、大募集中です。個人的に気になった箇所を以下に抜粋しておきます。
cs: pcmcia_socket0: unable to apply power.

パワー足りてない?
cardmgr[4791]: unsupported card in socket 0

あんさぽーてっどかーど!!(涙)
pcmcia: request for exclusive IRQ could not be fulfilled.
pcmcia: the driver needs updating to supported shared IRQ lines.

ドライバ側でIRQ共有に対応してなくてうまく行ってない?
vmb_cs: index 0x35: Vcc 3.3, Vpp 3.3, irq 11, io 0x0100-0x0107, mem 0x60001000-0x60001fff

そうは言ってもIRQ11できちんと割り当てられているっぽい。
vmb_hcd vmb_hcd: new USB bus registered, assigned bus number 3
vmb_hcd vmb_hcd: irq 11, io mem 0x60001000
usb usb3: configuration #1 chosen from 1 choice
hub 3-0:1.0: USB hub found
hub 3-0:1.0: 2 ports detected

USBホストコントローラとハブを認識。
usb 3-1: new full speed USB device using vmb_hcd and address 2
usb 3-1: configuration #1 chosen from 1 choice
cdc_acm 3-1:1.0: ttyACM0: USB ACM device

USBの先にあるUSB ACMデバイスを認識。
そしてこれ以降ものすごい勢いでデバッグログが出現。

pccardctl ejectを実行。
pccard: card ejected from slot 0
API:vmb_remove(d4beb090)
vmb_hcd vmb_hcd: remove, state 1
usb usb3: USB disconnect, address 1
usb 3-1: USB disconnect, address 2

USBの取り外しまでは行ってるっぽいんだけど、何でハングしちゃうんだろ?

一緒に頑張ってくれる方、募集中です。
いつかはザウスルでも(もちろんLinuxでも)D01NXを!


posted by 月水和尚 (とも) at 17:25 | Comment(59) | TrackBack(0) | りなざう
この記事へのコメント
ドライバ側でIRQ共有に対応してなくてうまく行ってない?
のところは、
+ /* Make sure the fact the request type was overridden is passed back */
+ if (type == SA_SHIRQ && !(req->Attributes & IRQ_TYPE_DYNAMIC_SHARING)) {
+ req->Attributes |= IRQ_TYPE_DYNAMIC_SHARING;
+ printk(KERN_WARNING "pcmcia: request for exclusive IRQ could not be fulfilled.\n");
+ printk(KERN_WARNING "pcmcia: the driver needs updating to supported shared IRQ lines.\n");
だから、
コメントどおりなら、
要求された通りにには設定しなかった、という通告をしてますな。
たぶん、
type == SA_SHIRQ
だけ設定してあっても、
req->Attributes & IRQ_TYPE_DYNAMIC_SHARING
も同時に設定されてリクエストしておかないとだめなのに、
してなかったので、
セットしといてやったぞ、
という事で、
ここは、ワーニング出てうるさいけど結果的には、無害、と思います。

ググると、
debian 化した SL-C3000の dmesg
でも、同じメッセージでてるし。
Posted by char at 2007年11月16日 00:37
パワー足りてない?
の箇所は、痛い、かも。

なんとなく、pcmciaなcs.cに、次のような
感じのコードがある気がする。

471 /*
472 * Wait "vcc_settle" for the supply to stabilise.
473 */
474 msleep(vcc_settle * 10);
475
476 skt->ops->get_status(skt, &status);
477 if (!(status & SS_POWERON)) {
478 cs_err(skt, "unable to apply power.\n");
479 return CS_BAD_TYPE;
480 }
481
482 status = socket_reset(skt);
483

でもって、該当のメッセージは、
まずい時に発しているし、
まずいぞ、と返している。

それでも、使えているのがなぜなのか、理解できないが。
Posted by char at 2007年11月16日 01:04
charさん

コメントありがとうございます!

IRQの件はご指摘のとおり『セットされてないからセットしといたぜ』と言うことでいいようですね。ちゃんとソース読まなきゃ駄目だ、私…。

パワー足りてない件は、ドライバじゃないところでエラーが出てたんですね。全然そこまで気が回っていませんでした。カーネル2.6.22のソース

http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.22.y.git;a=blob;f=drivers/pcmcia/cs.c;h=1e03bbd32661cf91b0769fb7d132c3c35aca8363;hb=HEAD

を見てみると、コメントで指摘してくださっている場所(484行目)で該当メッセージを出力し、CS_BAD_TYPEでreturnしているように見えます。ただこの呼び出し元(だと思われる)のsocket_insert関数を見てみると、509行目でsocket_setupをコールして、結果がCS_SUCCESSでない限り

"pccard: %s card inserted into slot %d\n"

のメッセージを出力しないように思えるのですが、実際にはパワー足りずのメッセージの直後に、

pccard: PCMCIA card inserted into slot 0

と言うメッセージが表示されているんですよね。本来はsocket_shutdownに飛ばされるはずなのですが…不思議です。

また何か分かりましたらご教示下さい。
ありがとうございました!!
Posted by tomo at 2007年11月16日 12:55
すいません、追記です。

このテスト環境はWindowsとLinuxのデュアルブートにしてあるのですが、Windowsを立ち上げた場合には普通にD01NXを使うことができます。なのでハードウェア側の制約でパワーが足りてないというのはちょっと考えにくいと思っています。

以上、追記でした。
Posted by tomo at 2007年11月16日 12:59
まとめおつかれです。
Windows入ってるなら、デバマネからioportとmemportをメモっておいたほうがいいかもですね。
Posted by kenya at 2007年11月16日 19:56
あんさぽーてっどかーど!!(涙)
のところは、
http://linux.toshiba-dme.co.jp/ML/tlinux-users-j/300/324.html
からの、ぶち抜き引用を以下。
さて、

cardmgr[231]: unsupported card in socket 1

と表示されている場合には、カードから識別情報が正しく読み出せていない
か、もしくは/etc/pcmcia/configで対応するドライバが宣言されていません。
product infoにそれらしい文字列が出ているかどうかで判断してください。

product infoが読みだせない場合には、カーネルやドライバへのパラメタの間
違いか、もしくは残念ながらお持ちのカードとSS3380のハードウェア的相性が
よくないのだと思います。

product infoを読みだしている場合には、/etc/pcmcia/configファイルの
version行に対応するものがありません。configを見直してください。
Posted by char at 2007年11月16日 23:56
charさん

/etc/pcmcia/configに

card "NetIndex D01NX"
version "NetIndex", "D01NX"
manfid c036, 1003
bind "vmb_cs"

card "NetIndex D01NX"
manfid c036, 1003
bind "vmb_cs"

card "NetIndex D01NX"
version "NetIndex", "D01NX"
bind "vmb_cs"

と3パターンやってみたけどダメでした。
しかし結果としてvmb_csは読み込まれるのでこれまた不思議です。
Posted by tomo at 2007年11月17日 01:20
デバイスマネージャのどこを見ればいいんだろう?
それっぽい記述は見つからなかったのだが…。
Posted by tomo at 2007年11月17日 01:25
 .confファイルの作成が終わったら、pcmciaのサービスを再起動する。

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/485ditctpccard.html
http://www.a-yu.com/pub/pccard.html
Posted by char at 2007年11月17日 02:22
http://www.linux.or.jp/JM/html/pcmcia-cs/man5/pcmcia.5.html


それっぽい記述は見つからなかったのだが…。
の意味は、
「unsupported card in socket 」を出しているソースコードが見つからないという意味ですか?

これ
http://www.koders.com/c/fidFDCDE98D51184C3341EF88F4CDFD67E63404AC2F.aspx?s=cardmgr.c
Posted by char at 2007年11月17日 02:57
水をさすようで申し訳ないが、
HWの仕様を理解していないと、
結局失敗すると思うのだが、
そっちの情報は得られそうなのか?
見た目のIRQ等はなんとかなるだろうが、
通信機材部分や、そこに関係する、LEDとかの
制御ができそうな目処ある?

Winなドライバをリバースするなら、
ソフト側から無理やりHW仕様を捉える事は
理屈ではできそうだが、
誰もやりそうな気がしないし。
Posted by char at 2007年11月17日 07:59
2.6.22なコードは、
koder.comとかのコード検索サイトに無いのかのぉ。
というか、
そういうサイトにあるような
コードのカーネル上で実験すれば、
協力者等が増えてくると思うのだが..
Posted by char at 2007年11月17日 08:31
charさん

いろいろコメントありがとうございます。

それっぽい記述…の話は別のコメント(kenyaさん)へのコメントです。
分かりにくくて申し訳ないです。
pcmciaのサービスは再起動したんですがダメですね。

HW仕様については全然手に入る目処が立っていません。と言うよりHW仕様が分かっても開発できる技術を持ち合わせていないので詳しく聞いていないのが正直なところです。現状を見て「あれとこれの仕様が分かればもう少し何とか出来そう」という部分があれば問い合わせをしてみることも出来るのですが。(教えてもらえるかどうかは分かりませんけど)

kernel2.6.22のコードはここでは駄目ですか?
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.22.y.git;a=tree
Posted by tomo at 2007年11月17日 20:26
USBの取り外しまでは行ってるっぽいんだけど、何でハングしちゃうんだろ?
の回答は、ドライバ書いた本人ですら、問題にしているフシが。

PROBLEMS.TXT
3) does not shutdown cleanly, if at all, when the pcmcia device
is ejected or when rmmod is used
Posted by char at 2007年11月17日 20:37
混乱させた張本人(笑
charさん、kenya@試作と申します。
どうぞよろしくお願いいたします。

tomoさん
デバマネのD01NX系のデバイスのプロパティを見れば
I/Oポートとメモリポートが書いてありますよ。

charさん
VMB5000側のデータシートは部分的に入手可能で
詳細版は機密保持契約を結ぶ必要があるそうです。

ネットインデックス側は…門前払いされました。
Posted by kenya at 2007年11月17日 21:29
おぉ。
VMB5000側のデータシートは部分的に入手可能ですか。
それは、良いかも。
というのは、
ドライバは未完成状態ですから(と言い切ってよいのか?)、
あちこち、疑いをかけるネタへの反証材料にはできるかな、と。
Posted by char at 2007年11月18日 09:03
とりあえず、1個目の
unable to apply power.
は無視が正解かと...

http://kernel.org/pub/linux/utils/kernel/pcmcia/powerbugs.html

他の環境(特に、他社LAPTOP環境以外)で、
再現するようなら、調査に取り組みましょう。
#再現しつづけるなら、LAPTOP側のHW仕様を
#比較しあう、など検討が必要とは思いますが、
#本件の調査に、どの程度の参加者がいるのか
#不明ですから...
Posted by char at 2007年11月18日 09:33
charさん

まさに検証中のマシンがJVC mininoteです!
Windows側でBridge名を確認したら

Ricoh R/RL/5C476(II) or Compatible Cardbus Controller

となっておりました。既知の問題なんですね。
ちゃんと電源は供給されているようなので、無視することにします。
cardmgrの件も、ドライバはちゃんとロードされるので無視してしまって大丈夫ですかね?

カードの取り外しについてはご指摘の通り既知の問題なのですが、実際に使うことを考えると取り外しが出来ないのは非常に痛い…。書いた本人が?となっているくらいなので、素人の私が見てどうにか出来る問題ではないのですが。


kenyaくん

Windows側で認識されるデバイスは全部で4つ。

・USBコントローラ → D01NX Composite Device
・USBコントローラ → NetIndex D01NX
・ポート → NetIndex Virtual Multiple Com(COM5)
・モデム → NetIndex D01NX USB Modem

このうちリソースのタブがあるのは2つめの"NetIndex D01NX"だけでした。内容は、

・IRQ:10
・I/Oの範囲:FFF8 - FFFF
・メモリの範囲:F7DFB000 - F7DFBFFF

となってましたよ。
モデムのプロパティを必死に探していたのはここだけの秘密。(笑)
Posted by tomo at 2007年11月18日 10:59
charさん

データーシートです
http://www.elandigitalsystems.com/eng/datasheets/vmb5000/vmb5000_simplified.pdf

私はtomoさん以上にこの辺のことがわかりませんので、これでどのくらいの情報が得られるのかはわからないですが…

あと、
>ネットインデックス側は…門前払いされました。
間違えました。聞いたのはイーモバイルです(笑

tomoさん、charさん
僕の環境(InterLink MP-XP741)では
unable to apply powerというのは出てません。
まだmessages整理できてませんが。

取り急ぎ。
Posted by kenya at 2007年11月18日 11:02
自信持って言いますが、私も素人です。
#なんだよ、という声もあるでしょうが。

とりあえず、調べて分かる範囲のものは、
バンバン、調べて見たいとは思ってます。

が、今週は、あまりパワーが割けません。

機材手配やソースコード手配して、
現象面での、オッカケをしたいと思ってます。

可能な限り、Linuxのdistroやバージョンを
あわせておかないと、
HW差異などに苦しみそうな気がします。
gentooって自分的には、未知なんですけど、
ソースは一式丸ごと(カーネルからユーティリティまで)手に入れられますよね?

自分が参戦する時の手持ちのノートは、
Libretto M3(ディスク足りないか...)かL2を想定中。

解決したい問題のリストを、
現象面でリストアップしていただけますか?

先のエラーリストで理解できないメッセージがある
の件も問題リストの対象になると思います。

素人パワーで、順番にやっつけていきましょう。
#はまっている本人では、気づかない岡目八目って事もありますしね。
Posted by char at 2007年11月18日 12:13
ザウルスで使えるようになるということで、D01NXを購入しましたが、結局ドライバーは出ず、EMOBILEには裏切られた気分です。こちらの取り組みには大いに期待を持っています。技術的な知識がなくお手伝いはできませんが、成功するよう、心から応援させていただきます。
Posted by carrera at 2007年11月18日 12:23
kenya@試作さん
ども。おはつです。
#と、ヒトのウチのノキシタで挨拶するワシ。

ネタの投下ありがとうございます。

自分は、イーモバからzaurusで使えるd01nxなドライバが提供されずに困っている被害者です。

ろくに謝罪も無く、いつまでも、開発中と言っているイーモバに(zaurus対応もするんだかしないんだか煮え切らない対応だし)、何やってんだよ、と思いつつ涙で枕を濡らす日々が続いておりました。

kenyaさんがネタを投下してくれたので、枕が乾きそうです。さすがドライば。

とまぁ、そんなわけで、よろしくです。
Posted by char at 2007年11月18日 12:25
kenyaくん

HW構成違うのかな?
うちはGentoo的にはYenta cardbus bridgeを使ってるよ。
pcmcia-csとpcmciautilsは最近入れなおしたので最新のはず。(つってもここ数年更新されてないけど)


charさん

いや、かなりの手練れとお見受け致しますが。
参戦いただけて嬉しいです。よろしくお願いします。
お互い、負担にならない程度に頑張っていきましょう。
忙しいときは無理せず、慌てず、のんびりと・・・。

Gentooはソースの入手性はよいと思います。
インストールについてはこの辺が詳しいです。

Gentoo Linux x86 ハンドブック
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml

しかし問題リストを作って1つずつつぶして行くにはうちの軒下は狭すぎですね。
もっと大きな軒先を借りる必要があるかもしれません。
Posted by tomo at 2007年11月18日 14:04
carreraさん

応援コメント有難うございます。
私自身はずぶの素人なのでご期待に沿えるかどうか分かりませんが、少しじたばたとあがいてみたいと思います。本当はさっさと公式ドライバが出てくれればいいんですけどね。イーモバイルに然り、ネットインデックスに然り、もっとしっかりして欲しいものです…。
Posted by tomo at 2007年11月18日 14:09
charさん

よろしくお願いします♪
きっとみなさんそれぞれ得意なところがあると思いますので、力をあわせたいですね〜

環境をあわせるという意見は賛成ですねー。
Gentooはソースの入手性が非常によいですが、
定期的なリリースがないので、合わせづらいですね。

コンパイルとカード抜き差しだけなら、もっといい
ディストリがあるような気もしますね。Ubuntuとか?

tomoさん

軒下、準備したほうがいいですかねぇ。
Posted by kenya at 2007年11月18日 17:44
ども、ども。こんち。

バージョンは、いつ、誰が取っても、同じモノになるようにしておきたいですね。(あるいは、個々のバージョンは宣言しておきたいですね。)
#後からシカバネくらい拾ってくれるヒトがいるかも知れませんから。

個人的には、バージョンは多少古い方が好きだったりするヒトなので、定期リリースが無くても気にしません。

とりあえず、自分へのメモ
Linux PCMCIA プログラマの手引き
http://www.linux.or.jp/JF/JFdocs/PCMCIA-PROG.html
Posted by char at 2007年11月18日 20:32
この文書のいくつかのパートも、debugに有効な情報あるかな。
http://www.linux.or.jp/JF/JFdocs/PCMCIA-HOWTO.html
Posted by char at 2007年11月18日 20:40
ところでSL811との相関はありそうなの??書いた本人は公式では認めてないよね?
Posted by char at 2007年11月18日 20:57
kenyaくん

ソースの入手製はピカ一だけど、環境合わせるって意味ではこれほど不向きなディストリビューションはないよね。おいらとしては新たに環境整える余力がないのでこのままGentooで行きたいところだけど。

ここで問題管理とかバージョン管理はさすがに無理なので広い軒下欲しいね。ソースの管理と問題管理用にwikiとMLか掲示板みたいなものがあると便利そう。例によってsf.jpにお世話になるのがよいのかな?


charさん

Gentooは定期リリースが無く、各パッケージが独自にバージョンアップしていくような形を取っているので環境合わせがちょっと厄介です。そのパッケージもバイナリ提供ではなく各自の環境でコンパイルになるのでバージョンを合わせても同じバイナリにならないのが困りもの。UbuntuとかCentOSならきっちり環境合わせられるんですけどね。

SL811との関連はvmb_cs.cのヘッダ部に、

Structure based on the pcmcia driver for SL811

と記述されていますよ。
Posted by tomo at 2007年11月18日 21:36
うほっ。
どうどうと書いてありますか。

ところで、どうでも良い話ではありますが、
PCMCIA tony.olechのキーワードでググると
2006年後半から、登場していますな。
モシカして彼のドライバ暦は浅い?
Posted by char at 2007年11月18日 22:34
charさん、tomoさん

いいだしっぺ2人がGentooなので、Gentooにするのが楽かも(笑

環境依存を避けるため、たとえば以下のコンポーネントのバージョンを揃えるというのはどうでしょう。
選択は思いつきなので、追加・削除は要検討ですが。

・gentoo-sources(カーネルソース)
・linux-headers(カーネルヘッダ)
・gcc
・glibc
・pcmciautils
・usbutils

あと、tonyはメールアドレスわかるので
直接メールできます。
H/W specificな内容は、ぶっちゃけ聞いてみるとか
そもそも巻き込んでみるとか、そっちの方向で
考えてみてもいいのかも。

sfjpを使うかなぁ。
基本会話はメーリングリスト。
トップページはまとめページにして、
そこにメーリングリストの案内書いて希望者
は参画しもらうとか。
Posted by kenya at 2007年11月19日 01:14
こんにちは
M2501で動作確認してみようかなと一瞬だけ思ったけど、
VMwareではPCMCIAをSupport出来ないのでする〜しちゃってます。

cdc_acmのloadまでは行われるという事は、
unplugを無視すればVMB5000のUSB Hostまでは正常に動作しているのですか?
CentOSあたりで参戦してみようかなぁ…
Posted by asuka at 2007年11月19日 01:55
charさん、kenyaくん

とりあえずGentooで行きましょう。(自分が環境用意できないだけ、とも言う笑)
コンポーネントのバージョン合わせは了解です。先行してる私とkenyaくんの環境をチェックして決定しましょう。今は手元にPCがないのでうちの環境については夜にでも。


kenyaくん

さすが海外担当。(笑)
tonyが巻き込まれてくれると非常に嬉しい!
軒先はやっぱりsfjpが良さそうだね。
あとで確保しておきます。うまくできなかったらお願いするかも…。


asukaさん

ログの出力やらドライバのロード状況を見る限りUSB Hostまではうまく行っているような気がするのですが確認する術なしというのが現状です。
M2501は数少ないSupported Devicesの1つなのでD01NXよりも動く可能性大だと思っています。M2501で動くとD01NXにも希望がわいてくるので、挑戦していただけるととても嬉しいです。参戦をお待ちしております!
Posted by tomo at 2007年11月19日 13:15
突然ですが、emobileとzaurus関係で検索していて通りがかった者です。
CF型はzaurusでは無理かなと思っていたのですが、動く可能性はありそうなんですね。
ちょうど、いちねんでUSBの方を契約してみようかなぁと思っていたのですが、こちらのカードでもよいかなと。
最悪windowsで使えますし。
私はまだD01NXを持っていないため少々質問させてください。

NDAの関係で詳細なアプリケションノートを入手できないとなると、線を引き出してwindows上で動いている状態の信号線をオシロやロジアナなんかで見ることが必要になる"可能性がある"のですが、どこかに分解したHWの写真などはありませんか?
載ってるチップと配線がきっちり追えるのであれば詳細なアプリケーションノートなしでも苦労すればできるかもしれないかなぁとは思っています。
CX23416を解析された方がいらっしゃいますので、がんばればですけど(^^;
まぁ資料を持ってるメーカーが苦労してるんでちょっとどころの苦労ではないかもしれませんが…

USBホストまでとりあえず動作してる(?)っぽいソースがあるので、ここまでのことは不要かなとも思いますが、HWの構成はやはり知っておきたいので情報がありましたらお願いします。
Posted by nagara at 2007年11月19日 23:40
nagaraさん

コメントありがとうございます。

オシロやロジアナ…何だか凄い世界ですね。
私にとっては宇宙の彼方…。(汗)
とりあえず私の知っている限りでは3枚おろしにされた写真しか見たことがありません。

emobile D01NXをZaurusで使いたい
http://www.asuka.cx/zaurus/d01nx/

電子回路(という分野であっているのかな?)はまるっきり無知なのでHW関連はあまりお役に立てそうにありません。ここを見ている方で誰か詳しい方がいらっしゃればいいのですが…。
# いやHW関連"も"、が正解。(苦笑)
Posted by tomo at 2007年11月20日 01:24
広い軒先を借りてきました。

https://sourceforge.jp/projects/d01nx4lz/

まだ借りただけの状態ですが、とりあえずお知らせです。
使い方よく分かってないのですが、どなたか詳しい方いらっしゃいませんか?
Posted by tomo at 2007年11月20日 12:58
Posted by char at 2007年11月20日 21:04
tomoさん

軒先(ていうか家なんだろうな)作成お疲れ様です。

思いつきで書いてますが…

みなさんでsfjpに登録していったん管理はクローズドでやってみましょうか。
慣れてきたらOpenDiscussionでAnonymousな方々の意見を吸い上げるとか。

charさんの言っている「解決したい問題のリストアップ」のために、トラッカーに"Issue"カテゴリを追加してみました。
ここに問題を一個ずつ登録してトラッキングするとか。
Posted by kenya at 2007年11月20日 23:12
HWの情報ありがとうございます。
しかし無線関係なんでシールドでがっちりですね(^^;
やはり買ってからばらすしかないかな?
うーむ、とりあえずうちの環境で試したい…

sfjpにて公開で開発を行うのでしたら、ぜひ参加させてください。
Posted by nagara at 2007年11月20日 23:48
charさん

参戦表明ありがとうございました。
sfjpの登録が完了しましたのでご確認下さい。
使い方は操作面ではマニュアル見ればどうにか出来ると思うのですが、今回どの機能が必要で、それをどう使ったら開発がきちんと回るのかな、といった部分がよく分かっておりません。お力添えをよろしくお願いします。


kenyaくん

クローズドってのはディスカッションとかがプロジェクト参加者だけになるだけで、プロジェクトへの参加はオープンなままなんだよね。であればそれはそれでオッケーかと。興味ある人は参加してもらえるだろうし、ある程度の進捗報告はここにも載せようと思っているので、そうすればここのコメント欄はAnonymousな方でも書けますしね。
トラッカーの件はサンクスです。その辺の使い方が全然分かってないので頼りっぱなしになっちゃうかも。


nagaraさん

是非とも参戦してください!
sfjpに場所は作りましたんで、私(tomozau)かkenyaさん(kenya888)に連絡していただくか、ここにIDを書いていただければメンバー登録させていただきます。
買ってからばらす…頼もしい発言です。(笑)
Posted by tomo at 2007年11月21日 14:31
こんばんは
nagara改めmasamuraとしました。
みなさま、改めてよろしくお願いします。

sfjpにてkenyaさんに登録していただきましたので
そちらに書こうと思ったのですが、どう書いたもんかということでとりあえずこちらに。

http://www.elandigitalsystems.com/asic/support/vmb5000.php
を見たところ、アプリケーションノートとデモボードの回路がありました。
おかげでハードはあんまり気にしなくても良いかも。
やるとすればどうしてもwindowsで動いてる時の信号を見たいって時ぐらいですみそうな気がします。
Posted by masamura at 2007年11月21日 23:54
masamuraさん

sfjpを見て誰だろうと思っていたんですが、nagaraさんでした。
参戦ありがとうございます。よろしくお願いいたします。
Posted by tomo at 2007年11月22日 12:55
VMB5000のデータシートを読みましたが
UHCI規格には完全に準拠していないみたいですね。
理由はCFIF経由では、PCIバスマスタになれないからと(そりゃそうだ)。
既存のUSBモデムドライバがPCI経由でアクセスするUSBコントローラ向けであるとすれば、ここら辺に手を入れる必要がありそうですね。
Posted by taloon at 2007年11月26日 20:12
taloonさん

こんにちは。
USBモデムドライバはcdc-acmですが、
これは同じくCFIFのUSBホストコントローラー搭載の
REX-CFU1+京ぽんで使われている実績があるのでご懸念の点は大丈夫なのかなと思ったりします。

SL811 -osdev-j(MMA)
http://wiki.osdev.info/?SL811

さるがとんだら Zaurusで京ポンを使う
http://co2.s16.xrea.com/hiki2/hiki.cgi?Kyo-PonWithZaurus

vmbのドライバはsl811のコードを参考にして書かれているので、その辺の差は少ないのかなと思いますが、そのわずかな差が影響しているのかもしれませんね。

そもそも、cdc-acmをロードしない状態で、vmb_csおよびvmb_hcdモジュールのアンロード時にハングしますし…

あまり関係ないですが
vmb_cs.cを見ると供給可能電力が1000mAになってる…ホントかよ。
Posted by kenya at 2007年11月27日 16:48
emobileにD01NX契約してきました。
が、いきなりwindowsでデバイスが正常に認識できないんですがどうなってるのやら。
おかげでまだ通信のテストができておりません…

linuxでさしてみましたが、こちらにある方法でドライバを入れたところブリッジ部分は認識しました。
ただ、insmod cdc_acmとデバイスノードの作成しても、先のusbモデムが認識できてないようで。

やっぱり端末の初期不良かな?

ちなみにうちの環境はThinkPadX60sにPlamoLinux4.22です。
Gentooはまた時間のあるときに入れて環境は合わせる予定です。
Posted by masamura at 2007年11月28日 00:24
taloonさん、kenyaくん

何の裏も取れてないんですけど、

VMB5000:取り外しに関しては×だけどUSBホストとして動く部分はきちんと動いてる
USBモデム:普通のUSBモデムとはちょっと違う部分があってcdc-acmだとうまく動かない

こんな感じなのかな、と思ってます。
VMB5000の仕様もさることながら、その先に繋がっているモデム部分の仕様も知りたいところです。こっちはネットインデックス持ちなのでデータシートを見せてくれる可能性は限りなく低そうですが…。


masamuraさん

Windowsで認識しないとなると端末側の初期不良の可能性大ですねぇ。通信が突然できなくなったりOSを巻き込んで飛ぶことがあっても(ってこんな事あっちゃいけないんですけど…苦笑)端から認識しないという話はあんまり聞いたことがないです。
出鼻をくじかれるのってヘコみますよね…。
Posted by tomo at 2007年11月28日 07:29
kenyaさん、tomoさん

そうですね、vmbのドライバはSL811のドライバを参考にしているから、大丈夫っぽいですね。

となると、やはりUSBから先のデバイスが何かが知りたいですね。

VMB5000に内蔵のUARTのボーレートは最高10Mbpsまで行けるとありましたが、USBモデムではなくUARTを使っている可能性は無いでしょうか。

やっぱり分解するしかないのかなぁ。
Posted by taloon at 2007年11月28日 10:20
D01NXのmodem部分は、D01HWとほぼ互換性がありました。

そんな訳で、kernel2.6.20以降に含まれる、
USB Driver for GSM modemsで動作確認してみていただけませんか?

Linux上での動作確認はCentOSのkernelが古かったりで停滞中…
Posted by asuka at 2007年11月28日 14:30
asukaさん

検証ありがとうございます!
今夜にでも動作確認してみますので、しばしお待ち下さい。

asukaさんって、3枚おろし写真のasukaさんだったんですね。
その節は(どの節だ?)お世話になっております。m(_ _)m


taloonさん

というわけで、USBの先が判明したので分解しなくて済みそうです。


自分用メモ…

Symbol: USB_SERIAL_OPTION [=n]
Prompt: USB driver for GSM and CDMA modems
 Defined at drivers/usb/serial/Kconfig:529
 Depends on: HAS_IOMEM && USB!=n && USB_SERIAL
 Location:
  -> Device Drivers
   -> USB support
    -> USB Serial Converter support
     -> USB Serial Converter support (USB_SERIAL [=m])
Posted by tomo at 2007年11月28日 16:21
>USB Driver for GSM modems

option.koですね。

一度試した気が…そのときはNGでしたが、まじめに試していなかったのでもう一度やります。

option.cにD01NX用のVENDOR_IDとPRODUCT_IDを入れてビルドしたほうがよさそうですね。やってみます。少しソース読んでみます(読める範囲で)

tomoさん

時間があったら(笑
D01NXを挿した状態で、

#lsusb -vvv

のアウトプット送ってもらえませんか?
コマンドが入ってなかったらusbutilsをemergeしてください。
Posted by kenya at 2007年11月28日 17:28
asukaさん

情報ありがとうございます!!
あの、本当に興味本位でお聞きしているだけなんですが、

>D01NXのmodem部分は、D01HWとほぼ互換性がありました。

これって、どういったレベルで確認されたのでしょうか。お手を煩わせない程度で教えていただけますと後学のためになりますのでぜひ。
Posted by kenya at 2007年11月28日 17:47
kenyaくん

option.cにIDの追加ってどうやるん?emergeでソースだけダウンロードして、変更加えたあとビルドだけ実行とか出来るんだっけ?
lsusbの結果はoption.koがロードされてる状態で取った方がいいのかな?

互換性の検証は、この話と思われます。

HSDPAカードの比較調査 (Eternal sleep)
http://www.asuka.cx/blog/2007/11/hsdpa.html
Posted by tomo at 2007年11月28日 17:55
tomoさん

フォローサンクスです。
なるほど、asukaさん検証されていたのですね。ありがとうございます。

option.cはカーネルソースですから、ふつーに/usr/src/linuxの下のソースを書き換えてmake modulesすればOKです。

ただ、ID追加の件は、互換性があるというasukaさんの話を勘案すると、option.cで書かれているとおりのHuawei E220として認識される可能性が高いですね…

以下option.c抜粋(2.6.22-gentoo-r7)

107 #define HUAWEI_VENDOR_ID 0x12D1
108 #define HUAWEI_PRODUCT_E600 0x1001
109 #define HUAWEI_PRODUCT_E220 0x1003

とりあえずそのままやってログ取りましょう。
Posted by kenya at 2007年11月28日 18:41
コピペして今気づいたけど、Windowsから見たら、

NetIndex Virtual Multiple Comの「一致するデバイスID」に

usb\vid_11f6&pid_1003&mi_02&os_nt

って書いてありますね。
vidはVENDOR_IDで、pidはProduct_IDっすね。

Product IDは0x1003で合致しています。
E220であることはほぼ確定っぽいですね。

Vendor IDは11f6。ちょっと違いますね。
もしかしたらNetIndexなのかな。
これを埋め込んだほうがいいのか、認識されるのなら別にいらない気も…
Posted by kenya at 2007年11月28日 19:25
みなさま、こんばんは

本日カード交換をしてもらって、やっとLinux上にて動作検証してみました。

taloonさんの質問に、
UARTを使ってる可能性は?とありましたが、
lsusbにてVMB5000の割り当てでUSBポートが2ポート増えているのと、モデムが出ているところを見るとUSB設定でつながっているようです。

lsusb -vvvの結果を以下に張ります(VMB5000の部分のみ)

Bus 006 Device 002: ID 11f6:1003
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 2 Communications
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x11f6
idProduct 0x1003
bcdDevice 0.00
iManufacturer 1 NetIndex Inc.
iProduct 2 NetIndex D01NX
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 90
bNumInterfaces 3
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 2 Communications
bInterfaceSubClass 2 Abstract (modem)
bInterfaceProtocol 1 AT-commands (v.25ter)
iInterface 0
CDC Header:
bcdCDC 1.09
CDC Call Management:
bmCapabilities 0x03
call management
use DataInterface
bDataInterface 1
CDC ACM:
bmCapabilities 0x0f
connection notifications
sends break
line coding and serial state
get/set/clear comm features
CDC Union:
bMasterInterface 0
bSlaveInterface 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 32
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 10 Data
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0
iInterface 3 Data Interface
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 255 Vendor Specific Subclass
bInterfaceProtocol 255 Vendor Specific Protocol
iInterface 3 Data Interface
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Device Status: 0x0000
(Bus Powered)
Posted by masamura at 2007年11月28日 23:20
つづき

Bus 006 Device 001: ID 0000:0000
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0000
idProduct 0x0000
bcdDevice 2.06
iManufacturer 3 Linux 2.6.22.9-plamoSMP vmb_hcd
iProduct 2 ELAN VMB Host Controller
iSerial 1 vmb_hcd
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 2
wHubCharacteristic 0x0012
No power switching (usb 1.0)
No overcurrent protection
bPwrOn2PwrGood 0 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
Posted by masamura at 2007年11月28日 23:21
こんにちは。

みなさんのsfjpのメールアドレスを
メーリングリストに登録させていただきました。

http://lists.sourceforge.jp/mailman/listinfo/d01nx4lz-dev

tomoさんも別ページでまとめをかかれましたので
とりあたまさんページ内だけでは情報が分散されてしまうかもしれませんし。

どちらがいいかは皆さんのご意見しだいですが、
とりあえずお知らせまで。
Posted by kenya at 2007年11月29日 16:20
凄く遅くて申し訳ありませんが、
D01NX 〜 本体ファームウェアのバージョンアップが公開されたみたいです。
http://emobile.jp/topics/info20080109_01.html
Posted by ひよこjp at 2008年01月13日 00:31
ひよこjpさん

情報ありがとうございます。
記事にはしなかったのですが、既にバージョンアップ済みです。たまたま利用機会が少なくて新ファームウェアの効果のほどは実感できていませんが、世間の評価は概ねいいみたいですね。
Posted by tomo at 2008年01月13日 02:23
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。