カスタムPIDを備えたUSBシリアルデバイスを組み込みのttyUSB0に接続します。

カスタムPIDを備えたUSBシリアルデバイスを組み込みのttyUSB0に接続します。

私は大きな成功なしにttyUSB%nに自動的に(または手動で)接続するためのカスタムPIDを持つFTDI USBシリアルデバイスを入手しようとしています。デバイスの一般的なVID / PIDは0403/6001です。このようにプログラムすると完全に動作し、接続時に自動的にttyUSB0に接続されます。新しいPIDに準拠するようにドライバを再コンパイルしても、カスタムttyUSB0でプログラムしても表示されませんが、ftdi_sioデバイスとして認識してドライバをロードします。

ヘッダーとソースにPIDを追加しました。

// in ftdi_sio_ids.h
#define FTDI_CUSTOM_PID 0xABCD // not the actual pid
// then in ftdi_sio.c
static struct usb_device_id id_table_combined [] = {
    // devices....
    { USB_DEVICE(FTDI_VID, FTDI_CUSTOM_PID) },
    // ....

カーネル全体を再コンパイルし、デバイスを再フラッシュします。デバイスを接続すると、次の結果が表示されます。

usb 1-1: new full-speed USB device number 2 using at91_ohci
usbcore: registered new interface driver usbserial
usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver

lsusbは正しいカスタムVID / PIDを表示します。ドライバはftdi_sioを使用する必要があることを認識しているようですが、変更されていないPIDと同様にttyUSB0に接続しません。私がここで何を間違っているかについての提案はありますか?

ベストアンサー1

カーネルを一度変更する必要はなく、上書きできます。

  1. デバイスを取り外す
  2. modprobe ftdi_sio
  3. echo 0403 6001 >/sys/bus/usb-serial/drivers/ftdi_sio/new_id
  4. デバイスを接続する

これでデバイスが動作するはずです。

bind他のオプションはsysfsインターフェースを使用することです。lsusb -tこの場合、正しいパス+インターフェイスを調べることをお勧めします。

私のシステムでUSBストレージデバイスを使用するいくつかの例があります(USBシリアルデバイスによく似ています)。

$ lsusb -t
...
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
    |__ Port 1: Dev 5, If 0, Class=Hub, Driver=hub/3p, 5000M
        |__ Port 3: Dev 6, If 0, Class=Hub, Driver=hub/3p, 5000M
            |__ Port 3: Dev 7, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
 ...
 $ echo '4-1.3.3:1.0' >/sys/bus/usb/drivers/usb-storage/bind

数値の形式は次のとおりですBUS-PORT(.PORT)+:1.INTERFACE。 lsusb出力から見えない唯一の数字は、私の経験上、コロンの後の最初の数字です。1これは常に数値です。カーネルについてのより深い知識を持っている人は、それが何であるかを知らせ、反例を提示することもできます。

おすすめ記事