Surface Bookが届いたが返品している(再び)

今度こそ大丈夫だと思っていたが、前回と同じような問題が起こっている。今度も上下が出荷されたセットではないため保証が受けられない。また返品することになった。進展があり次第更新する。

4/20追記:

無事に返金手続きがされた。領収書を指定されたメールアドレスに送ったら、送料分のドルが戻ってきて、Amazonの倉庫に到着したら税金を含む金額+15ドルが戻ってきた。若干儲かったことになる。送る手間や事故率の高さでアカウントを止められるリスクを考えたら繰り返したくないので、この辺にしておく。ドルのまま貯金して、そのうちMicrosoftの直販から買って、誰かに転送を頼むことにでもしようかと思う。あるいはThinkPadを注文してしまってもいいかな…。しばらくはドルのまま置くことになりそうだ。

Surface Bookが届いたが返品している

日曜日の11時頃にSurface Bookを注文して、月曜日の20時ごろにはVISAデビットの請求が来ていた。それから発送するまで割と時間がかかって、日本時間の水曜日の朝に発送された。UPSで、シアトル、オンタリオ、アンカレッジ経由で成田に到着した。昨日の朝9時ごろには成田についていたが、ヤマト運輸の国内配送なので、夜にヤマト運輸に引き渡されて今日の昼頃に受け取った。

米国Amazon.comの荷物がUPS経由で送られる場合、問い合わせるとヤマト運輸の伝票番号が得られる。Webのメールフォームから問い合わせたら10分ほどで番号が送られてきた。驚異的な速さだ。

伝票番号を受け取ったのは良いが、追跡サイトで追跡もできない状態で営業所止めとか頼めないだろうと思って、朝一で営業所…ではなくコールセンターに連絡したが、時すでに遅し、朝に営業所に行ったときにはトラックの一番奥に荷物を積み込んだ後だった。受け取れず、家に帰って待って受け取った。

さて、受け取ったのは良いが、箱が怪しい。

まず、シュリンクラップがない。そして、シリアルのラベルが剥がされた形跡がある。そして、シリアルの紙質が普通紙でパッケージのツルツルしているのと違う。

製品自体は問題ない。Windows Helloの顔認証も素早くて、今の指紋認証より便利そうだ。マスクをしていると認識されないが、マスクを下に一瞬ずらすだけで認識された。上部と下部も分離する。

ただ、シリアル番号が箱にあるものと、本体の上部下部それぞれにあるものが全部何故か一致しない。これだけなら、全部別の法則か何かで個別に番号振っているのかと思う。が、保証状況を確認したら、かなりヤバいものを受け取ったんじゃないかと思えるようになってきた。本体上部、下部、箱に記載されているシリアルナンバー3つを、とりあえずすべて入力して登録してみた。そしたら、1つはエラーで、残りの2つは全く別のSurface Bookではないか。

ダメもとで日本マイクロソフトのサポートに問い合わせてみたら、ヤバいことが疑念から確信に変わった。本体上部と下部は間違いなく別のセットで、サポートが受けられない可能性があるとの事だった。

Amazon.comに問い合わせたら?との事だったので、問い合わせた。こちらも驚異的な速度で回答が返ってきた。外で昼ご飯を食べつつ、ぽちぽとと電話で英文を打ち込んで状況を説明して10分ほど経ったら、返品リクエストが受け入れられた的なメールが来た。交換か返品を希望しておいたので、返品が選ばれたらしい。あとになって思ったが、もう少し安くしてもらってそのまま持っているというのもありな気がしてきた。壊れて修理が必要にならない限り困らないし、返品する必要性が実はなかったんじゃないかという気もした。しかし、返品するという選択肢しかなさそうな感じなので、返品することにした。返品の準備をしていたら、Amazon.comから謝罪のメールが来て、これはあってはならない事だとか、Fulfillment by Amazonの商品なので交換はできないとか、10ドル分のpromotional certificateを発行したとか来た。

早速、返品のために発送してきた。

インボイスも何もかも準備されているので、楽だと思ったら、思わぬ罠があった。まあ、大した問題ではなくて些細な問題だけど…。まずは、国際郵便で発送するときはリチウムイオン電池の警告ラベルを貼ってはならないらしい。セロテープで仮止めした感じなので、引きはがすだけで済んだ。次に、梱包が不十分なので損害賠償が受けられない可能性が高いと言われた。着た状態そのまま送り返しているんだけど…と思ったが、国際郵便は民間の国際貨物輸送サービスより荷物の扱いが雑なのだろうか。近所に郵便局があって、近くで便利だし、楽なので、郵便局を使ったが、事故っても補償がない可能性が高いのは困る。とはいえ、事故が起きる確率はそんなに高くないだろうと高をくくって、何かあったら諦めますということで発送してもらうことにした。過去に梱包が不十分で戻されたこともあるとか言われた。そうなったら4Kg弱のUS宛てEMS運賃の7300円が無駄になる。だからといって、UPSだと送料だけで3万円くらいかかるっぽいから、とても払う気にならないし、これもダメだったら諦めますということにした。

返品が成功すれば、まあ、少し時間が無駄になったかな程度になる。失敗したら10万円を捨てることになる。今後の進展が不安だ。とりあえず、無事に日本から出発してほしい…。

数分だけ触ってみた程度だが、Surface Bookは定価が20万とか30万とか40万とかするだけあって、結構よくできている。折った状態で持っていて、結構しっくりくる感じだ。下にヒンジがあっても上にヒンジがあってもいい感じ。画面が半分の本体みたいなもんなので、割と重いが、自分の体で膝の上にのっけても自宅のソファーに座っている限りでは膝が高めになるのでバランス崩して画面が倒れるという事態はなかった。キーボードも1分くらいしか打ってないが、結構良い感じの感触だった。なんていうか、安定した力強い反発があるというか、ちゃんと押した感じがあって良い。それに、音もそんなにうるさくない。ただ、キーボードを入力している際にタッチパッドに触れると反応してしまうのは微妙だった。クリックしてしまう。タップでクリックしないように設定を変えるべきだったかもしれない。

Surface Book、割と欲しいが、定価で買う余裕はないorz

無事に返品が受け入れられて、お金が無事に返金されることを願うばかりである

返品を行うのは失敗だったと思うか否か、答えは来週か?それとも再来週か?

ブログに特に続報がなければ無事に返金されたということで。

4/6追記

今朝、返品手続きは無事に終わったらしい。返送して1週間経って、手続が終わった。先週の金曜に発送して、土曜の朝には国際交換局より発送されていて、日本時間の日曜頃にはシカゴに到着していた。火曜の朝頃に税関から出てきて、水曜の朝にはケンタッキー州の返品先に到着していた。返品手続きの終了を伝えるメールは今日の早朝に届いていた。

購入時に使ったデビットカードに反映されるのを待っている。

送料が全額返金されていなかったので、チャットで問い合わせたら、何がおかしいのか的な返事だったのでreturns policiesを引用して投げたら返品理由を聞かれた。新品を買ったはずが新品じゃなかったと答えた。

Your return label will require you to return the item at your own expense. Amazon will automatically refund up to $20 for return postage costs on receipt of the item. If your return postage costs exceed $20, you may contact our Customer Service Center to request a refund of the remaining postage cost. If you return a defective, damaged or incorrect item, you’ll be refunded the full postage cost, as well as your Import Fees Deposit, once your return is processed.

今になってから気が付いたが、”If you return a defective, damaged or incorrect item, you’ll be refunded the full postage cost,”とあるので、自己都合の返品だと返送料の全額返金はなさそうな感じだ。返品リクエストの時、自分で返品リクエストを出さないで、サポートの人が返品リクエストを出してくれた。おそらく、その際に自己都合なのか不良品なのか区別のつかない理由を選択肢から選んでしまったんだろう。

送料が戻ってこなかったとしても、15ドルも戻ってくれば、悪くはない。が、注文しなおすかどうかとなると迷う。全額返送料が戻ってきたら、再注文するかと思う。

4/7追記

返金処理が行われた翌日の今日朝9時過ぎにソニー銀行のVISAデビットであるSony Bank WALLETカードに反映されていた。送料の全額返金は、まだ反映されていなかったが、再注文した。今度は919ドルで評価数も多くて問題が見当たらない出品者なので大丈夫だと思いたい。

マイニングツールをでっちあげた(作りかけ)

2/28 16時追記:

switcherは未完成で、使い物にならないので、使わない方が良いかもしれません。明日までに修正を出します…

17時追記:

修正版を出しました。再起動するか、rm switcherで今あるswitcherを消して実行しなおしてください。

以下の問題が修正されました

  • ベンチマークした結果の保存先ファイル名が間違っていた(switcherを終了して起動しなおした場合、本来はベンチマークを取り直さず前回の結果を流用するが、出来ていなかった)
  • スイッチングの際にccminerやexcavatorを正しく終了していなかった

19時追記:

以下の問題が修正されました

  • switcherが強制終了されたときにccminerやexcavatorが終了しない

 

マイニングツールをでっちあげたので、操作説明みたいなのを書いてみました。突込みとか、ここがわかりづらいとか、あったら教えてください。ここでハマったとか、自分の環境の問題かもしれないけど問題があった場合でも大歓迎です。コメント欄にどうぞ(もしも、スパムフィルタに引っかかって消されたらすみません…)

特徴

ネットワークブートしてArch Linuxベースなのが特徴です。他には…

  • 無料
  • タダで使おうと思えばタダで使える
  • 常に新しいドライバが入る(その代わり新しすぎてバグを踏む場合も…)
  • ネットワークブートなのでHDD/SSDが不要で、代金をケチれる
  • Windowsを購入する金額がケチれる
  • 割と手軽??
  • 国産?(いろいろ海外のサーバーやサービスを使っているので微妙な所)
  • サポートは日本語で対応

すぐに思いつくのがこれくらい。

“マイニングツールをでっちあげた(作りかけ)” の続きを読む

Raspberry PiでPICマイコンを焼く

2018/5/21追記:

公式サイト紹介しているブログを見てもらうと早いが、pickleが幅広いPICマイコンに対応している。下記で紹介されている方法では、限られたPICマイコンしか書き込みができない。pickleを使ったほうが、いろんなPICマイコンに対応していて便利かもしれないのでご参考に

 

何かわからないところがあったらコメントを書くか@akimasa2000にでも話しかけてくれると、答えるかも?

インストール

まずは適当なRaspberry Piを用意して、Raspbianを入れておく。そして、build-essential(おそらく初期で入っている)とgit(git cloneでダウンロードしない場合は不要)を入れる。その後、リポジトリを取得して、ビルドする。

sudo apt update
sudo apt install build-essential git
git clone https://github.com/WallaceIT/picberry
cd picberry
make raspberrypi #詳細は下表を参照

picberryの説明に次のような表がある。

TARGET Processor/Board
raspberrypi Raspberry Pi v1 or Zero
raspberrypi2 Raspberry Pi v2 or v3
am335x Boards based on TI AM335x (BeagleBone)
a10 Boards based on Allwinner A10 (Cubieboard)

自分の使うRasPiが1だったり、Zeroの場合はmake raspberrypiと、2や3の場合はmake raspberrypi2でビルドする。

接続

上の図はattiny85だと書いてあるが、これをPIC12F322だと思って欲しい。左に切り欠きがあって、左下に1ピンのサインがある。

電源以外に接続する必要があるピンはデータシートを参照してほしい。

picberryの説明に次のようにある

If not specified in the command line, the default GPIOs <-> PIC connections are the following:

for the Raspberry Pi:

PGC  <-> GPIO23
PGD  <-> GPIO24
MCLR <-> GPIO18

操作する

picberryのディレクトリに実行ファイルが出来上がっていると思うので、実行する。

次のようなメッセージが出た場合は、接続が間違っているか何か問題がある。

sudo ./picberry -f pic10f322 -b
picberry PIC Programmer v0.2
Device ID: 0x0
ERROR: unknown/unsupported device or programmer not connected.
Press ENTER to exit program mode...

ブランクチェック

新品のPIC10F322を使った場合は、次のようなメッセージが出てくる。

sudo ./picberry -f pic10f322 -b
picberry PIC Programmer v0.2
Device Name: PIC10F322
Device ID: 0x0000014c
Revision: 0x00000002
Blank check...chip is blank.
Press ENTER to exit program mode...

バルクイレース

 $ sudo ./picberry -f pic10f322 -e
picberry PIC Programmer v0.2
Device Name: PIC10F322
Device ID: 0x0000014c
Revision: 0x00000002
Bulk Erase...DONE!
Press ENTER to exit program mode...

書き込み

 $ sudo ./picberry -f pic10f322 -e
picberry PIC Programmer v0.2
Device Name: PIC10F322
Device ID: 0x0000014c
Revision: 0x00000002
Bulk Erase...DONE!
Press ENTER to exit program mode...

対応しているPIC

Pull Requestにあるように、次のデバイスでの読み書きはテストした。秋月で入手できた奴だけだ…。

  • PIC10F322
  • PIC12LF1822
  • PIC16F1823
  • PIC16F1825
  • PIC16F1827
  • PIC16F1828
  • PIC16F1829

次のデバイスでもテストは行っていないが可能なはず。(順番は昇順でなく適当なので注意)

  • PIC10F320
  • PIC10LF320
  • PIC16F1826
  • PIC16LF1826
  • PIC16LF1827
  • PICLF1823
  • PIC12F1822
  • PIC16F1824
  • PIC16LF1824
  • PIC16LF1825
  • PIC16LF1828
  • PIC16LF1829

RasPiでiSCSIを使うためカーネルをビルドした

TL;DR

Raspberry PiでiSCSIターゲットを利用したい場合Archを使うと楽かも

Kernel buildingを参照してカーネルをビルド、インストールすればよい。

menuconfigで、Device Drivers —> Generic Target Core Mod (TCM) and ConfigFS Infrastructureを有効にし、Generic Target Core Mod (TCM) and ConfigFS Infrastructureの中も必要なモジュールを有効にして、ビルドする。

あとはKernel buildingに従ってSDカードに転送する。

本文

Kernel buildingを参照していろいろ準備する。
Bash on Windowsで入るUbuntuではbc, build-essential, libncurses5-devが必要だった。
説明にある通り進めて、make bcm2709_defconfigのあとにmenuconfigに入る。
下記の感じ。

git clone https://github.com/raspberrypi/tools ~/tools
echo PATH=\$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin >> ~/.bashrc
source ~/.bashrc
git clone --depth=1 https://github.com/raspberrypi/linux
cd linux
KERNEL=kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j16

menuconfigではDevice Drivers —> Generic Target Core Mod (TCM) and ConfigFS Infrastructureを選択してMキーを押す。割と最初の方にある。

そして、zImage modules dtbsを(modulesだけでよかったかも?)makeすると、いろいろ生成されるが、次のファイルが重要になる。

 LD [M] crypto/crct10dif_common.ko
 LD [M] crypto/crct10dif_generic.ko
 LD [M] drivers/target/target_core_mod.ko
 LD [M] lib/crc-t10dif.ko

scp使うのも面倒なので、tar c crypto/crct*.ko drivers/target/target_core_mod.ko lib/crc-t10dif.ko | gzip | base64 でbase64を吐き出させて(実際は> /mnt/c/Users/hoge/hoge.txtみたいにデスクトップ上の適当なファイルに吐き出させた。)、 base64 -d | tar zxvをRaspberry Piの方で実行して、吐き出されたbase64を貼り付けて、開業して、Ctrl-dで転送した。

sudo insmod crypto/* lib/* drivers/target/*

これでよいかと思ったら、Generic Target Core Mod (TCM) and ConfigFS InfrastructureをMキー押して有効にしたら、開いたところにさらに選べるのが出てきていて、それが足りていなくてダメなようだった。
仕方がないので有効にしてビルドしなおしているが、エラーが出た。
cleanして、modulesだけmakeして何とかなった。
面倒なので、RasPiでnc -l -p 8000 > ~/mod.tar.gz実行して、
Bash on Windows

mkdir -p mnt/ext4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install
cd mnt/ext4
tar czvf ~/mod.tar.gz ./
cat ~/mod.tar.gz | nc (RasPi IP Address) 8000

RasPi

cd /
sudo tar xf ~/mod.tar.gz

で、適当に転送して書き換えた。
うまくいかんので、”depmod -a”したが意味ない。
cat lib/modules/4.9.76-v7+/modules.builtin見てみたらkernel/lib/crc-t10dif.koとかあったので、curl https://raw.githubusercontent.com/Hexxeh/rpi-firmware/master/modules/4.9.76-v7%2B/modules.builtin | sudo tee modules.builtinとかやってみたが、意味なかった。

mkdir -p mnt/fat32/overlays/
cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img
cp arch/arm/boot/dts/*.dtb mnt/fat32/
cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/

あとはmnt/fat32/をRasPiの/boot/にコピーして、再起動するだけでよかった。
そしたら、無事targetcli-fbが入った。

iSCSIをRasPiで使いたい

やりたいこと

Raspberry Pi 3をiSCSIターゲットにしたい。

TL;DR

Raspberry PiでiSCSIターゲットを利用したい場合Archを使うと楽かも

RasPiでiSCSIを使うためカーネルをビルドした

iSCSI Enterprise Targetのパッケージiscsitargetは古いので、LIOターゲットを使うべき。らしい。LIOターゲットのパッケージであるtargetcli-fbはRaspbianに入ってはいるが、カーネルを自分でビルドしないと使えなさそう。

試行記録

Raspbianでiscsitarget-dkmsを入れようとしたら次のようなエラーが出た

Setting up linux-kbuild-3.6 (3.6-1~experimental.1+rpi2+b2) ...
Setting up iscsitarget-dkms (1.4.20.3+svn502-2) ...

Creating symlink /var/lib/dkms/iscsitarget/1.4.20.3+svn502/source ->
 /usr/src/iscsitarget-1.4.20.3+svn502

DKMS: add completed.
Error! echo
Your kernel headers for kernel 4.9.59-v7+ cannot be found at
/lib/modules/4.9.59-v7+/build or /lib/modules/4.9.59-v7+/source.
Removing old iscsitarget-1.4.20.3+svn502 DKMS files...

------------------------------
Deleting module version: 1.4.20.3+svn502
completely from the DKMS tree.
------------------------------
Done.
Loading new iscsitarget-1.4.20.3+svn502 DKMS files...
It is likely that 4.9.59-v7+ belongs to a chroot's host
Building for 3.6-trunk-rpi, 4.9.59+ and 4.9.59-v7+
Building initial module for 3.6-trunk-rpi
Error! Bad return status for module build on kernel: 3.6-trunk-rpi (armv7l)
Consult /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/make.log for more information.
Setting up linux-headers-3.6-trunk-rpi (3.6.9-1~experimental.1+rpi7) ...
Examining /etc/kernel/header_postinst.d.
run-parts: executing /etc/kernel/header_postinst.d/dkms 3.6-trunk-rpi
Error! Bad return status for module build on kernel: 3.6-trunk-rpi (armv7l)
Consult /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/make.log for more information.

raspberrypi-kernel-headersを入れてみたが、古いようでダメだった。
rpi-updateで入るかと思ったが、これでもダメだった。

調べてみて出てきたので、rpi-sourceを使ってみた。そのままではGCCのバージョンが違うようで実行できないので、rpi-source --skip-gccで通った。が、dkms autoinstallが通らない。

sudo apt install gcc-4.9 g++-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 50
cd ~/linux/
make clean
make modules_prepare
sudo dkms autoinstall

しかし、やはり通らない。

$ cat /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/make.log  DKMS make.log for iscsitarget-1.4.20.3+svn502 for kernel 4.9.76-v7+ (armv7l)
Sun 14 Jan 18:29:00 JST 2018
make: Entering directory '/home/pi/linux-5aa4c3138c62f89b0f805c6591018d16c562e77c'
  LD      /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/built-in.o
  LD      /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/built-in.o
  CC [M]  /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/tio.o
  CC [M]  /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.o
  CC [M]  /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.o
  CC [M]  /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/wthread.o
In file included from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/tio.c:7:0:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:274:19: error: field ‘rx_hash’ has incomplete type
  struct hash_desc rx_hash;
                   ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:275:19: error: field ‘tx_hash’ has incomplete type
  struct hash_desc tx_hash;
                   ^
In file included from ./include/linux/sched.h:17:0,
                 from ./include/linux/blkdev.h:4,
                 from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:11,
                 from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/tio.c:7:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/tio.c: In function ‘tio_add_data’:
./include/linux/kernel.h:739:16: warning: comparison of distinct pointer types lacks a cast
  (void) (&min1 == &min2);   \
                ^
./include/linux/kernel.h:742:2: note: in expansion of macro ‘__min’
  __min(typeof(x), typeof(y),   \
  ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/tio.c:75:25: note: in expansion of macro ‘min’
  const size_t to_copy = min(tio->pg_cnt * PAGE_SIZE - iter->size, len);
                         ^
./include/linux/kernel.h:739:16: warning: comparison of distinct pointer types lacks a cast
  (void) (&min1 == &min2);   \
                ^
./include/linux/kernel.h:742:2: note: in expansion of macro ‘__min’
  __min(typeof(x), typeof(y),   \
  ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/tio.c:82:18: note: in expansion of macro ‘min’
   size_t chunk = min(PAGE_SIZE - iter->pg_off, residual);
                  ^
In file included from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/wthread.c:9:0:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:274:19: error: field ‘rx_hash’ has incomplete type
  struct hash_desc rx_hash;
                   ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:275:19: error: field ‘tx_hash’ has incomplete type
  struct hash_desc tx_hash;
                   ^
In file included from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:16:0:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:274:19: error: field ‘rx_hash’ has incomplete type
  struct hash_desc rx_hash;
                   ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:275:19: error: field ‘tx_hash’ has incomplete type
  struct hash_desc tx_hash;
                   ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c: In function ‘iscsi_conn_init_read’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:45:16: error: ‘struct msghdr’ has no member named ‘msg_iov’
  conn->read_msg.msg_iov = conn->read_iov;
                ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:46:16: error: ‘struct msghdr’ has no member named ‘msg_iovlen’
  conn->read_msg.msg_iovlen = 1;
                ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c: In function ‘forward_iov’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:86:12: error: ‘struct msghdr’ has no member named ‘msg_iov’
  while (msg->msg_iov->iov_len <= len) { ^ /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:87:13: error: ‘struct msghdr’ has no member named ‘msg_iov’ len -= msg->msg_iov->iov_len;
             ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:88:6: error: ‘struct msghdr’ has no member named ‘msg_iov’
   msg->msg_iov++;
      ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:89:6: error: ‘struct msghdr’ has no member named ‘msg_iovlen’
   msg->msg_iovlen--;
      ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:92:5: error: ‘struct msghdr’ has no member named ‘msg_iov’
  msg->msg_iov->iov_base = (char *) msg->msg_iov->iov_base + len;
     ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:92:39: error: ‘struct msghdr’ has no member named ‘msg_iov’
  msg->msg_iov->iov_base = (char *) msg->msg_iov->iov_base + len;
                                       ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:93:5: error: ‘struct msghdr’ has no member named ‘msg_iov’
  msg->msg_iov->iov_len -= len;
     ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c: In function ‘do_recv’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:113:5: error: ‘struct msghdr’ has no member named ‘msg_iov’
  msg.msg_iov = iov;
     ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:114:5: error: ‘struct msghdr’ has no member named ‘msg_iovlen’
  msg.msg_iovlen = min_t(size_t, conn->read_msg.msg_iovlen, ISCSI_CONN_IOV_MAX);
     ^
In file included from ./include/linux/list.h:8:0,
                 from ./include/linux/module.h:9,
                 from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:9:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:114:47: error: ‘struct msghdr’ has no member named ‘msg_iovlen’
  msg.msg_iovlen = min_t(size_t, conn->read_msg.msg_iovlen, ISCSI_CONN_IOV_MAX);
                                               ^
./include/linux/kernel.h:737:13: note: in definition of macro ‘__min’
  t1 min1 = (x);     \
             ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:114:19: note: in expansion of macro ‘min_t’
  msg.msg_iovlen = min_t(size_t, conn->read_msg.msg_iovlen, ISCSI_CONN_IOV_MAX);
                   ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:115:30: error: ‘struct msghdr’ has no member named ‘msg_iovlen’
  for (i = 0, len = 0; i < msg.msg_iovlen; i++) { ^ /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:116:26: error: ‘struct msghdr’ has no member named ‘msg_iov’ iov[i] = conn->read_msg.msg_iov[i];
                          ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:122:8: error: too many arguments to function ‘sock_recvmsg’
  res = sock_recvmsg(conn->sock, &msg, len, MSG_DONTWAIT | MSG_NOSIGNAL);
        ^
In file included from ./include/linux/skbuff.h:29:0,
                 from ./include/linux/if_ether.h:23,
                 from ./include/uapi/linux/ethtool.h:18,
                 from ./include/linux/ethtool.h:17,
                 from ./include/linux/netdevice.h:42,
                 from ./include/net/sock.h:51,
                 from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:19,
                 from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:16:
./include/linux/net.h:228:5: note: declared here
 int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags);
     ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c: In function ‘write_data’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:343:9: error: too few arguments to function ‘vfs_writev’
   res = vfs_writev(file, (struct iovec __user *) iop, count, &off);
         ^
In file included from ./include/linux/seq_file.h:10:0,
                 from ./include/linux/pinctrl/consumer.h:17,
                 from ./include/linux/pinctrl/devinfo.h:21,
                 from ./include/linux/device.h:24,
                 from ./include/linux/genhd.h:64,
                 from ./include/linux/blkdev.h:9,
                 from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:11,
                 from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:16:
./include/linux/fs.h:1782:16: note: declared here
 extern ssize_t vfs_writev(struct file *, const struct iovec __user *,
                ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:378:18: error: ‘PAGE_CACHE_SHIFT’ undeclared (first use in this function)
  idx = offset >> PAGE_CACHE_SHIFT;
                  ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:378:18: note: each undeclared identifier is reported only once for each function it appears in
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:379:13: error: ‘PAGE_CACHE_MASK’ undeclared (first use in this function)
  offset &= ~PAGE_CACHE_MASK;
             ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:386:14: error: ‘PAGE_CACHE_SIZE’ undeclared (first use in this function)
   sendsize = PAGE_CACHE_SIZE - offset;
              ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c: In function ‘close_conn’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.c:669:32: warning: assignment from incompatible pointer type
  conn->sock->sk->sk_data_ready = target->nthread_info.old_data_ready;
                                ^
scripts/Makefile.build:293: recipe for target '/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/tio.o' failed
make[2]: *** [/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/tio.o] Error 1
make[2]: *** Waiting for unfinished jobs....
scripts/Makefile.build:293: recipe for target '/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/wthread.o' failed
make[2]: *** [/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/wthread.o] Error 1
scripts/Makefile.build:293: recipe for target '/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.o' failed
make[2]: *** [/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/nthread.o] Error 1
In file included from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:13:0:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:274:19: error: field ‘rx_hash’ has incomplete type
  struct hash_desc rx_hash;
                   ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:275:19: error: field ‘tx_hash’ has incomplete type
  struct hash_desc tx_hash;
                   ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c: In function ‘cmnd_skip_pdu’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:485:21: error: ‘PAGE_CACHE_SIZE’ undeclared (first use in this function)
  for (i = 0; size > PAGE_CACHE_SIZE; i++, size -= PAGE_CACHE_SIZE) {
                     ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:485:21: note: each undeclared identifier is reported only once for each function it appears in
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:492:16: error: ‘struct msghdr’ has no member named ‘msg_iov’
  conn->read_msg.msg_iov = conn->read_iov;
                ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:493:16: error: ‘struct msghdr’ has no member named ‘msg_iovlen’
  conn->read_msg.msg_iovlen = ++i;
                ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c: In function ‘cmnd_recv_pdu’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:712:39: error: ‘PAGE_CACHE_SIZE’ undeclared (first use in this function)
  if (!(offset + size <= tio->pg_cnt * PAGE_CACHE_SIZE)) {
                                       ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:718:18: error: ‘PAGE_CACHE_SHIFT’ undeclared (first use in this function)
  idx = offset >> PAGE_CACHE_SHIFT;
                  ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:719:13: error: ‘PAGE_CACHE_MASK’ undeclared (first use in this function)
  offset &= ~PAGE_CACHE_MASK;
             ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:721:16: error: ‘struct msghdr’ has no member named ‘msg_iov’
  conn->read_msg.msg_iov = conn->read_iov;
                ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:733:18: error: ‘struct msghdr’ has no member named ‘msg_iovlen’
    conn->read_msg.msg_iovlen = ++i;
                  ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:740:18: error: ‘struct msghdr’ has no member named ‘msg_iovlen’
    conn->read_msg.msg_iovlen = i;
                  ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c: In function ‘nop_out_start’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:921:17: error: ‘struct msghdr’ has no member named ‘msg_iov’
   conn->read_msg.msg_iov = conn->read_iov;
                 ^
In file included from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:13:0:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:456:36: error: ‘PAGE_CACHE_SIZE’ undeclared (first use in this function)
 #define get_pgcnt(size) (((size) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
                                    ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:924:17: note: in expansion of macro ‘get_pgcnt’
    int pg_cnt = get_pgcnt(size);
                 ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:456:60: error: ‘PAGE_CACHE_SHIFT’ undeclared (first use in this function)
 #define get_pgcnt(size) (((size) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
                                                            ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:924:17: note: in expansion of macro ‘get_pgcnt’
    int pg_cnt = get_pgcnt(size);
                 ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:949:17: error: ‘struct msghdr’ has no member named ‘msg_iovlen’
   conn->read_msg.msg_iovlen = i;
                 ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c: In function ‘scsi_cmnd_start’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:989:7: error: ‘SERVICE_ACTION_IN’ undeclared (first use in this function)
  case SERVICE_ACTION_IN:
       ^
In file included from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:13:0:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:456:36: error: ‘PAGE_CACHE_SIZE’ undeclared (first use in this function)
 #define get_pgcnt(size) (((size) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
                                    ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:1030:24: note: in expansion of macro ‘get_pgcnt’
   req->tio = tio_alloc(get_pgcnt(length));
                        ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:456:60: error: ‘PAGE_CACHE_SHIFT’ undeclared (first use in this function)
 #define get_pgcnt(size) (((size) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
                                                            ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:1030:24: note: in expansion of macro ‘get_pgcnt’
   req->tio = tio_alloc(get_pgcnt(length));
                        ^
In file included from /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:14:0:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c: In function ‘nop_out_exec’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:456:36: error: ‘PAGE_CACHE_SIZE’ undeclared (first use in this function)
 #define get_pgcnt(size) (((size) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
                                    ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi_dbg.h:60:9: note: in definition of macro ‘assert’
   if (!(p)) {      \
         ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:1479:10: note: in expansion of macro ‘get_pgcnt’
   assert(get_pgcnt(req->pdu.datasize) < ISCSI_CONN_IOV_MAX); ^ /var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.h:456:60: error: ‘PAGE_CACHE_SHIFT’ undeclared (first use in this function) #define get_pgcnt(size) (((size) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
                                                            ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi_dbg.h:60:9: note: in definition of macro ‘assert’
   if (!(p)) {      \
         ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:1479:10: note: in expansion of macro ‘get_pgcnt’
   assert(get_pgcnt(req->pdu.datasize) < ISCSI_CONN_IOV_MAX);
          ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c: In function ‘__cmnd_send_pdu’:
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.c:1638:40: error: ‘PAGE_CACHE_SIZE’ undeclared (first use in this function)
  assert(offset + size <= tio->pg_cnt * PAGE_CACHE_SIZE);
                                        ^
/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi_dbg.h:60:9: note: in definition of macro ‘assert’
   if (!(p)) {      \
         ^
scripts/Makefile.build:293: recipe for target '/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.o' failed
make[2]: *** [/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel/iscsi.o] Error 1
scripts/Makefile.build:544: recipe for target '/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel' failed
make[1]: *** [/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build/kernel] Error 2
Makefile:1497: recipe for target '_module_/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build' failed
make: *** [_module_/var/lib/dkms/iscsitarget/1.4.20.3+svn502/build] Error 2
make: Leaving directory '/home/pi/linux-5aa4c3138c62f89b0f805c6591018d16c562e77c'

https://bugs.launchpad.net/ubuntu/+source/iscsitarget/+bug/1668808/comments/2

こんな記述を発見した。どうやら不要らしい。

と思いきや、 iscsitarget not enabled in “/etc/default/iscsitarget”, not starting…で起動していなかったので言われたファイルを編集する。

モジュールが足りなくて起動しなかった。

よく調べたら、現在の標準はIETではなくLIOらしい。

そこで、targetcli-fbを入れたがサービス起動時に次のようなエラーが出てダメだった。target_coreがないらしい。

Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: Loading rstlib-fb targetctl: targetctlTraceback (most recent call last):
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: File "/usr/bin/targetctl", line 82, in <module>
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: main()
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: File "/usr/bin/targetctl", line 79, in main
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: funcs[sys.argv[1]](savefile)
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: File "/usr/bin/targetctl", line 47, in restore
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: errors = RTSRoot().restore_from_file(restore_file=from_file)
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: File "/usr/lib/python2.7/dist-packages/rtslib_fb/root.py", line 67, in __init__
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: modprobe('target_core_mod')
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: File "/usr/lib/python2.7/dist-packages/rtslib_fb/utils.py", line 392, in modprobe
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: raise RTSLibError(stderrdata)
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: rtslib_fb.utils.RTSLibError: modprobe: FATAL: Module target_core_mod not found in directory /lib/modules/4.9.76-v7+
Jan 14 20:31:04 rpi3-iscsi rtslib-fb-targetctl[1031]: failed!

githubにそれっぽいissueがあったが、進展が今のところない。自分でカーネルをビルドしなおすしかなさそうな感じだった。

Build OpenOCD on Raspberry Pi

Raspberry Pi 3でOpenOCDをビルドしてみた。

$ git clone git://repo.or.cz/openocd.git
$ cd openocd/
$ ./bootstrap
$ ./configure --enable-sysfsgpio --enable-bcm2835gpio
$ make -j4

上記コマンドを実行する。ビルドにそんなに時間はかからなかったと思う。終わったら、tarに固めて、手元にあるRaspberry Pi Zero Wに転送して、使った。

秋月のAE-TYBLE16のFlashを読み取るのには成功したと思う。書き込みはまだ試していない。ちなみに、openocd.cfgの内容は下記の通り。Raspberry Pi Zero Wなので、初代RasPiと同じCPUを積んでいて、GPIOのメモリアドレスは初代のものを使う。adafruitの記事を真似て書いた。そちらの記事にも書いてあるが、下記のopenocd.cfgだと、SWDIOがBCM24ピン、SWDCLKがBCM25ピンになる。なお、Raspberry Pi 2以降で使う別のファイルであるinterface/raspberrypi2-native.cfgだと標準でSWDのピンが選ばれていたと思うので、openocd.cfgでわざわざ指定しなくてもSWDIOがBCM24ピン、SWDCLKがBCM25ピンになるはず。(2019年1月追記:ピンヘッダでは18ピンと22ピンになる)

source [find interface/raspberrypi-native.cfg]
transport select swd
bcm2835gpio_swd_nums 25 24
bcm2835gpio_trst_num 7
bcm2835gpio_srst_num 18
source [find target/nrf51.cfg]

Debianのopenocdパッケージのソースを見てみたが、普通に--enable-bcm2835gpioってconfigureのフラグに普通にあったので、多分RasPiで使える。

時間がない方や急いでいる人は、Debian(もしかしたらRaspbianも?)のパッケージをインストールすると良いかもしれない。試していないので、動くかどうかはよくわからない。

Raspberry Pi ZeroがUSB LANアダプタとして認識されない

/boot/config.txtにdtoverlay=dwc2を追記、/boot/cmdline.txtの最後に modules-load=dwc2,g_etherを追記した(スペース入れてから追記する。改行はしないで1行のまま追記する。)
しかし、Windowsだとプラグ・アンド・プレイで認識されないらしい。

その場合は、適当なRNDISドライバを使うと良いらしい。
デバイスマネージャーで、認識されてしまっている怪しげなシリアルポートのドライバを更新する。その際に、ダウンロードしたcabファイルを展開したフォルダを選択する。

 

https://qiita.com/gpsnmeajp/items/126fadd3e47cdd4a6c00

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の書き込みには使えないみたいだ。ワイヤをつないで、入力と出力が別のピンになっていて、あれ?となって、コマンドを打ってみたら見事にエラーが出た。