« OpenOCDのMPSSE対応を進めています | トップページ | 靖国神社を参拝してきました »

2025.08.14

Windows版OpenOCDをリリースします

Windowsのネイティブアプリとして動くOpenOCDのバイナリをリリースします。

→ githubからダウンロード

特徴は、

・オープンソースのlibftdi1とlibusbではなく、FTDI純正のFTD2XXで動くようにカスタマイズしているため、Zadigでlibusbに入れ替える必要がない!

・MPSSEで作られたUSB-JTAGに特化しており、その他のJTAGケーブル(CMSIS-DAPとかJ-LINKとか)への対応を全削除した

・WindowsのEXEファイルで提供されるため、「WSLを入れてください」とか言って詳しくない人を困らせる心配がない

・最新のOpenOCD 0.12をベースにしている

です。

ターゲットは、ZYNQ7000とUltraScale+に接続できることを確認しています。

使い方は、MSDOSプロンプトを開いて

openocd.exe -f ft2232h.cfg -f zynq7000.cfg

のようにします。構成が決まっていたらバッチファイルを作ったほうがいいかと思います。

OpenOCDのしくみはわかりにくいのですが、コマンドラインで-fの後ろに設定ファイルを並べていって、追加のコマンドがあれば-c "コマンド"で実行するようになっています。

ft2232h.cfgがケーブルの設定ファイル、右のzynq7000.cfgがターゲットとなるICの設定ファイルです。

特電のMPSSE-JTAGケーブルを使用する場合は、-f np1167a.cfgと指定してください。

起動すると以下のような画面になります。

Openocdwin

この画面が出ても特に何もできることはありません。これがOpenOCDの不親切なところで、CPUのデバッグをするにはTELNETでlocalhost:4444にログインしたり、GDBでリモート接続する必要があります。

例えば、物理メモリ0番地の内容をダンプするには、TeraTermを使ってlocalhost:4444にTELNET接続し、

targets
halt
mdw phys 0 0x100
redume

とコマンドを打ちます。haltさせたらresumeしないとCPUが止まったままになります。

Dump

OpenOCDは使い勝手は最悪だと思いますが、なぜか非常に人気があります。無料でオープンソースだからでしょう。

 

■なひたふ版OpenOCDの最大の特徴■

さて、このなひたふ版OpenOCDの最大の特徴は、「Windows環境で、libusbやWinUSBを使うことなくFTDIの純正デバイスドライバで動く」ということです。

FTDIのデバイスはWindows PCに刺した瞬間にデバイスドライバが自動的にダウンロードされて使用可能になるため、通常の使い方をする限りはデバイスドライバのインストールは不要です。刺したらすぐに使える大変優れたものです。

しかし、OpenOCDはオープンソースのソフトウェアで「GPL」でライセンスされています。

困ったことにGPLが大好きな人たちは「GPLのソフトは清く正しく美しく正義であるので、汚らわしく邪悪なプロプライエタリ(ソースが公開されていないソフト)をリンクさせてはいけない」という狂信的な信条によって、FTDIの純正ライブラリを使わずにlibusbやlibftdi1といった有志作成のオープンソースのデバイスドライバを使うようにしてしまいました。FTDIに関するコードがすべて削除されたのはOpenOCDのバージョン 0.10くらいからだと思います。

しかし、Windowsは1つのUSB IDに対して1つのドライバしか使えません。

そこで、Zadigという危険ツールを使って、FTDIのデバイスドライバの代わりにlibusbを使うようにレジストリを改変してしまうことを推奨しているのです。

zadigを使ってFTDIドライバをlibusbに置き換えてしまうと、そのPCではFTDIのドライバが使えなくなりますので、OpenOCDを使うという目的のためにFTDIを使う他のアプリが使えなくなってしまうという、大きな犠牲を払う必要があったのです。

FTDIドライバが使えなくなった状態を解除するには、デバイスドライバをアンインストールして再インストールする必要がありますが、繰り返しているうちに、PCはだんだんおかしくなってきます。

そもそもOpenOCDがFTDIのドライバを使わないのは、オープンソースとプロプライエタリを混ぜないというくだらない理由によるものですが、ユーザにとっては何の利益にもなりません。むしろ毎回のドライバ入れ替えで危険を体験するデメリットしかありません。

そこで、なひたふは、libusbとlibftdi1で汚染されたmpsse.cをFTDI純正ドライバで動くように書き換えたのです。

Linuxの環境で作られたソフトをWindowsのネイティブアプリとしてビルドするためにMinGWというツールがあります。このなひたふ版OpenOCDはMinGWでビルドしているので、WSLやVM Ware、Virtual Boxなどの仮想環境を用意する必要もありません。

WindowsのネイティブアプリとしてEXEファイルで提供されます。

 

◆ビルド情報◆

GPLの流儀に従ってソースコードを公開します。

ソースコードはオリジナルのOpenOCD 0.12からsrc/jtag/drivers/mpsse.cだけを改変しています。改変したソースコードをこちらにおいておきます。

https://github.com/tokuden/openocd-win-ftd2xx/

configureの書式は

./configure --disable-werror --enable-stlink=no --enable-ti-icdi=no --enable-ulink=no --enable-angie=no --enable-usb-blaster-2=no --enable-ft232r=no --enable-vsllink=no --enable-xds110=no --enable-osbdm=no --enable-opendous=no --enable-armjtagew=no --enable-rlink=no --enable-usbprog=no --enable-esp-usb-jtag=no --enable-cmsis-dap-v2=no --enable-cmsis-dap=no --enable-nulink=no --enable-kitprog=no --enable-usb-blaster=no --enable-presto=no --enable-openjtag=no --enable-linuxgpiod=no --enable-dmem=no --enable-sysfsgpio=no --enable-remote-bitbang=no --enable-linuxspidev=no --enable-buspirate=no --enable-dummy=no --enable-vdebug=no --enable-jtag-dpi=no --enable-jtag-vpi=no --enable-rshim=no --enable-xlnx-xvc=no --enable-jlink=no --enable-parport=no --enable-amtjtagaccel=no --enable-ep93xx=no --enable-at91rm9200=no --enable-bcm2835gpio=no --enable-imx-gpio=no --enable-am335xgpio=no LDFLAGS="-lftd2xx"

です。

いろいろオプションがついていますが、不要なケーブルの対応を削除しているだけで、重要なのは--disable-werror と LDFLAGS="-lftd2xx"のみです。MSYS2 MINGW64環境でコンパイルしています。

|

« OpenOCDのMPSSE対応を進めています | トップページ | 靖国神社を参拝してきました »

コメント

コメントを書く



(ウェブ上には掲載しません)




« OpenOCDのMPSSE対応を進めています | トップページ | 靖国神社を参拝してきました »