staging.inyokaproject.org

FTDI USB Chip mit Custom PID - Treiber

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.10 (Yakkety Yak)
Antworten |

illucian

Anmeldungsdatum:
29. Dezember 2016

Beiträge: Zähle...

Hallo zusammen,

ich portiere gerade meine Windows-Projekte nach Linux (was für mich recht neu ist). Unter anderem eine Hardware, in der ein Chip von FTDI werkelt, um die USB-Schnittstelle zur Verfügung zu stellen. Dieser hat allerdings eine CustomVID/PID-Kombination, die für mich registriert ist:

0x0403:0xE138

Unter Windows habe ich den Chip mit der FTD2xx-Schnittstelle angesprochen.

Ich habe den Treiber von der FTDI-Seite heruntergeladen und nach den Anweisungen der README installiert, ich habe also /usr/local/lib/libftd2xx.so.1.3.6 mit dem Link /usr/local/lib/libftd2xx.so im Dateisystem.

Dann habe ich in etc/udev/rules.d/99-libftdi.rules angelegt und mit folgendem Inhalt gefüllt:

# allow users to claim the device
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="e138", MODE="0666", GROUP="plugdev"

Soweit, sogut. Natürlich bin ich Mitglied der Gruppe plugdev.

Leider habe ich nicht gefunden, wie ich den Treiber mit der VID/PID verknüpfe. Er läd den Treiber schlicht nicht für das Gerät.

lsusb

liefert:

...
Bus 001 Device 012: ID 0403:e138 Future Technology Devices International, Ltd
...

- -

lsusb -t

liefert:

...
 |__ Port 2: Dev 12, If 0, Class=Vendor Specific Class, Driver=, 12M
...

- -

lsusb -v -d 0403:e138

liefert:

Bus 001 Device 012: ID 0403:e138 Future Technology Devices International, Ltd 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x0403 Future Technology Devices International, Ltd
  idProduct          0xe138 
  bcdDevice            4.00
  iManufacturer           1 LiveLight
  iProduct                2 LiveLight DMX Interface
  iSerial                 3 LLOZE054
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              400mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              2 LiveLight DMX Interface
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Status:     0x0000
  (Bus Powered)

Was muss noch getan werden, damit Linux den richtigen Treiber findet?

Grüße, Sebastian

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Willkommen!

Klingt interessant.

er läd den Treiber schlicht nicht für das Gerät.

Dass musst du schon selbst machen:

sudo modprobe -v TREIBERNAME

Mit

modinfo TREIBERNAME

bekommst du noch mögliche Parameter - wobei ich nicht glaube, dass die PID mit angegeben werden kann/ muss.

Mehr Meldungen bekommst du mit dmesg.

illucian

(Themenstarter)

Anmeldungsdatum:
29. Dezember 2016

Beiträge: 30

Hallo Benno,

danke für die Antwort. Leider bin ich offenbar zu neu in der Linuxwelt um zu verstehen, was er von mir erwartet, um zu funktionieren.

sudo modprobe -v ftd2xx.so
modprobe: FATAL: Module libftd2xx.so not found in directory /lib/modules/4.4.0-57-generic

Auch das manuelle kopieren der Dateien in das Verzeichnis liefert nach erneutem Aufruf von modprobe das selbe Ergebnis. Ich habe den Verdacht, dass modprobe etwas anderes erwartet als die Dateien, die ich von FTDI heruntergeladen habe.

dmesg
...
[  978.301887] usb 1-3.2: new full-speed USB device number 10 using xhci_hcd
[  978.397585] usb 1-3.2: New USB device found, idVendor=0403, idProduct=e138
[  978.397592] usb 1-3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  978.397597] usb 1-3.2: Product: LiveLight DMX Interface
[  978.397601] usb 1-3.2: Manufacturer: LiveLight
[  978.397605] usb 1-3.2: SerialNumber: LLOZE054

Grüße, Sebastian

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Lasse mal .so weg. Und zeige auch entsprechend modinfo dazu.

illucian

(Themenstarter)

Anmeldungsdatum:
29. Dezember 2016

Beiträge: 30

Problem (halb) gelöst:

Es gibt in der Shared Library von FTDI eine Funktion, die es unter Windows nicht gab. Mit der muss man die VID/PID setzen, damit die Library weiß, welches Device sie öffnen soll. Das scheint ohne weiteren Treiber zu funktionieren. Damit kann ich jetzt aus meinen eignen Programmen auf das Interface zugreifen. Zumindest mit einem Testprogramm, das eigentliche Hauptprogramm umzustricken wird viel mehr Aufwand, fürchte ich.

Halb gelöst, weil ich auch versuchen wollte, das Interface an eine Virtualbox weiterzureichen (in der Windows läuft, damit ich die Windowsfunktionialität des Programms im Auge behalten kann). Die Virtualbox findet das Interface aber immer noch nicht, so dass ich nicht anhaken kann, das Interface an das Gastbetriebsystem weiterzureichen.

Danke fürs Mitdenken.

Sebastian

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Benno-007 schrieb:

Lasse mal .so weg. Und zeige auch entsprechend modinfo dazu.

Das wären Infos, mit denen man was anfangen könnte. Wurde das Modul nun automatisch geladen? Was wird ausgegeben, wenn du es stattdessen zuvor manuell mit -v "sprechen" und laden lässt?

illucian

(Themenstarter)

Anmeldungsdatum:
29. Dezember 2016

Beiträge: 30

modprobe -v ftd2xx
modprobe: FATAL: Module ftd2xx not found in directory /lib/modules/4.4.0-57-generic

modinfo ftd2xx
modinfo: ERROR: Module ftd2xx not found.

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Dann war deine Vermutung zutreffend, dass das nicht mit den normalen Modulen und Tools zu bearbeiten ist. Wobei es schon seltsam ist, weil ja das Modul trotzdem irgendwie vorhanden sein und geladen werden muss. Wurde es nun also automatisch geladen, weil es ja ging? Wenn ja, wie lautet es wirklich:

lsmod

Welches ist es denn da?

illucian

(Themenstarter)

Anmeldungsdatum:
29. Dezember 2016

Beiträge: 30

Wobei ich inzwischen glaube, dass ftd2xx.so ein Verweis auf ftd2xx.so.1.3.6 ist, was wiederum "nur" eine Shared Library ist. Die ohne weiteren Treiber mit dem USB_Chip redet. Ist das möglich?

illucian

(Themenstarter)

Anmeldungsdatum:
29. Dezember 2016

Beiträge: 30

mit lsmod habe ich nichts gefunden, was auf das Interface schließen lässt:

lsmod
Module                  Size  Used by
drbg                   32768  1
ansi_cprng             16384  0
ctr                    16384  1
ccm                    20480  1
rfcomm                 69632  2
pci_stub               16384  1
vboxpci                24576  0
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               454656  4 vboxnetadp,vboxnetflt,vboxpci
bnep                   20480  2
rtsx_usb_ms            20480  0
memstick               20480  1 rtsx_usb_ms
binfmt_misc            20480  1
nls_iso8859_1          16384  1
arc4                   16384  2
intel_rapl             20480  0
intel_soc_dts_iosf     16384  0
intel_powerclamp       16384  0
hid_sensor_als         16384  0
hid_sensor_rotation    16384  0
hid_sensor_incl_3d     16384  0
coretemp               16384  0
hid_sensor_magn_3d     16384  0
hid_sensor_accel_3d    16384  0
hid_sensor_gyro_3d     16384  0
uvcvideo               90112  0
hid_sensor_trigger     16384  12 hid_sensor_gyro_3d,hid_sensor_incl_3d,hid_sensor_accel_3d,hid_sensor_rotation,hid_sensor_als,hid_sensor_magn_3d
industrialio_triggered_buffer    16384  6 hid_sensor_gyro_3d,hid_sensor_incl_3d,hid_sensor_accel_3d,hid_sensor_rotation,hid_sensor_als,hid_sensor_magn_3d
kvm_intel             172032  0
iwlmvm                311296  0
kfifo_buf              16384  1 industrialio_triggered_buffer
videobuf2_vmalloc      16384  1 uvcvideo
videobuf2_memops       16384  1 videobuf2_vmalloc
industrialio           61440  9 hid_sensor_trigger,hid_sensor_gyro_3d,industrialio_triggered_buffer,hid_sensor_incl_3d,hid_sensor_accel_3d,hid_sensor_rotation,hid_sensor_als,kfifo_buf,hid_sensor_magn_3d
videobuf2_v4l2         28672  1 uvcvideo
kvm                   540672  1 kvm_intel
hid_sensor_iio_common    16384  7 hid_sensor_trigger,hid_sensor_gyro_3d,hid_sensor_incl_3d,hid_sensor_accel_3d,hid_sensor_rotation,hid_sensor_als,hid_sensor_magn_3d
mac80211              737280  1 iwlmvm
videobuf2_core         36864  2 uvcvideo,videobuf2_v4l2
v4l2_common            16384  1 videobuf2_v4l2
irqbypass              16384  1 kvm
videodev              176128  4 uvcvideo,v4l2_common,videobuf2_core,videobuf2_v4l2
btusb                  45056  0
btrtl                  16384  1 btusb
hid_multitouch         20480  0
btbcm                  16384  1 btusb
media                  24576  2 uvcvideo,videodev
snd_hda_codec_hdmi     53248  1
joydev                 20480  0
punit_atom_debug       16384  0
btintel                16384  1 btusb
bluetooth             520192  29 bnep,btbcm,btrtl,btusb,rfcomm,btintel
snd_hda_codec_realtek    86016  1
crct10dif_pclmul       16384  0
snd_hda_codec_generic    77824  1 snd_hda_codec_realtek
crc32_pclmul           16384  0
ghash_clmulni_intel    16384  0
cryptd                 20480  1 ghash_clmulni_intel
iwlwifi               200704  1 iwlmvm
snd_intel_sst_acpi     16384  0
snd_intel_sst_core     73728  1 snd_intel_sst_acpi
snd_soc_rt5640        114688  0
snd_soc_sst_mfld_platform    90112  1 snd_intel_sst_core
snd_soc_rl6231         16384  1 snd_soc_rt5640
snd_soc_core          212992  2 snd_soc_rt5640,snd_soc_sst_mfld_platform
snd_hda_intel          40960  3
cfg80211              565248  3 iwlwifi,mac80211,iwlmvm
snd_hda_codec         135168  4 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_intel
snd_compress           20480  1 snd_soc_core
ac97_bus               16384  1 snd_soc_core
snd_hda_core           73728  5 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel
snd_pcm_dmaengine      16384  1 snd_soc_core
mei_txe                20480  0
snd_hwdep              16384  1 snd_hda_codec
input_leds             16384  0
mei                    98304  1 mei_txe
serio_raw              16384  0
shpchp                 36864  0
lpc_ich                24576  0
snd_pcm               106496  8 snd_soc_rt5640,snd_soc_core,snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel,snd_soc_sst_mfld_platform,snd_pcm_dmaengine,snd_hda_core
snd_seq_midi           16384  0
snd_seq_midi_event     16384  1 snd_seq_midi
snd_rawmidi            32768  1 snd_seq_midi
snd_seq                69632  2 snd_seq_midi_event,snd_seq_midi
snd_seq_device         16384  3 snd_seq,snd_rawmidi,snd_seq_midi
snd_timer              32768  2 snd_pcm,snd_seq
snd                    81920  20 snd_hda_codec_realtek,snd_soc_core,snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_rawmidi,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel,snd_soc_sst_mfld_platform,snd_seq_device,snd_compress
8250_fintek            16384  0
soundcore              16384  1 snd
dw_dmac                16384  0
intel_vbtn             16384  0
dw_dmac_core           24576  1 dw_dmac
snd_soc_sst_acpi       16384  0
rfkill_gpio            16384  0
i2c_designware_platform    16384  0
i2c_designware_core    20480  1 i2c_designware_platform
sparse_keymap          16384  1 intel_vbtn
8250_dw                16384  0
spi_pxa2xx_platform    24576  0
pwm_lpss_platform      16384  0
pwm_lpss               16384  1 pwm_lpss_platform
mac_hid                16384  0
parport_pc             32768  0
ppdev                  20480  0
lp                     20480  0
parport                49152  3 lp,ppdev,parport_pc
autofs4                40960  2
btrfs                 987136  0
xor                    24576  1 btrfs
raid6_pq              102400  1 btrfs
hid_sensor_hub         20480  8 hid_sensor_trigger,hid_sensor_gyro_3d,hid_sensor_incl_3d,hid_sensor_accel_3d,hid_sensor_rotation,hid_sensor_als,hid_sensor_magn_3d,hid_sensor_iio_common
dm_mirror              24576  0
dm_region_hash         24576  1 dm_mirror
dm_log                 20480  2 dm_region_hash,dm_mirror
rtsx_usb_sdmmc         28672  0
rtsx_usb               24576  2 rtsx_usb_sdmmc,rtsx_usb_ms
hid_generic            16384  0
usbhid                 49152  0
mmc_block              36864  4
i915                 1208320  9
i2c_algo_bit           16384  1 i915
drm_kms_helper        155648  1 i915
syscopyarea            16384  1 drm_kms_helper
psmouse               131072  0
sysfillrect            16384  1 drm_kms_helper
sysimgblt              16384  1 drm_kms_helper
fb_sys_fops            16384  1 drm_kms_helper
drm                   364544  10 i915,drm_kms_helper
ahci                   36864  1
libahci                32768  1 ahci
wmi                    20480  0
video                  40960  1 i915
i2c_hid                20480  0
hid                   118784  6 i2c_hid,hid_multitouch,hid_generic,hid_sensor_hub,usbhid
fjes                   28672  0
sdhci_acpi             16384  0
sdhci                  45056  1 sdhci_acpi

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Stimmt, so sind eigentlich gar keine Treiber, sondern nur Shared Libraries. Schaue trotzdem einmal nach, ob irgendwelche Treiber geladen werden (z.B. Vorher-nachher-Vergleich in lsmod). Vielleicht geht es so etwas einfacher:

lsmod > davor
lsmod > danach
diff davor danach

illucian

(Themenstarter)

Anmeldungsdatum:
29. Dezember 2016

Beiträge: 30

Ok, folgendes habe ich gemacht:

- Interface abgezogen. - lsmod >davor - Interface gesteckt - Testprogramm erfolgreich laufen lassen FT_Open hat funktioniert, ich konnte auch das Eeprom auslesen - lsmod >danach

Keine Unterschiede.

illucian

(Themenstarter)

Anmeldungsdatum:
29. Dezember 2016

Beiträge: 30

Achso, fällt mir gerade ein, falls das hilft: In der ReadMe von der Library stand, sie baut auf libusb auf.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

ftd2xx.so

.so steht doch für shared object file. Sind Treiber nicht immer .ko, für kernel object files?

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Ja. Soweit waren wir schon, wobei ko nicht nochmal erwähnt wurde, nur .so. Er hat es nun in einem andren Thema gelöst, was noch unklar war.

Antworten |