母艦から SD カードに直接 console パッケージを書き込むことができるだけでもよかったんだが、 いまんとこ SD カードへは SL-A300 を経由しないとアクセスできない。 バグとか制限とかいうのでなく、単に物理的に繋げる方法がないというだけだけど。
ついでのついでにここの
USBDNET のところで VENDOR, PRODUCT, CLASS, SUBCLASS が設定できるのでここで SL-A300 用に設定することもできるが、 再コンフィグする時に前回の設定を忘れてくれる素晴しい特性がある ... というか、すでに忘れてくださってる(パッチで埋め込んだので今は使ってない)ので 何を設定してあったのか書けない。 それぞれ 0x04dd, 0x8005, 2, 10 でいいんだと思うが、記憶で書いてるので違ってたらすまん。
Bus 001 Device 006: ID 04dd:8005 Sharp Corp.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 2 Communications
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 16
idVendor 0x04dd Sharp Corp.
idProduct 0x8005
bcdDevice 0.00
iManufacturer 1 Sharp
iProduct 2 SL-A300
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 84
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 3
bmAttributes 0xc0
Self Powered
MaxPower 2mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 2 Communications
bInterfaceSubClass 10
bInterfaceProtocol 0
iInterface 4 MDLM Network Communication Interface
unknown descriptor type: 05 24 00 10 01
unknown descriptor type: 15 24 12 00 01 5d 34 cf 66 11 18 11 d6 a2 1a 00 01 02 ca 9a 7f
unknown descriptor type: 06 24 13 00 00 03
unknown descriptor type: 0d 24 0f 05 00 00 00 00 ea 05 00 00 00
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type none
wMaxPacketSize 64
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type none
wMaxPacketSize 64
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type none
wMaxPacketSize 8
bInterval 10
Language IDs: (length=4)
0409 English(US)
... unknown descriptor type って何やねん。/etc/murasaki/murasaki.usbmap に次の 2 行を追加。
なお、 この 2 行を追加するさいに前後に空行を置いてはいけない。 murasaki.usbmap のパーザは極めて「タコ」である。行フォーマットと思って適当に書くと 名前の前後の余分な space や 改行の剥ぎ取りに失敗して load できないことがある。 実際、標準配付の murasaki.usbmap にはコメントはたくさんあっても空行はひとっつもない。# SHARP SL-A300 usbdnet 0x0003 0x04dd 0x8005 0 0 0x2 0xa 0x0 0x0 0x0 0x0 0x00000000
/etc/network/interfaces に次の 3 行追加。まあ、address は適当に。
iface usb0 inet static
address 192.168.129.32
netmask 255.255.255.0
murasaki を再起動後、SL-A300 を繋ぐと syslog には:
Sep 29 11:57:00 kuhn kernel: hub.c: USB new device connect on bus1/1, assigned device number 6 Sep 29 11:57:00 kuhn kernel: usb.c: kmalloc IF cfbad6c0, numif 1 Sep 29 11:57:00 kuhn kernel: usb.c: skipped 4 class/vendor specific interface descriptors Sep 29 11:57:00 kuhn kernel: usb.c: new device strings: Mfr=1, Product=2, SerialNumber=0 Sep 29 11:57:00 kuhn kernel: usb.c: USB device number 6 default language ID 0x409 Sep 29 11:57:00 kuhn kernel: Manufacturer: Sharp Sep 29 11:57:00 kuhn kernel: Product: SL-A300 Sep 29 11:57:00 kuhn kernel: usbdnet: probe Sep 29 11:57:00 kuhn kernel: probe: -> idVendor: 04dd idProduct: 8005 InterfaceClass 02 InterfaceSubclass: 0a Sep 29 11:57:00 kuhn kernel: idp_search[0]: idVendor: 049f idProduct: ffff bDeviceClass 02 bInterfaceClass: 02 bInterfaceSubclass: 06中略Sep 29 11:57:00 kuhn kernel: idp_search[0]: idVendor: 04dd idProduct: 8004 bDeviceClass 02 bInterfaceClass: ff bInterfaceSubclass: 01 Sep 29 11:57:00 kuhn kernel: idp_search[0]: idVendor: 04dd idProduct: 8005 bDeviceClass 02 bInterfaceClass: 02 bInterfaceSubclass: 0a Sep 29 11:57:00 kuhn kernel: idp_search[0]: MATCH中略Sep 29 11:57:00 kuhn murasaki.net[5654]: device is registered Sep 29 11:57:00 kuhn kernel: probe[0]: setting configuration 1 Sep 29 11:57:00 kuhn murasaki.net[5654]: execute ifup usb0中略Sep 29 11:57:00 kuhn kernel: usb.c: kusbd: /sbin/hotplug.murasaki add 6 Sep 29 11:57:00 kuhn murasaki.usb[5655]: device is added Sep 29 11:57:00 kuhn kernel: hub.c: port 2, portstatus 100, change 0, 12 Mb/s Sep 29 11:57:00 kuhn kernel: hub.c: port 1, portstatus 103, change 0, 12 Mb/s Sep 29 11:57:00 kuhn kernel: hub.c: port 2, portstatus 100, change 0, 12 Mb/s Sep 29 11:57:00 kuhn murasaki.usb[5655]: vendor:0x4dd product:0x8005 Dclass:0x2 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x0 Isubclass:0x0 Iprotocol:0x0 Sep 29 11:57:00 kuhn murasaki.usb[5655]: MATCH(usbdnet) -> match_flags:0x3 vendor:0x4dd product:0x8005 Dclass:0x2 Dsubclass:0xa Dprotocol:0x0 Iclass:0x0 Isubclass:0x0 Iprotocol:0x0 Sep 29 11:57:00 kuhn murasaki.usb[5655]: MATCH(acm) -> match_flags:0x70 vendor:0x0 product:0x0 Dclass:0x2 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x0 Isubclass:0x0 Iprotocol:0x0 Sep 29 11:57:01 kuhn kernel: usb.c: registered new driver acm Sep 29 11:57:01 kuhn kernel: acm.c: v0.21:USB Abstract Control Model driver for USB modems and ISDN adapters
"MATCH(usbdnet)" という行があるが、murasaki.usbmap で usbdnet の前 1 行を空けてたら "MATCH( usbdnet)" となって " usbdnet" を modprobe しにいって失敗していた。 しょうもな ..。
ところで一緒に acm.o というのもロードしてるが、 こいつが実態として何してるかは知らない。なくても LAN 接続には関係ない。 uub serial 関連かな?
世にちらほら増えてきた SL-A300 の web ページから、telnetd が存在すること、/etc/inetd.conf ではコメントアウトされてること、なんてのは既知なのだが、 その /etc/inetd.conf にアクセスする方法も書き換える方法もないぞ〜
ところでこのザウルスドライブとドライバなんだが、 なんかデフォルトの場所以外にインストールしたらアイコンが発見できてない。うーむ。 ま、いいか。もう使わないし。
閑話休題。コンソールを起動し、ソフトキーボードをポチポチ叩いて /etc/inetd.conf を編集する。 デフォルトで /usr/bin/vi が入ってるので vi で ... ということなんだけど、 根性で echo で書き換えた。なせばなる:
# cd /etc # echo 'telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd' >> inetd.conf # echo ttya0 >> securetty # echo ttya1 >> securetty # echo ttya2 >> securetty # echo ttya3 >> securettytelnet で入ると /bin/ash だけど、console は /bin/bash になってんのね。 ソフトキーボードを叩くのは辛いが、bash で tab とか ctrl-p とかを駆使すればこれくらいは何とか。
ここで、telnet で入ってくる仮想端末は /dev/ttya* なんね。普段 /dev/pts/* だし、 /dev/ttyp* とかの可能性も捨て切れんかったが、ps aux したら ttya の名前が見えたので こっちの流儀だと分かった。
あとはいつもどおり ps aux | grep inetd して inetd の PID 調べて kill -HUP.
% telnet odetto Trying 192.168.129.201... Connected to odetto.usbd.7n1umj. Escape character is '^]'. Lineo Embedix Linux(TM) Copyright 1999-2000 Lineo, Inc. sla300 login:... ふーん? ともかく root で login する。パスワードなしに入れる。 実はここで /etc/securetty の設定してなくて login incorrect でハネられて暫く首ひねってたのは秘密だ。 だって、telnet で root をハジく設定というのはやっても root で入れるようにする設定ってしたことないもん。
telnetd の項を有効にする時についでに ftpd も有効にしておいたけど、ftpd は入ってなかった。 ファイルのコピーはザウルスから母艦を nfs mount して行うことになる。 nfs client は入ってないので母艦からザウルスを nfs mount することは(まだ)出来ない。