GNU/Linux >> Linux の 問題 >  >> Linux

カスタムPidを備えたUsb-シリアルデバイスを組み込みのTtyusb0に接続しますか?

カスタムPIDを備えたFTDIUSB-Serialデバイスを取得してttyUSB%nに自動的に(または手動で)接続しようとしていますが、あまり成功していません。デバイスの通常のVID/PIDは0403/6001です。このようにプログラムすると、完全に機能し、プラグインすると自動的にttyUSB0に接続します。新しいPIDを尊重するようにドライバーを再コンパイルしても、カスタム1でプログラムすると、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. デバイスのプラグを抜きます
  2. modprobe ftdi_sio
  3. echo 0403 6001 >/sys/bus/usb-serial/drivers/ftdi_sio/new_id
  4. デバイスを接続します

そして、デバイスは機能するはずです。

もう1つの方法は、bindを使用することです。 sysfsインターフェース; lsusb -tを使用することをお勧めします その場合の正しいパス+インターフェースを理解するために。

私のシステムのusb-storageデバイスの部分的な例を使用します(usb-serialの場合と非常によく似ています)。

$ 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でした 私の経験では。カーネルに関する深い知識を持っている人なら、おそらくそれが何であるかを教えてくれ、反例を提供することができます。

関連:ローカルファイルサーバーからファイルを元に戻しますか?
Linux
  1. 組み込みデバイスにブートローダーが必要なのはなぜですか?

  2. Linux でプログラムによって ttyUSB0 を切断して再接続する

  3. カスタム PGDATA を使用した Centos 7 上の Postgresql 9.3

  1. Linux 上のデバイスに関連付けられているドライバー (モジュール) を見つける方法は?

  2. Webcam の Linux デバイス ドライバーを理解する

  3. <pid> を持つプロセスの現在の umask

  1. Linuxにデバイスドライバーをインストールする方法

  2. LinuxでDM-CryptLUKSを使用してパーティションを暗号化する方法

  3. HPEnvy6400サポートでリリースされたHPプリンタードライバーHPLIP3.21.4