家庭コンピュータ環境の模索 >Linux にUSBストレージクラスのデジカメを接続する
初稿 (2001/09/16)
更新 (2004/05/09) Linux Zaurus との連携について追加。

Linux にUSBストレージクラスのデジカメを接続する。

最近のデジカメは、パソコンに対してUSB接続ができます。そして、これが重要なのですが、USB Storeage クラス対応のデジカメの場合、独自ドライバを使用せずに汎用のドライバが使え、Linux からも使えます

この文書は、Linux から USB Storage Device にアクセスする方法のガイドとして使えます。

この文書は、Linux Kernel 2.2.* と usbmgr の組み合わせについてのべています。Linux Kernel 2.4.* と murasaki については別ページを参照して下さい。

Equipment(使用機器)

purple(Linux PC) (の)が常用しているマシン。Vine Linux 2.1.5
デジカメ C-2040 Olympus の 211万画素機。葉書大の印刷に十分耐える解像度を持ち、高画素機よりもラティチュード(明るさのダイナミックレンジ)が広いので、かえって良いのだ。応答も早い。
PT-007 という、簡易ハウジングがあって、ダイビングに最適です。
結婚祝いに Naughty-Divers の方々から頂戴しました。
Systems システム要求として、次のものを仮定します。purple で使っている Vine Linux 2.1.5 は、これに適合します。
  • Linux 2.2.* 以上であること。
  • Kernel が USB サポートしていること。
  • デバイスローダとして、 usbmgr がインストールされていること。

まず繋げてみる

カメラの電源を入れ、パソコン接続キットの中にケーブルを接続します。付属のソフトなどは特に必要ありません。ただし、通常のUSBケーブルではなく、カメラ側が USB mini-B になっているケーブルが必要なだけです。

USB機器のコツはまず繋げてみることです。usbmgr が正常に動作していれば、 /proc/bus/usb/devicesに接続された機器の情報が出てきます。

もし、運が良ければ、usbmgr が接続機器が USB Storeage クラスであることを察 知して、適切なドライバをロードし、適切なマウントポイントに、記録デバイス (Smart Media)の内容をマウントします。そういう方は、ここで終了です。

残念ながら、(の)の purple ではそううまくは行かなかったので、手動で設定しま した。

usbmgr の設定

  1. /proc/bus/usb/devicesを見て、接続機器の Vendor ID と Product ID を調べます。C-2040 の場合は、次のようになりました。この 中の、Vendor=07b4 が Vendor ID、ProdID=0105 が Product ID になります。

    T:  Bus=01 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#=  4 Spd=12  MxCh= 0
    D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=07b4 ProdID=0105 Rev= 1.00
    S:  Manufacturer=OLYMPUS
    S:  Product=C-2040ZOOM
    S:  SerialNumber=000165337487
    C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  0mA
    I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
    E:  Ad=04(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
    
  2. この情報を元に、usbmgr の設定ファイル/etc/usbmgr/usbmgr.confに加筆します。

    ### CAMERA
    #
    # C-2040 [Olympus] added by KONDOU
    vendor 0x7b4 product 0x105 script mount module scsi_mod , sd_mod , usb-storage
    # FinePix1300 [FUJIFILM]
    
    

    ご推察の通り、#ではじまる行はコメントです。
    例を示しましたが、詳しくは、usbmgr のマニュアルを参照して下さい。
    vendor, product
    この組み合わせで製品を特定します。
    script
    接続、脱接した時に実行するスクリプトを指定します(後述)。Storage Device なので、mount/umount するためのスクリプトを指定しておきます。
    module
    機器に必要なモジュールを , で区切って書きます。USB Storage Device は SCSI ディスクとしてアクセスされるので、それに必要なモジュールを指定しておきます。。
  3. Storage Device をマウントするために必要なスクリプトを書きます。
    /etc/usbmgr/networkを参考に、/etc/usbmgr/mountというスクリプトを作成しましょう。

    #!/bin/sh
    #
    # USB Storage Device Mount script
    #       Copyright (c) by Shuu Yamaguchi 
    #       Can be freely distributed and used under the terms of the GNU GPL.
    #
    # mount
    #
    
            case $ACTION in
            add)
                    /bin/mount -t vfat /dev/sda1 /mnt/C2040
                    ;;
            remove)
                    /bin/umount /mnt/C2040
                    ;;
            esac
    
    

    スクリプトは、USB機器が取りつけられた時は、add の、取り外された時は remove のオプションが $ACTION に付けて実行されます。
    接続された、USB Storage Device が、/dev/ のどのデバイスにあたるかは、usbmgr の出力情報にも含まれているはずですが、CD-R プログラムの、cdrecord を使うのも簡単です。cdrecord --scanbuc(root で実行しましょう)

    Cdrecord 1.9 (i486-pc-linux-gnu) Copyright (C) 1995-2000 Jrg Schilling
    Linux sg driver version: 2.1.39
    Using libscg version 'schily-0.1'
    scsibus0:
            0,0,0     0) 'CREATIVE' 'CD-RW RW4224E   ' '1.36' Removable CD-ROM
            0,1,0     1) *
            0,2,0     2) *
            0,3,0     3) *
            0,4,0     4) *
            0,5,0     5) *
            0,6,0     6) *
            0,7,0     7) *
    scsibus1:
            1,0,0   100) 'OLYMPUS ' 'C-2040ZOOM      ' '1.00' Removable Disk
            1,1,0   101) *
            1,2,0   102) *
            1,3,0   103) *
            1,4,0   104) *
            1,5,0   105) *
            1,6,0   106) *
            1,7,0   107) *
    

    今回は、技術が無いので、決め打ちで /dev/sda1 をマウントすることにしました。
  4. あとは、マウントポイントの /mnt/C2040 を作成して、usbmgr を再起動して、デジカメを接続します。PiPi...Pi と3回、OKのビープが鳴れば成功です。

Linux Zaurus との連携について

下のフィードバックフォームより質問をいただいたので記しておく。



近藤靖浩