続々・SL-C760でUSB(3)

CD-ROMを使う

基本的にUSBストレージクラスの機器と同様なんだけど、CD-ROMの場合に必要となるモジュールがいくつかある。
ザウルスのカーネルにはCD-ROMサポートが無いので別途モジュールとして組み込んでやる。その為のモジュールがcdrom.o、そしてCD-ROMのファイルシステムであるISO9660をサポートするためのisofs.o、あとSCSIモジュールscsi_mod.oに加えて、SCSI CD-ROMサポートのsr_mod.oがSCSIディスクサポートのsd_mod.oの代わりに必要になる。
このうちisofs.oはhumorumさんの配布している一括でダウンロード可能なUSBモジュール含まれていないので、「USBモジュール (2003年12月7日)」から別途持ってくる必要がある。
これらをUSB Managerに記述して自動的にモジュールをロード(クラス6、サブクラス2、プロトコル50がCD-ROMクラス)するか、手動で下記のようにモジュールを読み込んでおく。

bash-2.05$ su
# insmod scsi_mod
# insmod cdrom
# insmod sr_mod
# insmod usb-storage
# insmod isofs

この状態でUSB CD-ROMを繋げば(今回はI-O DATAのUSB2-iCN2とI-O DATAのDVDP-i8のドライブを松下のCR-175に交換したものを使用)、CD-ROMがsr0で認識される。これはdmesgコマンドで確認できる。
ただ、sr0ってデバイスは/devに存在しないのでmknodコマンドで作ってやる必要がある。「mknod sr0 b 11 0」で作成できる。
あとは「mount -t iso9660 -o ro /dev/sr0 /mnt/usbstorage」でマウントできる。ただし、/var/runにusbディレクトリを作っているにもかかわらず、USBメモリなどと違い、ファイルのホーム画面にアイコンは出現しない。
これは/opt/QtPalmtop/lib/libqpe.so.1.5.0をバイナリエディタ等で見ると判るが、/dev/hd*(CFカード)、/dev/sd*(SCSIディスク)、/dev/mtd*(SDカード)しかサポートされていないようで、ここに/dev/sr*(SCSI CD-ROM)が含まれていれば(そんな単純なものでは無いと思うが)CD-ROMの場合でもファイルのホーム画面に現れるのだと思う。
何はともあれ、以後「/mnt/usbstorage」以下でCD-ROMの中身を見ることができる。ファイルのホーム画面から見えるようにしたければ「/home/zaurus/Documents/cdrom」ディレクトリでも作って、ここにマウントするのが良いかも知れない。
CD-ROMの交換や取り外しの際は、まず「umount /mnt/usbstorage」でアンマウントしてから、CD-ROMを取り出す。あとはUSB CD-ROMを外した場合は下記のようにモジュールをアンロードする。

bash-2.05$ su
# rmmod isofs
# rmmod usb-storage
# rmmod sr_mod
# rmmod cdrom
# rmmod scsi_mod

ちなみに今回使ったモジュールの整合性のせいか、一緒にsd_modもロードされていたので、同様にアンロードを行った。
メディアの入れ替えに関しては手動でmount、umountをするしか無いんだけど、USBなんだから素直にメディア入れ替えた後はUSBコネクタを抜き差しすれば良いか(笑)
SL-C760の/usr/lib/autofsを見ると何やらautofs関連のライブラリが入ってるし、/usr/sbinにautomountデーモンも入ってるので、実はautofsが使えるっぽい。ただ、autofsを使うとアンマウントの問題とか、Qtopiaのファイルのホーム画面との相性を考えて今回は使わないことにする。

CD-Rを使う

CD-Rドライブの場合はCD書き込みコマンドを、SCSI機器に対する低レベルインターフェースを使ってやりとりするので、さらにSCSIジェネリックサポートのsg.oが必要になる。
あとは低レベルインターフェース用のデバイスファイルとして/dev/sgaが必要になるので、「mknod /dev/sga c 21 0」で作成しておく。
以後はcdrecordなどで普通にCD-R作成などができる。この辺はmoroさんのページが詳しい。

フロッピーディスク、SuperDiskを使う

USBフロッピーディスクドライブが手元にあったので繋いでみる。一般的なUSB-FDDはUSBバスパワー給電なので、SL-C760+REX-CFU1だと給電力が足りず、ザウルスがハングアップしてしまった(汗)てな訳で、セルフパワー給電可能なUSBハブを経由して繋ぐことにする。
基本的にはUSBメモリと同じだけど、マウントする際に/dev/sda1ではなく、/dev/sdaを指定しなければならない点に注意。(SuperDisk 120MBメディアの場合も同じ)
USB Managerを使ってFDクラスで認識させる場合はクラス8、サブクラス4、プロトコル00で定義しておけば良いようだ。
ちなみにSuperDisk(LS-120)のクラスがあるのかどうかは知らない。

MOを使う

これもUSBメモリと同じ。
USB Managerを使ってMOクラスで認識させる場合はクラス8、サブクラス5、プロトコル50で定義しておけば良いようだ。