wiki:dacs/vcpdriver

Version 2 (modified by obina, 12 years ago) (diff)

--

USB接続のカウンタ制御 : CentOS6.2での動作について

ハードウェア

現象、問題点

  • CentOS 5 からは問題無く制御出来るが、CentOS 6 ではなぜか制御できない
  • DACS社のページにある通り、http://www.dacs-giken.co.jp/DA15Linux.pdf でチェック
    • カウンタをUSBで接続し、dmesg, lsmod で仮想COMドライバがロードされていることを確認。
    • Teminal を2つ開き
      入力デバイスをリダイレクト
      # cat < /dev/ttyUSB0
      
      出力デバイスをリダイレクト
      # cat > /dev/ttyUSB0
      
      こちらのターミナルで
      W0000000
      と入力すると、もう1つの端末でR0000000と表示されるはず
      
  • この方法で、CentOS5では問題無く動作するが、CentOS6では何も表示されなかった

対処

最初に結果だけ書いておく:マシンを再起動した後は、USBカウンタをつないでから

# modprobe -r ftdi_sio

と入力する(rootになってから)。一度だけやればOK。それだけ。
これでW0000000を入力すると、R0000000と表示されるようになった。

原因調査

根本的にはまだ分かっていない。
dmesg, lsusb, lsmodの出力は以下の通り

# dmesg

usb 3-1: new full speed USB device using uhci_hcd and address 2
usb 3-1: New USB device found, idVendor=0403, idProduct=6001
usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 3-1: Product: DACS-2500 V1.0
usb 3-1: Manufacturer: DACS
usb 3-1: configuration #1 chosen from 1 choice
usbcore: registered new interface driver usbserial
USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device
ftdi_sio 3-1:1.0: FTDI USB Serial Device converter detected
usb 3-1: Detected FT232BM
usb 3-1: Number of endpoints 2
usb 3-1: Endpoint 1 MaxPacketSize 64
usb 3-1: Endpoint 2 MaxPacketSize 64
usb 3-1: Setting MaxPacketSize 64
usb 3-1: FTDI USB Serial Device converter now attached to ttyUSB0
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.5.0:USB FTDI Serial Converters Driver
# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
# lsmod
Module                  Size  Used by
ftdi_sio               32115  0 
usbserial              31340  1 ftdi_sio
............

特にエラーも出ていないし、ドライバのロード順も正しいように思える。

ハード的には、単にFTDI社のSerial-USBチップがあるだけなので、 これのドライバがあれば良いはず。CentOS5, 6 ともにOS標準のパッケージに含まれている。

  • USBを抜き差ししてみる → 改善せず
  • USBを抜いた状態でlsmodしてみると、ftdi_sio, usbserialは残っている → 手動でアンロードしてみる
    # modprobe -r ftdi_sio
    
  • その後、USBケーブルを差し込む。lsmodで見ると、ftdi_sioは自動でロードされている。
    • ターミナルを開いて動作確認 → 動いた!!
    • W0000000 を入れると、R0000000 が戻ってくる
  • 再現するかどうか、色々なパターンを試す。分かったのは
    • リブート後、最初にUSBを差し込んだときには動かない(最初と同じ状況)
    • modprobe -r ftdi_sio を一度実行すれば、後は何回やっても動く
      (USBデバイスを差し込んだままでも、外した状態でも、どちらでもOK)
    • dmesg, lsmod など、通常のログに出てくる範囲では、最初のロード時と2回目のロード時では何も変わっていないように見える。

なんとなく、デバイスドライバをロードする微妙なタイミングに依存している 感じがします。以前は/etc/modprobe.conf経由だったものがCentOS6では udev経由になったため、/etc/udev/rules.d で制御するようになっています。

実はFTDI社の仮想COMドライバのページにある http://www.ftdichip.com/Drivers/VCP.htm そこにあるテクニカルノート http://www.ftdichip.com/Support/Documents/TechnicalNotes/TN_101_Customising_FTDI_VID_PID_In_Linux(FT_000081).pdf にも類似の方法は書いてあり、これも試したのですがダメでした。

納得のいかないところもありますが、 とりあえず CentOS6.2 でも使えそうです。