スキップしてメイン コンテンツに移動

OpenOCD for Windows 64 bitをWSL2上でbashスクリプトを使いBuild

デバッグプルーブとして、stlink、cmsis-dapをつかっているのですが、ft232rもデバッグプルーブとして使いたいなと思ったところ、(windowsではlinux gpio bitbangだけはつかえませんが)Windows64ビット向けのOpenOCDのバイナリー配布で、すべてのプローブをサポートしているものがなかったので、WSL2/Debian 10 上でビルドしてみました。とりあえず動いてはいるようなので、ビルドスクリプトを、備忘録代わりにアップしてみました。
ちなみに、libusbは新しいバージョンではcmsis-dapが動かず、動いたバージョンは1.0.21でした。(ここがわからず苦労しました...)
スクリプトの実行は、例えばスクリプトをbuild-ocd-for-win.shとした場合、 sh ではなくbashで実行してください。また、スクリプト実行するまえに、以下のようにしておいてください。(capstone disassembler(linux用にはlibgpiodも含む)をビルドするのに、debianのソースパッケージを使っているためです。)
sudo apt-get build-dep capstone
sudo apt-get build-dep libgpiod
なお、クロスコンパイル環境は以下のコマンドです。
sudo apt-get install mingw-w64
これら以外のビルド環境を整える場合、以下のようにしました。(ぬけがあるかもしれません。)
sudo apt-get install build-essential debhelper flex make cmake binutils gcc automake autoconf libtool unzip wget git
ビルドスクリプトは、以下の通りです。
(追記2021/02/14:linux native buildに対応させました。)
(追記2021/02/15:openocd for esp32 を別途ビルド・別Destinationへインストールするようにしました。)
(追記2021/02/21:OpenOCDコンフィグ時の設定を一部修正しました。
#!/bin/bash
HOST_TRIPLET=x86_64-w64-mingw32
#HOST_TRIPLET=x86_64-linux-gnu
WORK_DIR=~/OpenOCD
BUILD_DIR=$WORK_DIR/$HOST_TRIPLET-build
LIBUSB1_VER=1.0.21
#LIBUSB1_VER=1.0.18
MAKE_JOBS=4

SYSROOT=$WORK_DIR/$HOST_TRIPLET-root
PREFIX=/usr

# do not build LIBGPIOD under windows
if [ "${HOST_TRIPLET}" = "x86_64-w64-mingw32" ] || \
   [ "${HOST_TRIPLET}" = "i686-w64-mingw32" ] ; then \
     BLD_LIBGPIOD=false;
fi

LIBUSB0_SRC=${WORK_DIR}/libusb-compat
LIBUSB1_SRC=${WORK_DIR}/libusb
LIBCONFUSE_SRC=${WORK_DIR}/libconfuse
HIDAPI_SRC=${WORK_DIR}/hidapi
LIBFTDI_SRC=${WORK_DIR}/libftdi
LIBJAYLINK_SRC=${WORK_DIR}/libjaylink
CAPSTONE_SRC=${WORK_DIR}/capstone
LIBGPIOD_SRC=${WORK_DIR}/libgpiod
OPENOCD_SRC=${WORK_DIR}/openocd
OPENOCD_ESP32_SRC=${WORK_DIR}/openocd-esp32

LIBUSB0_BUILD=${BUILD_DIR}/libusb-compat
LIBUSB1_BUILD=${BUILD_DIR}/libusb
LIBCONFUSE_BUILD=${BUILD_DIR}/libconfuse
HIDAPI_BUILD=${BUILD_DIR}/hidapi
LIBFTDI_BUILD=${BUILD_DIR}/libftdi
LIBJAYLINK_BUILD=${BUILD_DIR}/libjaylink
CAPSTONE_BUILD=${BUILD_DIR}/capstone
LIBGPIOD_BUILD=${BUILD_DIR}/libgpiod
OPENOCD_BUILD=${BUILD_DIR}/openocd
OPENOCD_ESP32_BUILD=${BUILD_DIR}/openocd-esp32


####
if true; then

rm -rf ${WORK_DIR}
mkdir -p ${WORK_DIR}
mkdir -p ${BUILD_DIR}

cd ${WORK_DIR}

## libusb

#git clone https://github.com/libusb/libusb.git libusb -b v$LIBUSB1_VER
wget https://github.com/libusb/libusb/archive/v$LIBUSB1_VER.zip
unzip v$LIBUSB1_VER.zip
mv libusb-$LIBUSB1_VER libusb

cd ${LIBUSB1_SRC}
./bootstrap.sh 

mkdir -p ${LIBUSB1_BUILD}
cd ${LIBUSB1_BUILD}

${LIBUSB1_SRC}/configure \
  --host=${HOST_TRIPLET} \
  --with-sysroot=$SYSROOT \
  --prefix=$PREFIX \
  --enable-static --disable-shared
make -j ${MAKE_JOBS}
#make install DESTDIR=${SYSROOT}

cd ${WORK_DIR}

## libusb-compat
git clone https://github.com/libusb/libusb-compat-0.1.git ${LIBUSB0_SRC}

cd ${LIBUSB0_SRC}
./autogen.sh
make distclean

mkdir -p ${LIBUSB0_BUILD}
cd ${LIBUSB0_BUILD}

LIBUSB_1_0_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
LIBUSB_1_0_LIBS="-L${LIBUSB1_BUILD}/libusb/.libs -lusb-1.0" \
PKG_CONFIG_PATH=${LIBUSB1_BUILD} \
${LIBUSB0_SRC}/configure \
  --host=${HOST_TRIPLET} \
  --with-sysroot=${SYSROOT} \
  --prefix=${PREFIX} \
  --enable-static --disable-shared

make -j ${MAKE_JOBS}
#make install DESTDIR=${SYSROOT}

cd ${WORK_DIR}

## libjaylink
git clone https://github.com/syntacore/libjaylink ${LIBJAYLINK_SRC}

cd ${LIBJAYLINK_SRC}
./autogen.sh

mkdir -p ${LIBJAYLINK_BUILD}
cd ${LIBJAYLINK_BUILD}

libusb_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
libusb_LIBS="-L${LIBUSB1_BUILD}/libusb/.libs -lusb-1.0" \
${LIBJAYLINK_SRC}/configure \
  --host=${HOST_TRIPLET} \
  --with-sysroot=${SYSROOT} \
  --prefix=${PREFIX} \
  --enable-static --disable-shared

make -j ${MAKE_JOBS}
#make install DESTDIR=${SYSROOT}

cd ${WORK_DIR}

## libconfuse
git clone https://github.com/martinh/libconfuse.git ${LIBCONFUSE_SRC}
cd ${LIBCONFUSE_SRC}
./autogen.sh
mkdir -p ${LIBCONFUSE_BUILD}
cd ${LIBCONFUSE_BUILD}
${LIBCONFUSE_SRC}/configure \
  --host=${HOST_TRIPLET} \
  --with-sysroot=${SYSROOT} \
  --prefix=${PREFIX} \
  --enable-static --disable-shared \
  --disable-examples
make -j ${MAKE_JOBS}
#make install DESTDIR=${SYSROOT}

cd ${WORK_DIR}

## libftdi
if [ "${HOST_TRIPLET}" = "x86_64-w64-mingw32" ] || \
   [ "${HOST_TRIPLET}" = "i686-w64-mingw32" ] ; then \

git clone git://developer.intra2net.com/libftdi ${LIBFTDI_SRC}

mkdir -p ${LIBFTDI_BUILD} 
cd ${LIBFTDI_BUILD}
cmake -DCMAKE_TOOLCHAIN_FILE=${LIBFTDI_SRC}/cmake/Toolchain-${HOST_TRIPLET}.cmake \
   -DLIBUSB_LIBRARIES=${LIBUSB1_BUILD}/libusb/.libs/ \
   -DLIBUSB_INCLUDE_DIR=${LIBUSB1_SRC}/libusb \
   -DCONFUSE_LIBRARY=${LIBCONFUSE_BUILD}/src/.libs/ \
   -DCONFUSE_INCLUDE_DIR=${LIBCONFUSE_BUILD}/src/ ${LIBFTDI_SRC}

make ftdi1-static -j ${MAKE_JOBS}
#make install DESTDIR=${SYSROOT}

elif [ "${HOST_TRIPLET}" = "x86_64-linux-gnu" ] || \
   [ "${HOST_TRIPLET}" = "i386-linux-gnu" ] ; then \

git clone git://developer.intra2net.com/libftdi ${LIBFTDI_SRC}

mkdir -p ${LIBFTDI_BUILD} 
cd ${LIBFTDI_BUILD}
cmake \
   -DLIBUSB_LIBRARIES=${LIBUSB1_BUILD}/libusb/.libs/ \
   -DLIBUSB_INCLUDE_DIR=${LIBUSB1_SRC}/libusb \
   -DCONFUSE_LIBRARY=${LIBCONFUSE_BUILD}/src/.libs/ \
   -DCONFUSE_INCLUDE_DIR=${LIBCONFUSE_BUILD}/src/ ${LIBFTDI_SRC}

make ftdi1-static -j ${MAKE_JOBS}
#make install DESTDIR=${SYSROOT}

fi

cd ${WORK_DIR}

## hidapi
git clone https://github.com/signal11/hidapi.git ${HIDAPI_SRC}
cd ${HIDAPI_SRC}
./bootstrap
mkdir -p ${HIDAPI_BUILD}
cd ${HIDAPI_BUILD}
${HIDAPI_SRC}/configure \
  --host=${HOST_TRIPLET} \
  --with-sysroot=${SYSROOT} \
  --prefix=${PREFIX} \
  --enable-static --disable-shared
make -j ${MAKE_JOBS}
#make install DESTDIR=${SYSROOT}

cd ${WORK_DIR}

## capstone
CAPSTONE_CONFIG="CAPSTONE_BUILD_CORE_ONLY=yes CAPSTONE_STATIC=yes CAPSTONE_SHARED=no"
rm -rf ${CAPSTONE_SRC} ${CAPSTONE_BUILD} 
mkdir tmp
cd tmp
apt-get source capstone-tool
cp -a `ls -d */` ${CAPSTONE_SRC}
cp -a `ls -d */` ${CAPSTONE_BUILD}
cd ${WORK_DIR}
rm -rf tmp

cd ${CAPSTONE_BUILD}
CC=$HOST_TRIPLET-gcc make CROSS="${HOST_TRIPLET}-" $CAPSTONE_CONFIG
pushd cstool
CC=$HOST_TRIPLET-gcc make CROSS="${HOST_TRIPLET}-" $CAPSTONE_CONFIG
cp -a cstool.exe cstool
popd

#CC=HOST_TRIPLET-gcc make install DESTDIR=${SYSROOT} PREFIX=${PREFIX} \
#  CROSS="${HOST_TRIPLET}-" \
#  $CAPSTONE_CONFIG

cp -a include capstone
mv ${SYSROOT}/${PREFIX}/bin/cstool ${SYSROOT}/${PREFIX}/bin/cstool.exe

cd ${WORK_DIR}

## libgpiod (do not build for windows)
if $BLD_LIBGPIOD; then
rm -rf ${LIBGPIOD_SRC} ${LIBGPIOD_BUILD}
mkdir tmp
cd tmp
apt-get source libgpiod
cp -a `ls -d */` ${LIBGPIOD_SRC}

cd ${WORK_DIR}

rm -rf tmp

cd ${LIBGPIOD_SRC}
./autogen.sh
make distclean

mkdir -p ${LIBGPIOD_BUILD}
cd ${LIBGPIOD_BUILD}
${LIBGPIOD_SRC}/configure \
  --host=${HOST_TRIPLET} \
  --with-sysroot=${SYSROOT} \
  --prefix=${PREFIX} \
  --enable-static --disable-shared
make -j ${MAKE_JOBS}
#make install DESTDIR=${SYSROOT}
fi

cd ${WORK_DIR}

## openocd
#rm -rf ${OPENOCD_SRC} ${OPENOCD_BUILD}
git clone https://git.code.sf.net/p/openocd/code ${OPENOCD_SRC}
#git clone https://repo.or.cz/r/openocd.git openocd
#git clone https://github.com/sysprogs/openocd openocd

cd ${OPENOCD_SRC}
patch -p0 --ignore-whitespace << EOF
--- src/jtag/drivers/libftdi_helper.h   2021-02-11 19:00:10.340000000 +0900
+++ src/jtag/drivers/libftdi_helper.h   2021-02-11 19:02:27.850000000 +0900
@@ -8,17 +8,17 @@
 #ifndef HAVE_LIBFTDI_TCIOFLUSH
 /* Backward compatibility with libftdi pre 1.5 */

-static inline int ftdi_tciflush(struct ftdi_context *ftdi)
+int ftdi_tciflush(struct ftdi_context *ftdi)
 {
        return ftdi_usb_purge_rx_buffer(ftdi);
 }

-static inline int ftdi_tcoflush(struct ftdi_context *ftdi)
+inline int ftdi_tcoflush(struct ftdi_context *ftdi)
 {
        return ftdi_usb_purge_tx_buffer(ftdi);
 }

-static inline int ftdi_tcioflush(struct ftdi_context *ftdi)
+inline int ftdi_tcioflush(struct ftdi_context *ftdi)
 {
        return ftdi_usb_purge_buffers(ftdi);
 }
EOF

./bootstrap
mkdir -p ${OPENOCD_BUILD}

cd ${OPENOCD_BUILD}


if [ "${HOST_TRIPLET}" = "x86_64-w64-mingw32" ] || \
   [ "${HOST_TRIPLET}" = "i686-w64-mingw32" ] ; then \

HIDAPI_CFLAGS="-I${HIDAPI_SRC}/hidapi" \
HIDAPI_LIBS="-L${HIDAPI_BUILD}/windows/.libs -lhidapi" \
LIBUSB0_CFLAGS="-I${LIBUSB0_SRC}/libusb" \
LIBUSB0_LIBS="-L${LIBUSB0_BUILD}/libusb/.libs -lusb" \
LIBUSB1_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
LIBUSB1_LIBS="-L${LIBUSB1_BUILD}/libusb/.libs -lusb-1.0" \
LIBFTDI_CFLAGS="-I${LIBFTDI_SRC}/src" \
LIBFTDI_LIBS="-L${LIBFTDI_BUILD}/src -lftdi1" \
LIBJAYLINK_CFLAGS="-I${LIBJAYLINK_SRC}/libjaylink" \
LIBJAYLINK_LIBS="-L${LIBJAYLINK_BUILD}/libjaylink -ljaylink" \
CAPSTONE_CFLAGS="-I${CAPSTONE_BUILD}" \
CAPSTONE_LIBS="-L${CAPSTONE_BUILD} -lcapstone" \
PKG_CONFIG_PATH=${HIDAPI_BUILD}/pc:${LIBUSB1_BUILD}:${LIBUSB0_BUILD}:${LIBFTDI_BUILD}:${LIBJAYLINK_BUILD} \
libusb_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
libusb_LIBS="-L${LIBUSB1_BUILD_DIR}/libusb/.libs/ -lusb-1.0" \
CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 -DHAVE_LIBFTDI_TCIOFLUSH -DHAVE_LIBUSB_ERROR_NAME -Wno-deprecated -Wno-deprecated-declarations" \
${OPENOCD_SRC}/configure \
  --enable-maintainer-mode \
  --host=${HOST_TRIPLET} \
  --enable-cmsis-dap \
  --enable-cmsis-dap-v2 \
  --enable-ft232r \
  --with-sysroot=${SYSROOT} \
  --prefix=${PREFIX}

elif [ "${HOST_TRIPLET}" = "x86_64-linux-gnu" ] || \
     [ "${HOST_TRIPLET}" = "i386-linux-gnu" ] ; then \

HIDAPI_CFLAGS="-I${HIDAPI_SRC}/hidapi" \
HIDAPI_LIBS="-L${HIDAPI_BUILD}/linux/.libs -lhidapi-hidraw" \
LIBUSB0_CFLAGS="-I${LIBUSB0_SRC}/libusb" \
LIBUSB0_LIBS="-L${LIBUSB0_BUILD}/libusb/.libs -lusb" \
LIBUSB1_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
LIBUSB1_LIBS="-L${LIBUSB1_BUILD}/libusb/.libs -lusb-1.0" \
LIBFTDI_CFLAGS="-I${LIBFTDI_SRC}/src" \
LIBFTDI_LIBS="-L${LIBFTDI_BUILD}/src -lftdi1" \
LIBJAYLINK_CFLAGS="-I${LIBJAYLINK_SRC}/libjaylink" \
LIBJAYLINK_LIBS="-L${LIBJAYLINK_BUILD}/libjaylink -ljaylink" \
CAPSTONE_CFLAGS="-I${CAPSTONE_BUILD}" \
CAPSTONE_LIBS="-L${CAPSTONE_BUILD} -lcapstone" \
LIBGPIOD_CFLAGS="-I${LIBGPIOD_SRC}/include" \
LIBGPIOD_LIBS="-L${LIBGPIOD_BUILD}/src/lib/.libs -lgpiod" \
PKG_CONFIG_PATH=${HIDAPI_BUILD}/pc:${LIBUSB1_BUILD}:${LIBUSB0_BUILD}:${LIBFTDI_BUILD}:${LIBJAYLINK_BUILD}:${LIBGPIOD_BUILD} \
libusb_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
libusb_LIBS="-L${LIBUSB1_BUILD_DIR}/libusb/.libs/ -lusb-1.0" \
CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 -DHAVE_LIBFTDI_TCIOFLUSH -DHAVE_LIBUSB_ERROR_NAME -Wno-deprecated -Wno-deprecated-declarations" \
${OPENOCD_SRC}/configure \
  --enable-maintainer-mode \
  --host=${HOST_TRIPLET} \
  --enable-cmsis-dap \
  --enable-cmsis-dap-v2 \
  --enable-ft232r \
  --enable-bcm2835gpio \
  --enable-sysfsgpio \
  --with-sysroot=${SYSROOT} \
  --prefix=${PREFIX}

fi

make -j ${MAKE_JOBS}
make install DESTDIR=${SYSROOT}

####
#fi

## openocd-esp32
rm -rf ${OPENOCD_ESP32_SRC} ${OPENOCD_ESP32_BUILD}
git clone https://github.com/espressif/openocd-esp32 ${OPENOCD_ESP32_SRC}

cd ${OPENOCD_ESP32_SRC}
patch -p0 --ignore-whitespace << EOF
--- src/jtag/drivers/libftdi_helper.h   2021-02-11 19:00:10.340000000 +0900
+++ src/jtag/drivers/libftdi_helper.h   2021-02-11 19:02:27.850000000 +0900
@@ -8,17 +8,17 @@
 #ifndef HAVE_LIBFTDI_TCIOFLUSH
 /* Backward compatibility with libftdi pre 1.5 */

-static inline int ftdi_tciflush(struct ftdi_context *ftdi)
+int ftdi_tciflush(struct ftdi_context *ftdi)
 {
        return ftdi_usb_purge_rx_buffer(ftdi);
 }

-static inline int ftdi_tcoflush(struct ftdi_context *ftdi)
+inline int ftdi_tcoflush(struct ftdi_context *ftdi)
 {
        return ftdi_usb_purge_tx_buffer(ftdi);
 }

-static inline int ftdi_tcioflush(struct ftdi_context *ftdi)
+inline int ftdi_tcioflush(struct ftdi_context *ftdi)
 {
        return ftdi_usb_purge_buffers(ftdi);
 }
EOF

./bootstrap
mkdir -p ${OPENOCD_ESP32_BUILD}

cd ${OPENOCD_ESP32_BUILD}

if [ "${HOST_TRIPLET}" = "x86_64-w64-mingw32" ] || \
   [ "${HOST_TRIPLET}" = "i686-w64-mingw32" ] ; then \

HIDAPI_CFLAGS="-I${HIDAPI_SRC}/hidapi" \
HIDAPI_LIBS="-L${HIDAPI_BUILD}/windows/.libs -lhidapi" \
LIBUSB0_CFLAGS="-I${LIBUSB0_SRC}/libusb" \
LIBUSB0_LIBS="-L${LIBUSB0_BUILD}/libusb/.libs -lusb" \
LIBUSB1_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
LIBUSB1_LIBS="-L${LIBUSB1_BUILD}/libusb/.libs -lusb-1.0" \
LIBFTDI_CFLAGS="-I${LIBFTDI_SRC}/src" \
LIBFTDI_LIBS="-L${LIBFTDI_BUILD}/src -lftdi1" \
LIBJAYLINK_CFLAGS="-I${LIBJAYLINK_SRC}/libjaylink" \
LIBJAYLINK_LIBS="-L${LIBJAYLINK_BUILD}/libjaylink -ljaylink" \
CAPSTONE_CFLAGS="-I${CAPSTONE_BUILD}" \
CAPSTONE_LIBS="-L${CAPSTONE_BUILD} -lcapstone" \
PKG_CONFIG_PATH=${HIDAPI_BUILD}/pc:${LIBUSB1_BUILD}:${LIBUSB0_BUILD}:${LIBFTDI_BUILD}:${LIBJAYLINK_BUILD} \
libusb_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
libusb_LIBS="-L${LIBUSB1_BUILD_DIR}/libusb/.libs/ -lusb-1.0" \
CFLAGS="-DHAVE_LIBFTDI_TCIOFLUSH -DHAVE_LIBUSB_ERROR_NAME -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -Wno-deprecated -Wno-deprecated-declarations" \
${OPENOCD_ESP32_SRC}/configure \
  --enable-maintainer-mode \
  --host=${HOST_TRIPLET} \
  --enable-cmsis-dap \
  --enable-cmsis-dap-v2 \
  --enable-ft232r \
  --with-sysroot=${SYSROOT} \
  --prefix=${PREFIX}

make -j ${MAKE_JOBS}
make install DESTDIR=${SYSROOT}-esp32

elif [ "${HOST_TRIPLET}" = "x86_64-linux-gnu" ] || \
     [ "${HOST_TRIPLET}" = "i386-linux-gnu" ] ; then \

HIDAPI_CFLAGS="-I${HIDAPI_SRC}/hidapi" \
HIDAPI_LIBS="-L${HIDAPI_BUILD}/linux/.libs -lhidapi-hidraw" \
LIBUSB0_CFLAGS="-I${LIBUSB0_SRC}/libusb" \
LIBUSB0_LIBS="-L${LIBUSB0_BUILD}/libusb/.libs -lusb" \
LIBUSB1_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
LIBUSB1_LIBS="-L${LIBUSB1_BUILD}/libusb/.libs -lusb-1.0" \
LIBFTDI_CFLAGS="-I${LIBFTDI_SRC}/src" \
LIBFTDI_LIBS="-L${LIBFTDI_BUILD}/src -lftdi1" \
LIBJAYLINK_CFLAGS="-I${LIBJAYLINK_SRC}/libjaylink" \
LIBJAYLINK_LIBS="-L${LIBJAYLINK_BUILD}/libjaylink -ljaylink" \
CAPSTONE_CFLAGS="-I${CAPSTONE_BUILD}" \
CAPSTONE_LIBS="-L${CAPSTONE_BUILD} -lcapstone" \
LIBGPIOD_CFLAGS="-I${LIBGPIOD_SRC}/include" \
LIBGPIOD_LIBS="-L${LIBGPIOD_BUILD}/src/lib/.libs -lgpiod" \
PKG_CONFIG_PATH=${HIDAPI_BUILD}/pc:${LIBUSB1_BUILD}:${LIBUSB0_BUILD}:${LIBFTDI_BUILD}:${LIBJAYLINK_BUILD}:${LIBGPIOD_BUILD} \
libusb_CFLAGS="-I${LIBUSB1_SRC}/libusb" \
libusb_LIBS="-L${LIBUSB1_BUILD_DIR}/libusb/.libs/ -lusb-1.0" \
CFLAGS="-DHAVE_LIBFTDI_TCIOFLUSH -DHAVE_LIBUSB_ERROR_NAME -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -Wno-deprecated -Wno-deprecated-declarations" \
${OPENOCD_ESP32_SRC}/configure \
  --enable-maintainer-mode \
  --host=${HOST_TRIPLET} \
  --enable-cmsis-dap \
  --enable-cmsis-dap-v2 \
  --enable-ft232r \
  --enable-bcm2835gpio \
  --with-sysroot=${SYSROOT} \
  --prefix=${PREFIX}

make -j ${MAKE_JOBS}
make install DESTDIR=${SYSROOT}-esp32

fi

####
fi

exit 0
(追記:2021/02/15: ESP32のlinuxビルドで--enable-sysfsgpioをconfigureで指定するとビルドできないので、オプションから外しました。) ビルドログは以下の様になります。
(前略)
checking for LIBUSB1... yes
configure: WARNING: libusb-1.x older than 1.0.9 detected, consider updating
configure: libusb-1.0 header bug workaround: LIBUSB1_CFLAGS changed to "-isystem /home/XXXXXX/OpenOCD/libusb/libusb"
checking for LIBUSB0... yes
checking for CAPSTONE... yes
checking for HIDAPI... yes
checking for LIBFTDI... yes
checking for LIBGPIOD... no
checking for LIBJAYLINK... yes
(中略)
OpenOCD configuration summary
--------------------------------------------------
MPSSE mode of FTDI based devices        yes (auto)
ST-Link Programmer                      yes (auto)
TI ICDI JTAG Programmer                 yes (auto)
Keil ULINK JTAG Programmer              yes (auto)
Altera USB-Blaster II Compatible        yes (auto)
Bitbang mode of FT232R based devices    yes
Versaloon-Link JTAG Programmer          yes (auto)
TI XDS110 Debug Probe                   yes (auto)
CMSIS-DAP v2 Compliant Debugger         yes
OSBDM (JTAG only) Programmer            yes (auto)
eStick/opendous JTAG Programmer         yes (auto)
Andes JTAG Programmer                   yes (auto)
USBProg JTAG Programmer                 yes (auto)
Raisonance RLink JTAG Programmer        yes (auto)
Olimex ARM-JTAG-EW Programmer           yes (auto)
CMSIS-DAP Compliant Debugger            yes
Nu-Link Programmer                      yes (auto)
Cypress KitProg Programmer              yes (auto)
Altera USB-Blaster Compatible           yes (auto)
ASIX Presto Adapter                     yes (auto)
OpenJTAG Adapter                        yes (auto)
Linux GPIO bitbang through libgpiod     no
SEGGER J-Link Programmer                yes (auto)
Use Capstone disassembly framework      yes (auto)
(後略)
スクリプトをホームディレクトリに保存し実行した場合、以下の様になります。
$ ls ~/OpenOCD
capstone  libconfuse  libjaylink  libusb-compat  openocd-esp32  x86_64-w64-mingw32-build  x86_64-w64-mingw32-root-esp32
hidapi    libftdi     libusb      openocd        v1.0.21.zip    x86_64-w64-mingw32-root
出来上がったOpenOCDをたとえばC:\Devz\OpenOCD以下に置く場合は、以下の様にします。
cd ~/OpenOCD
cp -a x86_64-w64-mingw32-root/usr /mnt/c/Devz/OpenOCD
wsl2から、openocd.exeを起動してみます。
$ PATH=/mnt/c/Devz/OpenOCD/bin:$PATH

$ which openocd.exe
/mnt/c/Devz/OpenOCD/bin/openocd.exe

$ openocd.exe -f interface/stlink.cfg -f target/stm32f1x.cfg
Open On-Chip Debugger 0.11.0-rc2+dev-00009-gba0f38213-dirty (2021-02-14-03:47)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select '.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 1000 kHz
Info : STLINK V2J37S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.240795
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
shutdown command invoked

$ openocd.exe -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg
Open On-Chip Debugger 0.11.0-rc2+dev-00009-gba0f38213-dirty (2021-02-14-03:47)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "swd". To override use 'transport select '.
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: JTAG Supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x1ba01477
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
shutdown command invoked

$ openocd.exe -f interface/ft232r.cfg -f target/stm32f1x.cfg
Open On-Chip Debugger 0.11.0-rc2+dev-00009-gba0f38213-dirty (2021-02-14-03:47)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 1000 kHz

Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 1000 kHz
Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x3)
Info : JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020 (STMicroelectronics), part: 0x6410, ver: 0x1)
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
shutdown command invoked
追記:2020/02/14: OpenOCD for ESP32をたとえばC:\Devz\OpenOCD-ESP32以下に置く場合は、以下の様にします。
cd ~/OpenOCD
cp -a x86_64-w64-mingw32-root-esp32/usr /mnt/c/Devz/OpenOCD-ESP32
OpenOCD for ESP32をWSL2から起動してみます。
$ PATH=/mnt/c/Devz/OpenOCD-ESP32/bin:$PATH

$ which openocd.exe
/mnt/c/Devz/OpenOCD-ESP32/bin/openocd.exe

$ openocd.exe -f interface/cmsis-dap.cfg -c "adapter_khz 4000" -c "set ESP_RTOS none" -f board/esp-wroom-32.cfg
Open On-Chip Debugger  v0.10.0-esp32-20201202-14-gde9e630c-dirty (2021-02-15-03:49)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
adapter speed: 4000 kHz

none
WARNING: boards/esp-wroom-32.cfg is deprecated, and may be removed in a future release.
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: JTAG Supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Interface Initialised (JTAG)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 4000 kHz
Info : cmsis-dap JTAG TLR_RESET
Info : cmsis-dap JTAG TLR_RESET
Info : JTAG tap: esp32.cpu0 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : JTAG tap: esp32.cpu1 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : esp32.cpu0: Debug controller was reset.
Info : esp32.cpu0: Core was reset.
Info : Listening on port 3333 for gdb connections
Info : esp32.cpu0: Debug controller was reset.
追記2021/02/21:wslから "openocd.exe" を起動している場合、telnet接続はwslからは接続できませんが、powershellからtelnet接続できます。Windowsのtelnetクライアントは"Windowsの機能の有効化または無効化"でインストールできます。
openocdのソースは、git cloneで2021/02現在のソースを使っていますので、他のバージョンではpatch部分が不要になったりCFLAGSの設定が変わるかもしれません。OpenOCD for ESP32のソースも同様です。なおFT232RをWindowsでデバッグプルーブとして使う場合、zadigでドライバをWinUSBにした場合、USB Comポートとしては使えなくなりますが、 (追記:2021/02/21)こちらのソフトをつかうと、シリアルドライバとWinUSBドライバの切り替えが比較的簡単にできます。
また、gpio bitbangを含めてすべての機能をつかうにはLinuxということになります。やはりlinuxは偉大ですね...
今回は以上です。それでは。

コメント

このブログの人気の投稿

wsdd を使ってSamba サーバをネットワークに表示

Windows 10のアップデートで、セキュリティー対応のため、smbv1がデフォルトではインストールされなくなり、Samba serverがエクスプローラーのネットワークに表示されなくなってしまいました。そこで、いくつか方法を調べたのですが、linuxでwsdの実装がないか探したところ、 https://github.com/christgau/wsdd が、見つかりましたので、さっそくインストールしてみました。まだパッケージにはないようですが、インストール自身は簡単です。wsdd自体は以下のように取得し、linkを張っておきます。 cd /usr/local/bin/ sudo wget https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py sudo chmod 755 wsdd.py sudo ln -sf wsdd.py wsdd こちらのsambaサーバはDebianなので、/etc/systemd/system/wsdd.serviceは以下のようにしました。 [Unit] Description=Web Services Dynamic Discovery host daemon Requires=network-online.target After=network.target network-online.target multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/wsdd -d MYDOMAIN [Install] WantedBy=multi-user.target wsdd -d MYDOMAINのところを、環境にあわせて書き換えてください。 次に、systemdに登録・起動テストを行います。 systemctl enable wsdd systemctl start wsdd 起動に成功すると、エクスプローラーのネットワークに表示されます。  なおこのwsddはpython3が必要です。一度試してみてください。SMBv1/CIFSを停止していても、大丈夫です。 cで書かれたほかのwsddの実装もあるようなので、いずれパッケージになるかも...

Windows デバイス暗号化 のサポートで "許可されていない dma 対応バス/デバイスが検出されました"の対処

Windows でセキュリティー関係を見ているのですが、とあるPCでmsinfo32で確認すると"デバイス暗号化のサポート"で"許可されていない dma 対応バス/デバイスが検出されました"と出ていました。このPCの場合、それ以外はOK(なにも表示されない)だったのですが、ネットでしらべるとMSのドキュメントではハードウェアベンダーに問い合わせるなどと敷居が高く具体的にどこが引っかかっているかわかりません。そこでほかに方法はないかとしらべやってみたところ、"前提条件をみたしています"まで持って行けたので、本稿を挙げた次第です。 具体的には、以下のようにします。 1-a. 許可するDMA対応バス・デバイスを指定するレジストリの所有権と書き込み設定をおこなう。 以下のレジストリキーの所有者を自分自身(管理ユーザ)のものにし、フルコントロール権を付与する。 HKLM\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses もしくは 1-b. MicrosoftよりPsExecをダウンロードし、System権限でRegeditを立ち上げ編集する。 Microsoftより、https://docs.microsoft.com/en-us/sysinternals/downloads/psexec にある こちら をダウンロードし、解凍する。解凍すると、x64の場合、PsExec64.exeがあるので、管理者権限で以下を実行し、システム権限でregeditを立ち上げることが出来るようになる。 cd Downloads\PSTools .\PsExec64.exe -sid C:\Windows\regedit.exe 2-a. パワーシェルスクリプトを実行し、PnPデバイスのうちインスタンスがPCIで始まるものを"AllowedBuses"に追加する。 以下のパワーシェルスクリプトを作成する。たとえばDocuments\allow-dma-bus-device.ps1として作成する。( こちらの記事のものを使用させていただきました: Thank you! ) $tmpfile = "$($env:T...

フレッツ光クロス:MAP-E ROUTER by Debian Box (iptables)

フレッツ光クロスがようやく開通したので、Debianにてrouterを構成し接続してみました。なお、プロバイダーを選ぶにあたっては、IPoE方式がそれぞれ異なるため検討したところ、IPoEでは、MAP-Eでもv6plusとocnバーチャルコネクトがあり、前者がポート数240なのに対し、後者は約4倍のポート数が使えるようなネットの情報をみて、OCNバーチャルコネクトを選択しました。(プロバイダーとしてはぷららです。なおDS-LiteはCE側でのNATではないので今回は見送りました。)そこで、OCN バーチャルコネクトをDebian(iptables)で実現するとどうなるかと思い、ネットの情報を頼りにしつつ、設定した次第です。 実際に試した結果、とりあえず通信できていますが、MAP-Eは本来マッピングルールをマップサーバから取得するはずなので、今回のやり方が正解とはいえませんし、仕様変更されると通信できなくなる可能性があります。あくまでも参考程度ですが、本稿をUPしてみました。 2023/03/16追記: こちら にゲームコンソールNAT越え(Nintendo Switch ナットタイプ A判定)対応版を投稿しました。 2023/03/28追記:※1の記述および3行無効化によりNAT越え(Nintendo Switch ナットタイプ B判定)できるようになりました。 構成は以下の通りです。 ルーターがDebianで回線がOCNバーチャルコネクトであること以外はなにも特別なところはない構成です。 さて、いきなり設定ですが、まず、割り当てられたプレフィックスを確認します。 確認は、 dhclient -6 -d -P enp2s0 とします。出力の中に 前略 RCV: | | X-- IAPREFIX 2400:4050:5c71:af00::/56 後略 このようにプレフィックスが表示されるので、その確認したプレフィックスを書き留めておきます。これを こちらで 入力します。すると、 CE: 2400:4050:5c71:af00:99:f171:c600:2f00 IPv4 アドレス: 153.241.113.198 ポート番号:(1776-1791 2800-2815 3824-3839) 4848-4863 5872-5887 6896-...