OpenOCD-0.6.0-rc1 with WinUSB (32bit版)

ねむいさんのぶろぐで出ている様に、OpenOCDに新バージョンのMPSSドライバが追加された。これを使用するには、WinUSBを使用する事になるのだが、いくつかの難所が待ち受けていた。4日間の夏休みの内、3日と+αを使用してようやくゴールにたどり着けたのでその内容を記述する。

3日もかかったのは、偏に調査不足とcmakeの挙動のためだ……いや、cmakeの挙動が9割を占める。調査不足と言うのは、「WinUSBを使う=libusb-1.0を使う=libftdi-1.0を使う」と思い込んでいたからだ。実際にはlibftdi-1.0は使わず、その分、OpenOCD側でlibusb-1.0を使うように細工しているのが現状の様であった。

問題はcmakeである。
libftdiをmingwでビルドするためにはcmakeで環境を構築する必要がある。Win7(64bit)をメインPCとしている自分にとって、今まで、ビルドする環境は(数ある中で)Cygwin+mingwを選択していた。この環境でlibusb0とlibusb-1.0(厳密にはlibusb0はdllのバイナリからリンクファイルを逆生成しているのだが…)を作成する事は出来た。が、libftdiをビルドしようとしてcmakeを起動すると、指定したコンパイラやオプションが反映されなくて、Makefile作成まで流れてくれなかった。これで2日半はつぶしたようなものだ。

最終手段として、Linuxでクロスコンパイルをする事にした。Linuxはそーとー久しぶりで、どのディストリビューションが良いのかさっぱり分からなかったので、とりあえずネット上でよく見かけるUbuntu(v12.04)をもう使用する事がなく、破棄寸前だったノートPCにインストールした。以下はそのUbuntuでの作業内容です。しかし、今時のLinuxはかなりWindowsライクのGUIを持ってますね。GNOMEにするかKDEにするかを決めてCUIからxstartとしてGUIを開始していた時代しか知らなかったので驚きです。


OpenOCD: 0.6.0-rc1
libftdi: 0.20
libusb0: 1.2.6.0
libusb-1.0(WinUSB): 1.0.9


----- Ubuntu 12.04 LTS ----------

■パッケージのインストール
Win(32bit)とWin(64bit)のクロスコンパイルをするために、両方のmingwを入れています。因みに、32bit版を作成するには "i686" の方、64bit版を作成するには "x86-64" の方が必要です。

m4 ← いつの間にか入っていた
unzip
autoconf
automake
libtool
autotools-dev
git
patch
cmake
mingw-w64-dev
g++-mingw-w64
gcc-mingw-w64
gcc-mingw-w64-base
g++-mingw-w64-i686
g++-mingw-w64-x86-64
gcc-mingw-w64-i686
gcc-mingw-w64-x86-64
binutils-mingw-w64-i686
binutils-mingw-w64-x86-64
mingw-w64-tools

■作業ディレクトリを作成する
何処にでも良いのですが、書き込み禁止とかの属性にならない位置に作業ディレクトリを作っておきます。私は /home/jujurou/tool_temp/ ディレクトリを作成しました。また、パッチファイルやその他もろもろを入れておくパラメータディレクトリを作成します。

$ cd ~/
$ mkdir tool_temp
$ mkdir param_file

 ※ param_file には、今まで使用してきたパッチファイルを入れておきました。


■libusb0を準備する
libusb0はdllが既にあるので、これからライブラリを逆生成します。
http://sourceforge.net/apps/trac/libusb-win32/wiki
より libusb-win32-bin-1.2.6.0.zip をDLして作業ディレクトリにコピーする。

$ unzip ./libusb-win32-bin-1.2.6.0.zip
$ rm ./libusb-win32-bin-1.2.6.0.zip

$ cd ./libusb-win32-bin-1.2.6.0/bin/x86/
$ cp ./libusb0_x86.dll ./libusb0.dll
$ gendef ./libusb0.dll
$ i686-w64-mingw32-dlltool -d ./libusb0.def -l ./libusb.a
$ sudo cp ./libusb.a /usr/i686-w64-mingw32/sys-root/mingw/lib/
$ sudo cp ./libusb0.dll /usr/i686-w64-mingw32/sys-root/mingw/bin/
$ sudo cp ../../include/lusb0_usb.h /usr/i686-w64-mingw32/sys-root/mingw/include/usb.h


■libusb-1.0をビルドする
$ git clone git://git.libusb.org/libusb.git
$ cd ./libusb/
$ autogen.sh
$ ./configure --prefix=/usr/i686-w64-mingw32/sys-root/mingw --host=i686-w64-mingw32
$ make
$ sudo make install


■libftdiをビルドする
$ cd ~/tool_temp/
$ git clone git://developer.intra2net.com/libftdi
$ cd ./libftdi/
$ mkdir build_i686
*** Toolchain-mingw32.cmake ファイルを編集し、パラメータディレクトリに保存する ***
$ cmake -DCMAKE_TOOLCHAIN_FILE=../../param_file/Toolchain-mingw32.cmake -DCMAKE_INSTALL_PREFIX=/usr/i686-w64-mingw32/sys-rot/mingw ..
$ make
$ sudo make install

何故か libftdi.dll.a, libftdi.a のファイルが bin ディレクトリに生成されるので lib ディレクトリに移動しておきます。

$ sudo mv /usr/i686-w64-mingw32/sys-rot/mingw/bin/libftdi.dll.a /usr/i686-w64-mingw32/sys-rot/mingw/lib
$ sudo mv /usr/i686-w64-mingw32/sys-rot/mingw/bin/libftdi.a /usr/i686-w64-mingw32/sys-rot/mingw/lib


■OpenOCDにパッチを当てつつビルドする
$ cd ~/tool_temp/
$ git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocd
$ cd ./openocd/
$ git checkout v0.6.0-rc1
$ patch -p1 < ../param_file/armv7mx.patch
$ patch -p1 < ../param_file/mb9bf618.patch
$ ./bootstrap
$ ./configure --enable-maintainer-mode --disable-werror --disable-shard --enable-ft2232_libftdi --enable-ftdi --enable-jlink --enable-vsllink --enable-stlink --build=i686-linux-gnu --host=i686-w64-mingw32 CFLAGS="-I/usr/i686-w64-mingw32/sys-root/mingw/include" LDFLAGS="-L/usr/i686-w64-mingw32/sys-root/mingw/lib -lusb-1.0"
$ make
$ i686-w64-mingw32-strip ./src/openocd.exe


■windows環境に持って行く
作ったdllとexe等をwindows環境に持って行きます。
持って行くファイルは次の場所にあります。tclディレクトリ以外はopenocd.exeと同じディレクトリに入れておきます。

/usr/i686-w64-mingw32/sys-root/mingw/bin/libusb0.dll
/usr/i686-w64-mingw32/sys-root/mingw/bin/libusb-1.0.dll
/usr/i686-w64-mingw32/sys-root/mingw/bin/libftdi.dll
~/tool_temp/openocd/src/openocd.exe
~/tool_temp/openocd/tcl ← ディレクトリ丸ごと必要

■お試し
jtagkeyを使ってMB9BF618にアクセスしてみます。

先ずは、jtagkeyのドライバをWinUSBに変更します。
変更方法は…zadigを使います。

それぞれの電源を入れて…以下のコマンドを打てば(おそらく)繋がります。

> ./openocd.exe -s ./tcl -f interface/ftdi/jtagkey.cfg -f target/fm3.cfg

後はtelnetでアクセスしたり、してください。


作成したファイルは【物置】に置いています。
スポンサーサイト

コメントの投稿

非公開コメント

黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
最新記事
最新コメント
カテゴリ
ユーザタグ

ぺるけ RaspberryPi Linux トランジスタ式ミニワッター TRminiWatterPart4 MPD OpenOCD イーサネットコンバータ FON2405E DAC buildroot FM3ペリフェラル BeagleBoneBlack FM3評価ボード library OpenGL mingw ODROID-U2 TL-WR700N Edison bitbake KiCad 計測 VMware シングル FM4 ミニワッター 6N6P プリアンプ 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter