= 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。それだけ。[[BR]] これでW0000000を入力すると、R0000000と表示されるようになった。 == 原因調査 == 根本的にはまだ分かっていない。[[BR]] 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 を一度実行すれば、後は何回やっても動く[[BR]](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 でも使えそうです。