2017年10月22日日曜日

APB-3 を Ubuntu 上の wine で実行させる



Ojisankoubou のABP-3 を購入したが、普段 Ubuntu で作業をしているので Win PC を立ち上げるのが面倒なので、Ubuntu 上で wine を使用して測定できないかと検討し, 起動させる事ができた時の覚え書き

Install 環境

Ubuntu 17.04
CPU      Core i5-7600
Chiset   H270
wine      2.19-devel
APB-3   PC      20170917
              FPGA 12091415

Ubuntu 上の wine で APB-3.exeを動作させる為の注意点

a.  wine用 libftd2xx access wrapper である ftd2xx.dll.so の compile を
    する為にの i386 library が /wineroot/lib32 になってる必要がある
    install した wine は i386 library directory が /wineroot/lib など lib32以外の
    名前になっており、その場合は ln -s lib lib32 などで link を張ること
            (Install作業 1  の真ん中あたり参照)

b.  APB-3 の通信は /dev/ttyUSB? を通して行なっているわけではなく、 libftd2xx を介して
    行なっている, しかし APB-3を PC に接続した時に /dev/ttyUSB? に attach され wine 上の
    APB-3から access が排他される為 /dev/ttyUSB? を unbind する必要がある
    /etc/udev/rule.d に unbind する rule を追加
             (Install作業 6  を参照 )

 

Hierarchy

     +----------------------------------------------------------------------+
     |  APB-3.exe tool (Ojisankoubou)    app C#           | APB-3 tool
     +----------------------------------------------------------------------+
     |  FTD2XX_NET (FTDI corp)       C# .net wrapper   | APB-3 付属の物を使用
     +----------------------------------------------------------------------+
     |  WINE                                                              | 1, 2, 3
     +----------------------------------------------------------------------+
     |  ftd2xx.dll.so (linux)   linux ftd driver wrapper       | 4, 5x
     |                            include the libxftd2xx.a          |
     |  (FTD2XX (FTID corp, win) ftdi driver の代り)      |
     +----------------------------------------------------------------------+
     |  kernel, udeve (Ubuntu 17.04)                            | 6
     +----------------------------------------------------------------------+
     |  APB-3 本体 (FT232H device)                            |
     +----------------------------------------------------------------------+
%

Install 作業

1.  ubuntu に wine を install する 2.19(201710190時の develop版)

      wineの root は "/opt/wine-devel" になる

          sudo apt-get install libx11-dev:i386 libfreetype6-dev:i386
          wget -nc https://dl.winehq.org/wine-builds/Release.key
          sudo apt-key add Release.key
          sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/
          sudo apt-get update                # (20171206追記)
          sudo apt-get install --install-recommends winehq-devel
          sudo apt-get install -o Dpkg::Options::="--force-overwrite" --install-recommends winehq-devel   (Ubuntu17.10 では "/lib/udev/hwdb.d/20-sane.hwdb" が lock されていて errorになるので overwrite option を付ける 201803030追記)
          sudo ln -s /opt/wine-devel/lib /opt/wine-devel/lib32
                    #   (ftd2xx.dll.so を compile する時に */lib32 を見ている)

       msgothic.ttc を copy もしくは、 類似 font を /opt/wine-devel/share/wine/fonts  copy

      同 versionの soruce を取ってきて wine-x.xx/include を /opt/wine-devel/. にcopy
          git clone git://source.winehq.org/git/wine.git
          cp wine.git/include /opt/wine-devel/.
                         (正確には同一 verison ではない)
      もしくは
    https://dl.winehq.org/wine/source/ から tar.gzを取る
          cp wine-x.xx/include /opt/wine-devel/.


2.  wineの working directory の作成 (通常各自の home の下)

        WINEARCH=win32 WINEPREFIX=~/.wine winecfg # (bashで)
                                    (201803030追記 root で実行, 一版 user では libwine.so.1 が
                                     Operation not permitted になる)

3.  winetricks を入れる (app, dllなど入れる場合に必要、 今回特に使わない)

        apt-get install winetricks
        wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
                    # apt-get は wget のが使えない場合

4.  ftd2xx.dll.so の install  (wine側の ftdi wrapper)

      sudo apt-get install binutils:i386   # (必要かどうか忘れた)

      https://github.com/brentr/wineftd2xx からすべての file を copy
        git clone git://github.com/brentr/wineftd2xx

      Makefile に wine includeの場所の指定する
      (通常は winedllpath で解決できるはず)
        CFLAGS = -g -O0 -Wall -I/opt/wine-devel/include  # "-Iうんたら" を追加

        make      # FTDIより libftd2xx.1.1.12.tar.gz を取ってくるが後で置き換える

      FTDI site (http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx-i386-1.4.6.tgz)
      とってくる置き換える
        wget http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx-i386-1.4.6.tgz
        tar xvfz libftd2xx-i386-1.4.6.tgz release/build/libftd2xx.a
        mv release/build/libftd2xx.a libftd2xx1.1.12/build/i386/.
        rm -rf release

        # compile
        make
        install
        sudo cp ftd2xx.dll.so /opt/wine-devel/lib/wine/.
        sudo cp libftd2xx.def /opt/wine-devel/lib/wine/.

      参考資料
        http://gatopeichs.blogspot.jp/2012/10/usb-d2xx-driver-for-wine-on-linux.html

5x. libd2xx_table の compile (特に必要なし, もし必要になれば)

        git clone git:/github.com/psi46/HDItest
        cd HDItest/FTDI-1.0.4/libftd2xx1.0.4/lib_table
        Makefile の compile, link option に -m32を追加
              ("CC = gcc" を "CC = GCC -m32" とした)
        make

6.  /etc/udev/rule.d に APB-3 接続時の /dev/ttyUSB? を unbind する rule を追加

        cat <<EOF > 45-ftdi-APB3.rules
# unbind the ttyUSB? device, if the APB-3 measurement is pluged to PC
#
### ATTRS{idVendor}=="0403",ATTRS{idProduct}=="6014"
SUBSYSTEM=="usb",ACTION=="add",ATTRS{product}=="APB-3 ver.3 Ojisankoubou",RUN+="/bin/sh -c 'echo -n %k > /sys/bus/usb/drivers/ftdi_sio/unbind'"
EOF
        sudo cp 45-ftdi-APB3.rules /etc/udev/rule.d/.
       rm 45-ftdi-APB3.rules
       sudo udevadm control --reload-rules

7.  APB-3.exeの起動

        APB-3 の usbを接続する (もちろん APB-3電源を投入)
        wine APB-3.exe
                         (201803030追記 root で実行, 一版 user では libwine.so.1 が
                          Operation not permitted になる)

その他の事項

### debug 時に使用した tool など


WINEDEBUG=+loaddll wine APB-3.exe 2>&1        # loadされた dllを表示
WINEDEBUG=+dll wine APB-3.exe 2>&1        # DLL accessを表示
WINEDEBUG=+ntdll wine APB-3.exe 2>&1        # DLL fileに関する表示
                                            # loadしようとして load できなかった access も表示
udevadm monitor --env --subsystem-match=usb    # USB の probe/unprobe の確認

### wine の削除 (201803030追記)

sudo apt-get install --install-recommends winehq-devel
sudo apt-get remove wine-\*
sudo apt-get purge wine wine-\*
audo apt-get autoremove