OpenOCDをビルドする(再び)w/ MSYS2

Building OpenOCD under Windows using MSYS2

上記ページを参考に進めている。

ハマったところがあったら書いていく。

Bash on Ubuntu on Windowsでビルドすることもできる。昨日書いた情報が参考になればと思う。

ソースを落とせない

git cloneでタイムアウトしたみたい。PKGBUILDを編集して、
source=("${_realname}::git+https://git.code.sf.net/p/openocd/code")のURLをhttp://repo.or.cz/openocd.gitにした。sourceforgeは終わっている…。ミラーの方が速い。

ビルドした

https://github.com/Alexpux/MINGW-packages/を適当な場所に落として、mingw-w64-openocd-gitに移動した。前の項にあるように、ソースが落とせなかったらミラーを変えると良い。あとは MINGW_INSTALLS=mingw64 makepkg-mingw -sLで自動的に依存するパッケージが入って、ビルドが走る。

パッケージファイルが吐き出された。正常かどうかはまだ試していない。

少し試した(1/11更新)

とりあえず、ドライバを入れて認識させるところまで進んだ。

Zadigを入れて、libusbKのドライバを入れると良い。最初は、Alteraのドライバを入れてみたが、意味がなかった。次に、libusb-win32でやってみたが、うまくいかなかった。

libusb-win32だと、以下のような出力が出ていた。

$ openocd -f interface/altera-usb-blaster.cfg

Open On-Chip Debugger 0.10.0+dev-00230-g81a33244d (2018-01-08-18:01)
Licensed under GNU GPL v2
For bug reports, read
 http://openocd.org/doc/doxygen/bugs.html
Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only
Info : only one transport option; autoselect 'jtag'
Info : No lowlevel driver configured, will try them all
Info : usb blaster interface using libftdi
Error: unable to open ftdi device: ftdi_usb_reset failed

libusbKだと次のような感じだ

Open On-Chip Debugger 0.10.0+dev-00230-g81a33244d (2018-01-08-18:01)
Licensed under GNU GPL v2
For bug reports, read
 http://openocd.org/doc/doxygen/bugs.html
Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only
Info : only one transport option; autoselect 'jtag'
Info : No lowlevel driver configured, will try them all
Info : usb blaster interface using libftdi
Error: unable to get latency timer
Info : This adapter doesn't support configurable speed
Warn : There are no enabled taps. AUTO PROBING MIGHT NOT WORK!!
Error: JTAG scan chain interrogation failed: all ones
Error: Check JTAG interface, timings, target power, etc.
Error: Trying to use configured scan chain anyway...
Warn : Bypassing JTAG setup events due to errors
Warn : gdb services need one or more targets defined

これの方がうまくいっている気がする。

自分の環境では意味なかった

TL;DR

nrf51822の書き込みはできない。

結局、USB Blasterは認識されたみたいだが、JTAGにしか対応していないらしく、SWDが必要なnrf51822の書き込みはできないみたいだった。

$ openocd -f interface/altera-usb-blaster.cfg -f target/nrf51.cfg -c 'transport select swd'
Open On-Chip Debugger 0.10.0+dev-00230-g81a33244d (2018-01-08-18:01)
Licensed under GNU GPL v2
For bug reports, read
 http://openocd.org/doc/doxygen/bugs.html
Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only
Info : only one transport option; autoselect 'jtag'
embedded:startup.tcl:21: Error: newtap: nrf51.cpu missing IR length
in procedure 'script'
at file "embedded:startup.tcl", line 60
in procedure 'swj_newdap' called at file "C:/tools/msys64/mingw64/bin/../share/openocd/scripts/target/nrf51.cfg", line 33
in procedure 'jtag' called at file "C:/tools/msys64/mingw64/bin/../share/openocd/scripts/target/swj-dp.tcl", line 30
in procedure 'ocd_bouncer'
at file "embedded:startup.tcl", line 21
$ openocd -f interface/altera-usb-blaster.cfg -c 'transport select swd' -f target/nrf51.cfg
Open On-Chip Debugger 0.10.0+dev-00230-g81a33244d (2018-01-08-18:01)
Licensed under GNU GPL v2
For bug reports, read
 http://openocd.org/doc/doxygen/bugs.html
Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only
Info : only one transport option; autoselect 'jtag'
Error: Can't change session's transport after the initial selection was made
embedded:startup.tcl:21: Error:
in procedure 'transport'
in procedure 'ocd_bouncer'
at file "embedded:startup.tcl", line 21

どうやらAltera USB Blaster(によく似た何か)はJTAGにしか対応していないらしく、nrf51822の書き込みには使えないみたいだ。ワイヤをつないで、入力と出力が別のピンになっていて、あれ?となって、コマンドを打ってみたら見事にエラーが出た。

OpenOCDをビルドする w/ Bash on Windows

TL;DR

どっかからビルド済みのバイナリを拾うと簡単。ただし古いかも。

Bash on WindowsのUbuntu 16.04LTSでビルドしてみている。

libusb-devが入っているとコンパイルエラーが出る

In file included from src/jtag/drivers/arm-jtag-ew.c:26:0:
src/jtag/drivers/usb_common.h:24:10: error: ‘struct usb_dev_handle’ declared inside parameter list [-Werror]
 struct usb_dev_handle **out);
 ^
src/jtag/drivers/usb_common.h:24:10: error: its scope is only this definition or declaration, which is probably not what you want [-Werror]
src/jtag/drivers/arm-jtag-ew.c: In function ‘armjtagew_usb_open’:
src/jtag/drivers/arm-jtag-ew.c:681:2: error: implicit declaration of function ‘usb_init’ [-Werror=implicit-function-declaration]
 usb_init();
 ^
src/jtag/drivers/arm-jtag-ew.c:686:32: error: passing argument 3 of ‘jtag_usb_open’ from incompatible pointer type [-Werror=incompatible-pointer-types]
 if (jtag_usb_open(vids, pids, &dev) != ERROR_OK)
 ^
In file included from src/jtag/drivers/arm-jtag-ew.c:26:0:
src/jtag/drivers/usb_common.h:23:5: note: expected ‘struct usb_dev_handle **’ but argument is of type ‘struct usb_dev_handle **’
 int jtag_usb_open(const uint16_t vids[], const uint16_t pids[],
 ^
src/jtag/drivers/arm-jtag-ew.c:696:2: error: implicit declaration of function ‘usb_claim_interface’ [-Werror=implicit-function-declaration]
 usb_claim_interface(dev, 0);
 ^
src/jtag/drivers/arm-jtag-ew.c: In function ‘armjtagew_usb_close’:
src/jtag/drivers/arm-jtag-ew.c:709:2: error: implicit declaration of function ‘usb_close’ [-Werror=implicit-function-declaration]
 usb_close(armjtagew->usb_handle);
 ^
src/jtag/drivers/arm-jtag-ew.c: In function ‘armjtagew_usb_write’:
src/jtag/drivers/arm-jtag-ew.c:746:11: error: implicit declaration of function ‘usb_bulk_write’ [-Werror=implicit-function-declaration]
 result = usb_bulk_write(armjtagew->usb_handle, ARMJTAGEW_EPT_BULK_OUT, \
 ^
src/jtag/drivers/arm-jtag-ew.c: In function ‘armjtagew_usb_read’:
src/jtag/drivers/arm-jtag-ew.c:760:15: error: implicit declaration of function ‘usb_bulk_read’ [-Werror=implicit-functMakefile:3202: ターゲット 'src/jtag/drivers/src_jtag_drivers_libocdjtagdrivers_la-arm-jtag-ew.lo' のレシピで失敗しました
make[2]: *** [src/jtag/drivers/src_jtag_drivers_libocdjtagdrivers_la-arm-jtag-ew.lo] エラー 1
make[2]: *** 未完了のジョブを待っています....
mv -f src/jtag/drivers/.deps/src_jtag_drivers_libocdjtagdrivers_la-vsllink.Tpo src/jtag/drivers/.deps/src_jtag_drivers_l
ibocdjtagdrivers_la-vsllink.Plo

libusb-1.0-0-devを入れて、libusb-devを消したらうまくいった??

[情報源]

libusbが見つからない

mingwでWindowsのバイナリをコンパイルしようとしてもlibusbが見つからない様でこける。

仕方がないのでlibusbのソースを落としてきて、展開した場所で下記を実行した。

情報源

./configure --host=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32
sudo make install

USB-Blasterに非対応

とりあえずビルドは通ったが、configureの結果からみてUSB-Blasterに非対応の模様。libFTDIを入れれば解決するっぽい。あとでやる

バイナリが走らん

---------------------------
openocd.exe - システム エラー
---------------------------
libgcc_s_sjlj-1.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。 
---------------------------
OK 
--------------------------

らしい。

./configure –host=i686-w64-mingw32 –prefix=/usr/i686-w64-mingw32 C_FLAGS=”-static-libgcc”でやり直している。

CFLAGS=”-static-libgcc -static-libstdc++” CPPFLAGS=”-static-libgcc -static-libstdc++”
CXXFLAGS=”-static-libgcc -static-libstdc++” LDFLAGS=”-static-libgcc -static-libstdc++” ./configure –host=i686-w64-mingw32 –prefix=/usr/i686-w64-mingw32でやってみたが、objdump -pで見たら、DLLの依存が取れない。

参考情報

libgcc_s_sjlj-1.dllがあった

/usr/lib/gcc/i686-w64-mingw32/5.3-win32/libgcc_s_sjlj-1.dllに転がっていた。openocd.exeやlibusb-1.0.dllと一緒のところにコピーしたら普通に動いた。ただし、JTAGアダプタをつないでテストしていないので動くかどうかは謎。

MSYS2使えばよかったのでは?

MSYS2のパッケージマネージャを使えば一発で入るらしい情報を目にした。最初からこれを使えばよかったかもしれない。

MSYS2でpacmanを使えば一発で入るが、安定版なので少し古い。結局、自分でビルドした。

仮想通貨を始めた

BitFlyerの口座を開設して、BTCを2,3千円分買って、直後にビックカメラでBTCを使って買い物をして、「日本でQRコード決済だ。サイバーだ」と思いつつ楽しんだ。しかし、後になって、この行為で大損をしたことに気が付いた。85円の午後の紅茶を買ったわけだが、ビットコインネットワーク手数料が40円近く使われていた。最初は、そんなもんかと思い、少額決済には向いていないから少額決済で使うのは避けたほうがよさそうだと思っていた。あとになってからBreadのヘルプを見たところ、少額の入金が複数行われた直後のウォレットからの出金は手数料が高額になるらしいことが判明した。実際、1週間以上経過した今、送金を行おうとしたら手数料は当時の半額くらいになっていた。

さて、仮想通貨を使うだけで満足していなくて、マイニングも始めてみた。

最初は、Ryzen 7 1700でXMRのマイニングを行っていた。80Wほどの消費電力(CPUだけではなくマザボその他も含む)で、1日100円ほどの収入になったと思う。電気代が60円弱なので、40円ほど儲かる。RyzenはMoneroのマイニング効率が良いことが知られていた。多分、ほかの仮想通貨だとCPUマイニングで利益が出る物はなかなかないと思う。あ、ZNYのマイニングを1,2日だけ試して、DOGEに変換して、やめたというのもあった。不思議なことに、これだと消費電力が100W以上になっていた。多分、利益が出ていない。

CPUマイニングの次は、GPUマイニングにも手を出した。GTX 960が差さっていたので、NiceHashでマイニングしてみた。1日50円未満の収入になる模様だった。しかし、消費電力は90W近く上昇(CPU、マザボその他の消費電力は除くGPUだけだと思われる消費電力)していた。1日60円以上かかる見込みで、赤字になる。試しにMSI AfterburnerでPower Limitを50%未満に絞ったら60W未満の消費電力上昇になって、40円ちょいの電気代で、ギリギリ利益が出るくらいになった。グラボが消耗することを考えたら、確実に、これは意味のない行為だが、楽しいのでやっている。ほとんど利益が出ないのではつまらないので、今度はPascal世代のGTX 1070をAmazonに発注してみた。入荷まで1か月以上かかる予定と表示されていたので、いつでもキャンセルして引き返せると思いながら発注した。そして、一晩寝て、起きてたら出荷時期が数日後になってしまい、商品ページは入荷済みと表示され、悩んでいるうちに出荷準備中になり、気が付いたら手元にハイエンドグラフィックボードが来てしまった。GTX 1070は消費電力を絞れば100Wで済み、従来の3倍の速度で採掘がされる。収益率は格段に良くなった。電気代を考えても1年くらいでグラボ代が回収できそうな感じだ。

1070を手に入れて、OCツールや定格周波数の表、グラボの入っていたパッケージを眺めていたら、妙なことに気が付いた。どう見ても動いているときの周波数が高すぎる。型番から推測するに、OCモデルを買ってしまったらしい。最安値で、まさかOCモデルが買えるとは思ってもいなかった。Power Limitを50%に絞ってもFounders Editionより周波数が高かった。FEのスペック見たら、補助電源コネクタが8pin 1つだし、自分の手元にあるのは8pin + 6pinなので、ここからでもOCモデルらしいことがわかる。

GeForceをNiceHashでマイニングに使う限りでは、Equihashをマイニングする時間が一番長そうな感じだったので、少しPower Limitをいじって、コア周波数を落としてみた。そしたら、周波数が落ちてもハッシュレートがほとんど変わらなかった。Equihashを採掘する限りではPower Limitは絞れるだけ絞ってしまって大丈夫そうだ。コア周波数は絞ってもハッシュレートに影響しないが、メモリ周波数は上げたほうがハッシュレートが上昇するらしい情報をみてみたが、これは未検証だ。メモリをOCするリスクがよくわからないので、試す勇気が出ない。高価なハイエンドグラフィックボードを買ってすぐ壊してしまったら、いったい何やっていたんだ…ってことになる。

相場が激しく変動しているみたいなので、今後どうなるかわからない。ZECを直接採掘したほうがよさそうな気がするが、NiceHashでもそれほど手数料がかからないどころか、ZECを採掘して取引所でBTCにするより良い逆転現象すら起きることがある。最初見たときはNiceHashだと20%近くピンハネされるように見えたが、レートの変動があるので、NiceHashの方が条件が良いこともありうるらしい。レートの変動は運次第なので諦めることにして、将来的にはNiceHashでは確実にかかる4%の外部ウォレットへの出金手数料を節約すべく、nanopoolに参加しようと思う。これだとpoolに1% feeを払うだけで済む。あとは、取引所の手数料次第だ。NiceHashよりマシだと思っているが、今後詳しく調べる必要がありそうだ。

Seleniumを触ってみた

choco install selenium-chrome-driver selenium-gecko-driver selenium-edge-driver

上記コマンドで、chocolateyを使って必要なドライバを入れた。

seleniumで検索したら、いろいろドライバが引っかかる。

そして、サンプルコードを動かしてみた

var webdriver = require('selenium-webdriver'),
By=webdriver.By,
until=webdriver.until;

var driver = new webdriver.Builder().usingServer("http://localhost:17556/")
.forBrowser('edge')
.build();

driver.get('http://www.google.com/ncr');
driver.findElement(By.name('q')).sendKeys('webdriver');
driver.findElement(By.name('btnG')).click();
driver.wait(until.titleIs('webdriver - Google Search'), 1000);
driver.quit();

Firefox、ChromeはforBrowserの所を書き換えるだけで、うまくいったが、Edgeは上記のようにする必要があった。

あらかじめSelenium Edge Driverを起動する必要がある。そして、usingServer(“url”)を間に入れる必要があるみたいだ。

7/27追記:

Seleniumのドライバは、npmでも入るようだ。わざわざ、chocolateyで入れる必要はなかったかもしれない。

chromedriver, geckodriveredgedriverが転がっていた。

safaridriverは見当たらなかった。Windowsで使う分にはnpmで大丈夫そうだ。

メールの設定メモ

雑だけどメモを残しておく

クライアント側

apt install msmtp msmtp-mta

/etc/aliases

default: hogehoge@hogehoge.hoge

/etc/msmtprc

# Example for a system wide configuration file

# A system wide configuration file is optional.
# If it exists, it usually defines a default account.
# This allows msmtp to be used like /usr/sbin/sendmail.
account default

# The SMTP smarthost.
host hogehoge.hoge
port 587
from hogehoge@hogehoge.hoge
user hogehoge@hogehoge.hoge
password password
auth on

# Construct envelope-from addresses of the form "user@oursite.example".
#auto_from on
#maildomain oursite.example

# Use TLS.
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Syslog logging with facility LOG_MAIL instead of the default LOG_USER.
syslog LOG_MAIL

aliases /etc/aliases

サーバー側

doveadm pw -s SSHA256
#ハッシュを通したパスワードを得る
vim.tiny /etc/dovecot/users
vim.tiny /etc/postfix/virtual
#周りに合わせて適当にユーザーを追加
postmap /etc/postfix/virtual
#そして、dovecotとpostfixをrestartしたりreloadしたりする

cdebootstrapを実行後にすること

個人用にメモっておく。

  • gai.confでipv4が優先されるようにする。(不要かも)
  • passwdでrootのパスワードを設定する
  • locales
apt-get install localesdpkg-reconfigure locales
  • hostname
apt-get install dbus
hostnamectl set-hostname hogehoge
  • timezone
dpkg-reconfigure tzdata
  • /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian jessie main
deb http://security.debian.org/ jessie/updates main
  • ntp
timedatectl set-ntp true
vim.tiny /etc/systemd/timesyncd.conf
Servers=ntp.nict.jp
  • fake-hwclock
  • cpufrequtils
  • /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
  • /etc/fstab
/dev/sda1       /       ext4    defaults        0       1
/dev/sda2       none    swap    defaults        0       0
/dev/mmcblk0p1  /boot   vfat    defaults        0       2
  • openssh-server
  • rpi-update
  • cat /boot/cmdline.txt
    root=/dev/sda1 rootfstype=ext4 rootwait quiet rw
  • /boot/config.txtはなくてもよさそう

node-ptyのコンパイルが通らなかった

こちらを参考して、まずはchocolateyで vcbuildtools を入れた。

そして、次のようにしてnpmにVisual Studioのバージョンを指定しておいた。

npm i --save --msvs_version=2015 node-pty

次のようにすると、Visual Studioのバージョンが設定されて、上記の指定がなくても大丈夫になるらしいが、試していないので不明。

npm config set msvs_version 2015 --global

しかし、ビルドするだけのソフトで3GB持っていかれるんだな…

Windows版KaoriYa Vimの内部エンコーディングをUTF-8にする

こちらを参考にして、/switches/catalog/utf-8.vimを/switches/enabledにコピーした。

これで、上記みたいな文字化けが起こらなくなくなる。はず。

あとは、~/vimfiles/.vimrcへのシンボリックリンクを~/_vimrcから張った。

deinの場所が~/.vim/dein/決め打ちなので、~/.vim/ -> ~/vimfiles/ のリンクも張った。

mklinkはcmdからじゃないと使えないのはなんでだろう…。PowerShellにはほかの名前で存在しているのかな。