エラーメッセージ通りにreceive.denyCurrentBranch=warnにすればいいかと思ったが、うまくいかず。
git config receive.denyCurrentBranch updateInstead
すれば良いらしい。
Just another WordPress site
エラーメッセージ通りにreceive.denyCurrentBranch=warnにすればいいかと思ったが、うまくいかず。
git config receive.denyCurrentBranch updateInstead
すれば良いらしい。
今度こそ大丈夫だと思っていたが、前回と同じような問題が起こっている。今度も上下が出荷されたセットではないため保証が受けられない。また返品することになった。進展があり次第更新する。
4/20追記:
無事に返金手続きがされた。領収書を指定されたメールアドレスに送ったら、送料分のドルが戻ってきて、Amazonの倉庫に到着したら税金を含む金額+15ドルが戻ってきた。若干儲かったことになる。送る手間や事故率の高さでアカウントを止められるリスクを考えたら繰り返したくないので、この辺にしておく。ドルのまま貯金して、そのうちMicrosoftの直販から買って、誰かに転送を頼むことにでもしようかと思う。あるいはThinkPadを注文してしまってもいいかな…。しばらくはドルのまま置くことになりそうだ。
日曜日の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ドルで評価数も多くて問題が見当たらない出品者なので大丈夫だと思いたい。
ググってみた結果では、~/.ssh/configに書くものばっかりだった。普段は中継せずに接続して、必要な時だけ多段接続したかった。下記のようにすれば良いだけだった。
ssh -o ProxyCommand="ssh proxyhost -W %h:%p" destinationhost
2/28 16時追記:
switcherは未完成で、使い物にならないので、使わない方が良いかもしれません。明日までに修正を出します…
17時追記:
修正版を出しました。再起動するか、rm switcherで今あるswitcherを消して実行しなおしてください。
以下の問題が修正されました
19時追記:
以下の問題が修正されました
マイニングツールをでっちあげたので、操作説明みたいなのを書いてみました。突込みとか、ここがわかりづらいとか、あったら教えてください。ここでハマったとか、自分の環境の問題かもしれないけど問題があった場合でも大歓迎です。コメント欄にどうぞ(もしも、スパムフィルタに引っかかって消されたらすみません…)
ネットワークブートしてArch Linuxベースなのが特徴です。他には…
すぐに思いつくのがこれくらい。
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...
Pull Requestにあるように、次のデバイスでの読み書きはテストした。秋月で入手できた奴だけだ…。
次のデバイスでもテストは行っていないが可能なはず。(順番は昇順でなく適当なので注意)
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が入った。
Raspberry Pi 3を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があったが、進展が今のところない。自分でカーネルをビルドしなおすしかなさそうな感じだった。
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も?)のパッケージをインストールすると良いかもしれない。試していないので、動くかどうかはよくわからない。
/boot/config.txtにdtoverlay=dwc2
を追記、/boot/cmdline.txtの最後に modules-load=dwc2,g_ether
を追記した(スペース入れてから追記する。改行はしないで1行のまま追記する。)
しかし、Windowsだとプラグ・アンド・プレイで認識されないらしい。
その場合は、適当なRNDISドライバを使うと良いらしい。
デバイスマネージャーで、認識されてしまっている怪しげなシリアルポートのドライバを更新する。その際に、ダウンロードしたcabファイルを展開したフォルダを選択する。