2015年2月28日土曜日

Raspberry PiでFTDIデバイスドライバをインストールする

RPiでFTDIドライバを使おうと思ったときのメモ。

1.まずはドライバダウンロード

ドライバのページをみたらRPi用に用意されていた。





2.インストール
ドライバインストール手順はReadMeに記載してあるので注意点を追加しておく。


Installing the D2XX shared library and static library.
------------------------------------------------------

1.  tar xfvz libftd2xx1.1.12.tar.gz

 ここで気をつけないと行けないのは所有権です。


もし共有フォルダ経由でコピペしてきた場合はchownコマンドで変更します。

This unpacks the archive, creating the following directory structure:

    build
        arm926
        i386
        x86_64
    examples
    libusb
    ftd2xx.h
    WinTypes.h

2.  cd build/arm926
3.  sudo -s   or, if sudo is not available on your system:
    su

Promotes you to super-user, with installation privileges.  If you're
already root, then step 3 (and step 7) is not necessary.

4.  cp lib* /usr/local/lib
Copies the libraries to a central location.

5.  chmod 0755 /usr/local/lib/libftd2xx.so.1.1.12
Allows non-root access to the shared object.

6.  ln -sf /usr/local/lib/libftd2xx.so.1.1.12 /usr/local/lib/libftd2xx.so
Creates a symbolic link to the 1.1.12 version of the shared object.

7.  exit
Ends your super-user session.

インストール完了。
次は正しくビルドできるかexampleでテスト。

Building the shared-object examples.
------------------------------------

1.  cd examples
2.  make -B




 Multithread項目において、ビルドエラーがでるので、一部修正します。


$ vim MultiThread/Makefile

---

TOPDIR  := $(shell cd ..; pwd)
include $(TOPDIR)/Rules.make

APP = multi

all: $(APP)

$(APP): main.c
        $(CC) main.c -lpthread -o $(APP) $(CFLAGS)

clean:
        rm -f *.o ; rm $(APP)

---
-lpthread を追加する



This builds all the shared-object examples in subdirectories.

With an FTDI device connected to a USB port, try one of the
examples, e.g. reading EEPROM.

3.  cd EEPROM/read
4.  sudo ./read
If the message "FT_Open failed" appears:
    Perhaps the kernel automatically loaded another driver for the
    FTDI USB device.

    sudo lsmod

    If "ftdi_sio" is listed:
        Unload it (and its helper module, usbserial), as follows.

        sudo rmmod ftdi_sio
        sudo rmmod usbserial

    Otherwise, it's possible that libftd2xx does not recognise your
    device's Vendor and Product Identifiers.  Call FT_SetVIDPID before
    calling FT_Open/FT_OpenEx/FT_ListDevices.


ここでDeviceOpenが出来ないなんていう自体が発生する
そういう時は
$ ldd read

コマンドを売ってみると
 libftd2xx -> not found 

というメッセージが出ていると思う。

じゃあ
$sudo vim /etc/ld.so.conf.d/libc.conf
 /usr/local/lib

を追加してから、

$ sudo ldconfig

を実行して共有ライブラリのDBを更新する。

$ ldconfig -p

 libftd2xx.so => /usr/local/lib/libftd2xx.s
こんな行があれば共有ライブラリは見つかるようになっている。

再度、

$ldd read

をやってみてまだnot found が出てる場合、

libftd2xx.so (libc6,hard-float) => /usr/local/lib/libftd2xx.so

 他のライブラリはhard-float ってついてるのにコピーしてきたlibftd2xx.soはついてない!

という場合はhard-floatでコンパイルされたlibftd2xx.soを使用する必要がある。

このファイルはネット上の
 https://s3.amazonaws.com/hayk-public/arm926-hf.zip

ここにあったので利用させてもらってます。
もし不安なら自前でビルドするしか無いでしょう。

 入れ替えてから
$ sudo ldconfig
$ ldconfig -p
やってみて hard-float になった事を確認して
$ ldd read 
でリンクが通ったか見てみると

ibftd2xx.so => /usr/local/lib/libftd2xx.so (0x76f14000)

ようやく共有ライブラリのリンクが見つかったのがわかる。

これは気づかないと分からないので、
ARMの世界には 32bit 64bit みたいに hard-float と soft-floatの2種類が混在しているということを覚えておくと迷わなくなる。



参考URL

http://www.ftdichip.com/Drivers/D2XX.htm
http://stackoverflow.com/questions/24096807/dso-missing-from-command-line

http://www.ftdichip.com/Support/Documents/TechnicalNotes/TN_132_Adding_FTDI_Devices_VCP_Driver_Support_to_Android.pdf
コメントを投稿

Androider