MacintoshでARM-USB-TINY-HとOpenOCD使ってRaspberry PIのデバッグする。

MacintoshでARM-USB-TINY-Hを使ってRaspberry PIのデバッグする。
I will try to debug Raspberry pi using ARM-USB-TINY-H on Macintosh.Error report:

# Install libusb
ARM-USB-TINY-HはUSB接続。Host機器側にUSBのライブラリを導入する。

```
brew install libusb
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (caskroom/cask, homebrew/core).
==> Updated Formulae
angular-cli  clhep        diamond      gdnsd        gomplate     kallisto     ocrmypdf     singular     vdirsyncer

==> Downloading https://homebrew.bintray.com/bottles/libusb-1.0.21.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring libusb-1.0.21.sierra.bottle.tar.gz
🍺  /usr/local/Cellar/libusb/1.0.21: 29 files, 510.5KB
bash-3.2$ brew install libtool
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (caskroom/cask, homebrew/core).
==> Updated Formulae
googler          gutenberg        heroku           leptonica        lumo             supervisor       typescript

==> Downloading https://homebrew.bintray.com/bottles/libtool-2.4.6_1.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring libtool-2.4.6_1.sierra.bottle.tar.gz
==> Caveats
In order to prevent conflicts with Apple's own libtool we have prepended a "g"
so, you have instead: glibtool and glibtoolize.
==> Summary
🍺  /usr/local/Cellar/libtool/2.4.6_1: 70 files, 3.7MB

$ brew install automake
==> Downloading https://homebrew.bintray.com/bottles/automake-1.15.1.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring automake-1.15.1.sierra.bottle.tar.gz
🍺  /usr/local/Cellar/automake/1.15.1: 131 files, 3.0MB
```

## libusb, automakeのログ
How can I debug Raspberry pi using ARM-USB-TINY-H with Macintosh.
https://researchmap.jp/jo9nl128r-2000107/#_2000107
  
# Openocd-armv8の取得
daniel-k/openocd
https://github.com/daniel-k/openocd

```
You'll also need:

- make
- libtool
- pkg-config >= 0.23 (or compatible)

Additionally, for building from git:

- autoconf >= 2.64
- automake >= 1.9
- texinfo
```
まずgit

```
$ git clone https://github.com/daniel-k/openocd.git openocd-armv8 
$ cd openocd-armv8 
$ git checkout armv8
Branch armv8 set up to track remote branch armv8 from origin.
Switched to a new branch 'armv8'
```
## bootstrapスクリプト

```
$ ./bootstrap
+ aclocal
./bootstrap: line 27: aclocal: command not found

$ cat ./bootstrap 
#!/bin/sh
# Run the autotools bootstrap sequence to create the configure script

# Abort execution on error
set -e

if which libtoolize > /dev/null; then
    libtoolize="libtoolize"
elif which glibtoolize >/dev/null; then
    libtoolize="glibtoolize"
else
    echo "$0: Error: libtool is required" >&2
    exit 1
fi

if [ "$1" = "nosubmodule" ]; then
    SKIP_SUBMODULE=1
elif [ -n "$1" ]; then
    echo "$0: Illegal argument $1"
    echo "USAGE: $0 [nosubmodule]"
    exit 1
fi

# bootstrap the autotools
(
set -x
aclocal
${libtoolize} --automake --copy
autoconf
autoheader
automake --gnu --add-missing --copy
)

if [ -n "$SKIP_SUBMODULE" ]; then
    echo "Skipping submodule setup"
else
    echo "Setting up submodules"
    git submodule init
    git submodule update
fi

echo "Bootstrap complete. Quick build instructions:"
echo "./configure ...."
$ xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
```
## bootstrapスクリプトの中身

```
$ cat ./bootstrap 
#!/bin/sh
# Run the autotools bootstrap sequence to create the configure script

# Abort execution on error
set -e

if which libtoolize > /dev/null; then
    libtoolize="libtoolize"
elif which glibtoolize >/dev/null; then
    libtoolize="glibtoolize"
else
    echo "$0: Error: libtool is required" >&2
    exit 1
fi

if [ "$1" = "nosubmodule" ]; then
    SKIP_SUBMODULE=1
elif [ -n "$1" ]; then
    echo "$0: Illegal argument $1"
    echo "USAGE: $0 [nosubmodule]"
    exit 1
fi

# bootstrap the autotools
(
set -x
aclocal
${libtoolize} --automake --copy
autoconf
autoheader
automake --gnu --add-missing --copy
)

if [ -n "$SKIP_SUBMODULE" ]; then
    echo "Skipping submodule setup"
else
    echo "Setting up submodules"
    git submodule init
    git submodule update
fi

echo "Bootstrap complete. Quick build instructions:"
echo "./configure ...."
```

## Autotools

Autotoolsの入力ファイルと出力ファイル
http://www.fireproject.jp/feature/automake/basic/autotools.html

###"aclocal": No such file or directoryの対処法
https://qiita.com/DQNEO/items/11d6056547cab0632901
Homebrewではautomakeにaclocalが入っている。

```
$ brew install automake
```

# configure

```  
$ ./configure --enable-ftdi  
```
##configureのログ
https://researchmap.jp/jo9jhe69b-2000107/#_2000107
#make

```
$ make  
... snip ...  

libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../../../.. -I../../../../src -I../../../../src -I../../../../src/helper -DPKGDATADIR=\"/usr/local/share/openocd\" -DBINDIR=\"/usr/local/bin\" -I../../../../jimtcl -I../../../../jimtcl -I../../../../src/jtag/drivers -isystem /usr/local/Cellar/libusb/1.0.21/include/libusb-1.0 -g -O2 -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls -Werror -MT ublast2_access_libusb.lo -MD -MP -MF .deps/ublast2_access_libusb.Tpo -c ublast2_access_libusb.c -o ublast2_access_libusb.o
ublast2_access_libusb.c:77:6: error: comparison of array 'data' equal to a null pointer is always false [-Werror,-Wtautological-pointer-compare]  
        if (data == NULL)  
            ^~~~    ~~~~  
1 error generated.  
```

The tools versions are here. libusb 1.0.21, autoconf 2.69, automake 1.15.1, libtool 2.4.6.1, pkg-config 0.29.2, texinfo 6.5, libftdi 1.4, make 3.8.1, gcc 9.0.0,


## gcc7.3.0
I change make 3.8.1 to 4.2.2.1 and gcc 9.0.0 to 7.3.0. 

```
$ brew install gcc7
$ brew install make
$ ln -s gcc-7 gcc
```
gccにシンボリックリンクし、PATHを切る。

```
$ ./bootstrap
```
２度目だからlogが短いのかは未調査。

```  
$ ./configure --enable-ftdi  
```
記録

```
$ make

 libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../../.. -I../../../src -I../../../src -I../../../src/helper -DPKGDATADIR=\"/usr/local/share/openocd\" -DBINDIR=\"/usr/local/bin\" -I../../../jimtcl -I../../../jimtcl -isystem  /usr/local/Cellar/libusb/1.0.21/include/libusb-1.0 -g -O2 -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls -Werror -MT libocdjtagdrivers_la-ftdi.lo -MD -MP -MF .deps/libocdjtagdrivers_la-ftdi.Tpo -c ftdi.c -o libocdjtagdrivers_la-ftdi.o
 ftdi.c: In function 'ftdi_handle_set_signal_command':
 ftdi.c:791:6:error: this statement may fall through [-Werror=implicit-fallthrough=]
    if (CMD_ARGV[1][1] == '\0') {
       ^
 ftdi.c:795:2:note: here
   default:
   ^~~~~~~
 cc1: all warnings being treated as errors
```

## gcc6

```
$ brew install gcc6
$ ln -s gcc-6 gcc
```
gccにシンボリックリンクし、PATHを切る。

```
$ ./bootstrap
+ aclocal
+ glibtoolize --automake --copy
+ autoconf
+ autoheader
+ automake --gnu --add-missing --copy
Makefile.am:23: warning: wildcard $(srcdir: non-POSIX variable name
Makefile.am:23: (probably a GNU make extension)
Setting up submodules
Bootstrap complete. Quick build instructions:
./configure ....
```
２度目だからだと思うけど、なんでこんなに短いのかは未調査。


```  
$ ./configure --enable-ftdi  
```
記録
https://researchmap.jp/joj34fkr0-2000107/#_2000107

```
$make
```
最後の仕上げ。

```
sudo make install
Password:
Making install in jimtcl
make[1]: Entering directory '/Users/administrator/work/openocd-armv8/jimtcl'
* snip *
```

# 付録　dockerで作業

```
$ sudo apt-get install automake
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  autoconf autotools-dev libsigsegv2 m4
提案パッケージ:
  autoconf-archive gnu-standards autoconf-doc libtool gettext
以下のパッケージが新たにインストールされます:
  autoconf automake autotools-dev libsigsegv2 m4
アップグレード: 0 個、新規インストール: 5 個、削除: 0 個、保留: 0 個。
1,079 kB のアーカイブを取得する必要があります。
この操作後に追加で 3,998 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libsigsegv2 amd64 2.10-4 [14.1 kB]
取得:2 http://archive.ubuntu.com/ubuntu xenial/main amd64 m4 amd64 1.4.17-5 [195 kB]
取得:3 http://archive.ubuntu.com/ubuntu xenial/main amd64 autoconf all 2.69-9 [321 kB]
取得:4 http://archive.ubuntu.com/ubuntu xenial/main amd64 autotools-dev all 20150820.1 [39.8 kB]
取得:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 automake all 1:1.15-4ubuntu1 [510 kB]
1,079 kB を 6秒 で取得しました (162 kB)  
debconf: delaying package configuration, since apt-utils is not installed
以前に未選択のパッケージ libsigsegv2:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 35685 個のファイルとディレクトリがインストールされています。)
.../libsigsegv2_2.10-4_amd64.deb を展開する準備をしています ...
libsigsegv2:amd64 (2.10-4) を展開しています...
以前に未選択のパッケージ m4 を選択しています。
.../archives/m4_1.4.17-5_amd64.deb を展開する準備をしています ...
m4 (1.4.17-5) を展開しています...
以前に未選択のパッケージ autoconf を選択しています。
.../autoconf_2.69-9_all.deb を展開する準備をしています ...
autoconf (2.69-9) を展開しています...
以前に未選択のパッケージ autotools-dev を選択しています。
.../autotools-dev_20150820.1_all.deb を展開する準備をしています ...
autotools-dev (20150820.1) を展開しています...
以前に未選択のパッケージ automake を選択しています。
.../automake_1%3a1.15-4ubuntu1_all.deb を展開する準備をしています ...
automake (1:1.15-4ubuntu1) を展開しています...
man-db (2.7.5-1) のトリガを処理しています ...
libsigsegv2:amd64 (2.10-4) を設定しています ...
m4 (1.4.17-5) を設定しています ...
autoconf (2.69-9) を設定しています ...
autotools-dev (20150820.1) を設定しています ...
automake (1:1.15-4ubuntu1) を設定しています ...
update-alternatives: /usr/bin/automake (automake) を提供するために自動モードで /usr/bin/automake-1.15 を使います
libc-bin (2.23-0ubuntu10) のトリガを処理しています ...

$ git clone https://github.com/daniel-k/openocd.git openocd-armv8 
Cloning into 'openocd-armv8'...
remote: Counting objects: 51261, done.
Receiving objects: 100% (51261/51261), 11.44 MiB | 41.00 KiB/s, done.
remote: Total 51261 (delta 0), reused 0 (delta 0), pack-reused 51261
Resolving deltas: 100% (42162/42162), done.
Checking connectivity... done.

$ sudo apt-get install libusb-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  libusb-dev
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
29.9 kB のアーカイブを取得する必要があります。
この操作後に追加で 231 kB のディスク容量が消費されます。
取得:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libusb-dev amd64 2:0.1.12-28 [29.9 kB]
29.9 kB を 0秒 で取得しました (35.1 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
以前に未選択のパッケージ libusb-dev を選択しています。
(データベースを読み込んでいます ... 現在 35978 個のファイルとディレクトリがインストールされています。)
.../libusb-dev_2%3a0.1.12-28_amd64.deb を展開する準備をしています ...
libusb-dev (2:0.1.12-28) を展開しています...
man-db (2.7.5-1) のトリガを処理しています ...
libusb-dev (2:0.1.12-28) を設定しています ...
```
詳細の履歴は
https://researchmap.jp/jokwx728e-2000107/#_2000107

```
$ ./bootstrap 
* snip *
$ ./configure --enable-ftdi
* snip *
```
bootstrap, configureの記録
https://researchmap.jp/jodhbzwom-2000107/#_2000107

```
$ make

$ sudo make install
```

makeの記録
https://researchmap.jp/joq6udnvg-2000107/#_2000107
make installの記録
https://researchmap.jp/joc3pfsdn-2000107/#_2000107

#参考文献/URL
AVR/ARM Cross Toolchain for OS X
http://www.ethernut.de/en/documents/cross-toolchain-osx.html

OpenOCD and Ethernut 3
http://www.ethernut.de/en/hardware/enut3/openocd.html

[OpenOCD-user] Problems with openocd-0.6.1 on darwin.
https://sourceforge.net/p/openocd/mailman/message/30392592/

openocd-mingw-w64-build-scripts/build-openocd-osx.sh
https://github.com/artynet/openocd-mingw-w64-build-scripts/blob/master/build-openocd-osx.sh

How can I debug Raspberry pi using ARM-USB-TINY-H on Macintosh
https://stackoverflow.com/questions/48822464/how-can-i-debug-raspberry-pi-using-arm-usb-tiny-h-on-macintosh

UbuntuでUSBリブラリー（libusb-1.0.21)
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14171566049

Re: [OpenOCD-user] Ubuntu and libusb
https://sourceforge.net/p/openocd/mailman/message/34727364/


### 最後までおよみいただきありがとうございました。

いいね、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon and follow me for your happy life.