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にはほかの名前で存在しているのかな。

Raspberry Piのハートウェア支援に対応したffmpegをクロスコンパイルした。

ここここを参考にgitの最新のffmpegをconfigureしてみたが、通らず。

--extra-libs="-ldl -lrt"

を追加する必要があった。

$ ./configure --enable-cross-compile --cross-prefix=/usr/bin/arm-linux-gnueabihf- --arch
=armhf --target-os=linux --prefix=/usr/arm-linux-gnueabihf --enable-omx-rpi --enable-mmal --sysroot=/usr/arm-linux-gnuea
bihf/opt/vc --extra-cflags="-I /usr/arm-linux-gnueabihf/opt/vc/include -I /usr/arm-linux-gnueabihf/opt/vc/include/IL" --
extra-libs="-ldl -lrt"

こんな感じになった。

それにしても、Bash on Ubuntu on Windowsは素晴らしい。

割と簡単にクロスコンパイルができてしまった。素晴らしいのはUbuntuかな。しかし、ここまでWindowsが使いやすくなっていたとは、予想外だ。

https://www.raspberrypi.org/forums/viewtopic.php?f=67&t=171057

結局、MPEG-2からH.264へのエンコードは画質が悪くて、いまいちだった。あれだけ省電力だから仕方がないか…。x264とは比べ物にならなかった。

追記:

-b:v 1000k -sws_flags fast_bilinear -s 640x360

を付けたら、いい感じになった。リサイズしているが、CPUは50%くらいしか使わない。画質も、まあまあだ。