読者です 読者をやめる 読者になる 読者になる

冬イベはじめました。その3

E1海域のラスダン~周回(クリア後の掘り)について言及しています。

 輸送ゲージが0になるとMAPの形が少し変わります。進行ルート的には空母マスを必ず通ることになるので最後は潜水艦編成で攻略したほうがよいです。先制雷撃の手数が多いほうが事故率が下がるので6隻編成がよいでしょう。

E1とE3は札が共通していて、E2では潜水艦を使わないのでここで主力を投入しても問題なさそうです。ただし、練度の低い潜水艦(サブ)でも十分クリアできるのでそこはお好みで。

ルートとしては、GLMDCBEHINと進みます。基地航空隊はBマスに集中させ、軽巡駆逐艦が残ったらお祈りで。

 

ゲージ破壊後はNマスで弾薬を拾えるようになります。高速仕様(タービン+缶)の潜水艦を編成に入れることにより、GDCFBEHINと進むことができます。Fマスで燃料を拾えてエコですが、火力がやや不足気味になります。

 

先制爆雷できる艦が3隻いる場合は、軽巡1駆逐3雷巡1水母1でGDABEHINと進んだほうが掘りが安定しそうです。この場合、雷巡1は重巡1にしても大丈夫です。(Bマスでリ級が残ったときの事故対策)

冬イベはじめました。その2

艦これ

艦これ冬イベE1海域に関する記事になります。


E1海域は、通常艦隊出撃による輸送作戦です。

この海域には、ボスキャラっぽいの(潜水棲姫)はIマスにいるけどボスはいないので、1-6みたいな感じでゴールマス(Kマス)に辿り着ければゲージを減らすことができます。ゆえに例えIマスで大破艦が出てしまっても進撃させることが可能です。

なお、TPが0まで減るとMAPに新たにマスが追加されて難易度が上がるので、掘りを行なう場合は輸送ゲージを残した状態でIマスで撤退するのが上策です。

 

潜水艦(4~6隻)を使えばかなり簡単にクリアできますが、掘りも兼ねて水上艦の編成でクリアしていきます(乙作戦)。なお、丙作戦での掘りの結果は最後のほうに記しておきます。

f:id:tuttitan:20170213185153p:plain

GCEHJの各マスは戦闘にならないので、Dマス(空襲)、A, Iマス(対潜)、Bマスが戦闘マスです。水上艦編成でも乙作戦と丙作戦とでは進行ルートが異なり、乙だとGDABEHIJKと進み、丙だと1戦少ないGDCBEHIJと進みます。掘りで周回する場合は、丙作戦のほうがやりやすいと思います。

DマスやAマスでワンパン事故がある可能性があるため、防空CI装備や先制爆雷できる艦がいるとよいでしょう。

 

自分は以下の編成で攻略と掘りを進めています。

f:id:tuttitan:20170213190220p:plain

Dマスで航空優勢となるように軽空母に艦戦を、IマスでのS勝利するために対潜装備と彩雲を配備。編成が軽すぎると撃ち損ねて雷撃をもらったりするので重巡や雷巡を入れています。朝潮改二では先制爆雷できませんが、先制爆雷できる艦は3隻くらい欲しいところ。

この編成でのTPは10なので、クリアするまで11回出撃しないといけません。(ちなみに潜水艦編成のほうがTPが高い)

 

Iマスでレア艦がドロップします。堀りの結果(ドロップ順)を以下に記します。

浜風浦風U511、吹雪、吹雪、文月、綾波、睦月、叢雲、朧、鹿島、朧、如月、睦月、伊58、曙、浜風、白雪、瑞穂、川内、伊58、天龍、如月、白雪、伊26、磯波、伊19、瑞穂、如月、磯風

 

 MAP変化後(ラスダン)についてはその3で...

冬イベはじめました。その1

艦これ

艦これの2017年冬イベントの記事になります。

【偵察戦力急展開!「光」作戦】ということで、ある程度の情報が出揃ってきていますが、3海域の小規模な作戦で潜水艦や神風型が活躍しそうな雰囲気です。

f:id:tuttitan:20170213175217p:plain

 

甲種勲章を集めているわけでもなく、甲作戦のクリア報酬に目ぼしいものがあるわけでもないので【乙乙乙】でクリアを目指そうと思います。

海域 難易度
E1 瑞雲(六三一空)、間宮、伊良湖x3、箪笥、補強増設 瑞雲(六三一空)、伊良湖x2、箪笥、補強増設
E2 望遠鏡、熟練搭乗員、洋上補給x3、勲章、松風 望遠鏡、洋上補給x2、勲章、松風
E3 甲種勲章、勲章x2、回収資材x8、彩雲(東カロリン空)、伊14 勲章x2、回収資材x5、彩雲(東カロリン空)、伊14

 

出撃制限札は2枚で、E1E3共通で作戦部隊の札とE2の海上護衛部隊の札。

新実装艦は、報酬で「松風」「伊14」、ドロップで「藤波」「伊13」。

イベント期間は、2/11(土)~2/28(火)午前中を予定。

バナーキャラが「伊58」「伊8」「伊401」だったので温存しておこうと思ったのですが、E2では潜水艦は使わないっぽい+E1E3の札は共通+E1は潜水艦を使うと簡単、ということでE1から使ってもよさそう。

 

 

今回は札数が少ないので編成を考えるのに困ることはなさそうです。

E1: 輸送作戦【通常艦隊】

E2: 輸送作戦【連合艦隊

E3: 輸送作戦【通常艦隊】+殲滅作戦【連合艦隊】(Wゲージ)

 

E3にはなにやらギミックがあるらしく、前回のE4とE5を足して2で割ったようないじらしさがありそうです。

 

その2へ続く...

RPi3カーネルビルド再び...

RPi3 Linux

前回のカーネルビルドから半年近く経ちましたが、Raspberry Pi Zero(未入手)に無線LANアダプタを付けることを想定して、代替的にRPi3でカーネルビルドを行ないました。

tuttitan.hatenablog.com

 

ところが、以前書いた手順に従っても上手くいかなかったのでカーネルビルドの新解釈を今回は記そうと思います。

 

結論

カーネルビルドは --jobs=2(-j2)で行なうべし。
エラーが出る場合は並列化オプションを外すべし。

 

いきさつ

過去記事の手順を見て、カーネルビルドを進めていったのだけど、make -j4 zImage modules dtbs でerrorとなってしまった。

そこでRaspberry Pi 公式ページにある手順でやってみたのだけどやはり、make -j4 zImage modules dtbs のところで同様のerrorが出た。

 

エラーログ(クリックして展開)
  CC [M]  fs/nilfs2/recovery.o
  CC [M]  fs/nfsd/nfs4state.o
  CC [M]  fs/nls/nls_cp950.o
  CC [M]  fs/nls/nls_cp1250.o
  CC [M]  fs/nls/nls_cp1251.o
  CC [M]  fs/nilfs2/the_nilfs.o
  CC [M]  fs/nls/nls_iso8859-1.o
  CC [M]  fs/nls/nls_iso8859-2.o
  CC [M]  fs/nls/nls_iso8859-3.o
  CC [M]  fs/nls/nls_iso8859-4.o
  CC [M]  fs/nilfs2/segbuf.o
  CC [M]  fs/nls/nls_iso8859-5.o
  CC [M]  fs/nls/nls_iso8859-6.o
  CC      fs/nfs/nfsroot.o
  CC [M]  fs/nls/nls_iso8859-7.o
  CC [M]  fs/nilfs2/segment.o
  CC [M]  fs/nls/nls_cp1255.o
  CC [M]  fs/nls/nls_iso8859-9.o
  CC      fs/nfs/sysctl.o
  CC [M]  fs/nls/nls_iso8859-13.o
  CC [M]  fs/nls/nls_iso8859-14.o
  CC [M]  fs/nls/nls_iso8859-15.o
  CC [M]  fs/nls/nls_koi8-r.o
  CC      fs/nfs/fscache.o
  CC [M]  fs/nls/nls_koi8-u.o
  CC [M]  fs/nls/nls_koi8-ru.o
  CC [M]  fs/nfsd/nfs4idmap.o
  CC [M]  fs/nls/nls_utf8.o
  LD      fs/nls/built-in.o
  CC      fs/nfs/fscache-index.o
  CC [M]  fs/nfsd/nfs4acl.o
  CC [M]  fs/nilfs2/cpfile.o
  CC      fs/nfs/nfs2super.o
  CC      fs/nfs/proc.o
  CC [M]  fs/nfsd/nfs4callback.o
  CC [M]  fs/nilfs2/sufile.o
  CC      fs/nfs/nfs2xdr.o
  CC      fs/notify/fsnotify.o
  CC [M]  fs/nfsd/nfs4recover.o
  CC      fs/notify/notification.o
  CC [M]  fs/nilfs2/ifile.o
  CC      fs/nfs/nfs3super.o
  CC [M]  fs/nilfs2/alloc.o
  CC      fs/notify/group.o
  CC      fs/nfs/nfs3client.o
  LD [M]  fs/nfsd/nfsd.o
  CC      fs/nfs/nfs3proc.o
  CC      fs/notify/inode_mark.o
  CC      fs/notify/mark.o
  CC [M]  fs/nilfs2/gcinode.o
  CC [M]  fs/nilfs2/ioctl.o
  CC      fs/notify/vfsmount_mark.o
  LD      fs/ntfs/built-in.o
  CC      fs/nfs/nfs3xdr.o
  CC [M]  fs/ntfs/aops.o
  CC      fs/notify/fdinfo.o
  CC      fs/notify/dnotify/dnotify.o
  CC [M]  fs/nilfs2/sysfs.o
  LD      fs/notify/dnotify/built-in.o
  CC      fs/notify/fanotify/fanotify.o
  CC      fs/nfs/nfs3acl.o
  CC      fs/notify/fanotify/fanotify_user.o
  CC [M]  fs/ntfs/attrib.o
  LD [M]  fs/nilfs2/nilfs2.o
  CC      fs/notify/inotify/inotify_fsnotify.o
  LD      fs/notify/fanotify/built-in.o
  CC      fs/notify/inotify/inotify_user.o
  CC      fs/nfs/nfs4proc.o
  CC [M]  fs/ntfs/collate.o
  CC      fs/nfs/nfs4xdr.o
  LD      fs/notify/inotify/built-in.o
  LD      fs/notify/built-in.o
  CC      fs/nfs/nfs4state.o
  CC [M]  fs/ntfs/compress.o
fs/nfs/nfs4xdr.c: In function ‘nfs4_xdr_enc_link’:
fs/nfs/nfs4xdr.c:2187:1: internal compiler error: Segmentation fault
 }
 ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.9/README.Bugs> for instructions.
  CC [M]  fs/ntfs/debug.o
  CC [M]  fs/ntfs/dir.o
  LD      fs/ocfs2/built-in.o
  CC [M]  fs/ocfs2/alloc.o
  CC [M]  fs/ntfs/file.o
  CC [M]  fs/ntfs/index.o
The bug is not reproducible, so it is likely a hardware or OS problem.
scripts/Makefile.build:258: recipe for target 'fs/nfs/nfs4xdr.o' failed
make[2]: *** [fs/nfs/nfs4xdr.o] Error 1
scripts/Makefile.build:403: recipe for target 'fs/nfs' failed
make[1]: *** [fs/nfs] Error 2
make[1]: *** Waiting for unfinished jobs....
  CC [M]  fs/ntfs/inode.o
  CC [M]  fs/ocfs2/aops.o
  CC [M]  fs/ocfs2/blockcheck.o
  CC [M]  fs/ntfs/mft.o
  CC [M]  fs/ocfs2/buffer_head_io.o
  CC [M]  fs/ntfs/mst.o
  CC [M]  fs/ocfs2/dcache.o
  CC [M]  fs/ocfs2/dir.o
  CC [M]  fs/ntfs/namei.o
  CC [M]  fs/ocfs2/dlmglue.o
  CC [M]  fs/ntfs/runlist.o
  CC [M]  fs/ocfs2/export.o
  CC [M]  fs/ocfs2/extent_map.o
  CC [M]  fs/ntfs/super.o
  CC [M]  fs/ntfs/sysctl.o
  CC [M]  fs/ocfs2/file.o
  CC [M]  fs/ocfs2/heartbeat.o
  CC [M]  fs/ocfs2/inode.o
  CC [M]  fs/ocfs2/ioctl.o
  CC [M]  fs/ntfs/unistr.o
  CC [M]  fs/ntfs/upcase.o
  CC [M]  fs/ocfs2/journal.o
  CC [M]  fs/ntfs/bitmap.o
  CC [M]  fs/ocfs2/localalloc.o
  CC [M]  fs/ntfs/lcnalloc.o
  CC [M]  fs/ocfs2/locks.o
  CC [M]  fs/ocfs2/mmap.o
  CC [M]  fs/ntfs/logfile.o
  CC [M]  fs/ocfs2/namei.o
  CC [M]  fs/ocfs2/refcounttree.o
  CC [M]  fs/ntfs/quota.o
  CC [M]  fs/ocfs2/reservations.o
  CC [M]  fs/ntfs/usnjrnl.o
  LD [M]  fs/ntfs/ntfs.o
  CC [M]  fs/ocfs2/move_extents.o
  CC [M]  fs/ocfs2/resize.o
  CC [M]  fs/ocfs2/slot_map.o
  CC [M]  fs/ocfs2/suballoc.o
  CC [M]  fs/ocfs2/super.o
  CC [M]  fs/ocfs2/symlink.o
  CC [M]  fs/ocfs2/sysfile.o
  CC [M]  fs/ocfs2/uptodate.o
  CC [M]  fs/ocfs2/quota_local.o
  CC [M]  fs/ocfs2/quota_global.o
  CC [M]  fs/ocfs2/xattr.o
  CC [M]  fs/ocfs2/acl.o
  CC [M]  fs/ocfs2/stackglue.o
  CC [M]  fs/ocfs2/stack_o2cb.o
  CC [M]  fs/ocfs2/stack_user.o
  LD      fs/ocfs2/cluster/built-in.o
  CC [M]  fs/ocfs2/cluster/heartbeat.o
  CC [M]  fs/ocfs2/cluster/masklog.o
  LD      fs/ocfs2/dlm/built-in.o
  CC [M]  fs/ocfs2/dlm/dlmdomain.o
fs/ocfs2/dlm/dlmdomain.c: In function ‘dlm_unregister_domain’:
fs/ocfs2/dlm/dlmdomain.c:691:6: internal compiler error: Segmentation fault
 void dlm_unregister_domain(struct dlm_ctxt *dlm)
      ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.9/README.Bugs> for instructions.
  CC [M]  fs/ocfs2/cluster/sys.o
  CC [M]  fs/ocfs2/cluster/nodemanager.o
fs/ocfs2/xattr.c: In function ‘ocfs2_xattr_set’:
fs/ocfs2/xattr.c:3659:1: internal compiler error: in pre_and_rev_post_order_compute, at cfganal.c:1022
 }
 ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.9/README.Bugs> for instructions.
  LD      fs/ocfs2/dlmfs/built-in.o
  CC [M]  fs/ocfs2/dlmfs/userdlm.o
  CC [M]  fs/ocfs2/dlmfs/dlmfs.o
  CC [M]  fs/ocfs2/cluster/quorum.o
The bug is not reproducible, so it is likely a hardware or OS problem.
scripts/Makefile.build:258: recipe for target 'fs/ocfs2/dlm/dlmdomain.o' failed
make[3]: *** [fs/ocfs2/dlm/dlmdomain.o] Error 1
scripts/Makefile.build:403: recipe for target 'fs/ocfs2/dlm' failed
make[2]: *** [fs/ocfs2/dlm] Error 2
make[2]: *** Waiting for unfinished jobs....
  CC [M]  fs/ocfs2/cluster/tcp.o
  CC [M]  fs/ocfs2/cluster/netdebug.o
  LD [M]  fs/ocfs2/dlmfs/ocfs2_dlmfs.o
  LD [M]  fs/ocfs2/cluster/ocfs2_nodemanager.o
The bug is not reproducible, so it is likely a hardware or OS problem.
scripts/Makefile.build:258: recipe for target 'fs/ocfs2/xattr.o' failed
make[2]: *** [fs/ocfs2/xattr.o] Error 1
scripts/Makefile.build:403: recipe for target 'fs/ocfs2' failed
make[1]: *** [fs/ocfs2] Error 2
Makefile:961: recipe for target 'fs' failed
make: *** [fs] Error 2

    

 

試しに並列化オプションを外してmakeしてみると、時間はかかるが正常に終了する(公式手順)。『それならば、2並列(make -j2)ならどうか?』と思いやってみると、ログは飛び飛びに出力されてきますが並列化しないmakeのログと比較してみると内容は一致していて正常に終了しています。

というわけで、カーネルビルドの手順を以下にまとめます。

 

手順詳細
  1. カーネルビルドに必要なパッケージを導入する。
    # apt-get update
    # apt-get install git bc
  2. 適当なディレクトリを作り、githubからカーネルソースを入手する。
    $ mkdir ~/kernel
    $ cd ~/kernel
    $ git clone --depth=1 https://github.com/raspberrypi/linux
  3. カーネルビルドの準備をする。
    $ cd linux
    $ KERNEL=kernel7
    $ make bcm2709_defconfig
  4. カーネルビルドする。(100分近くかかります)
    make -j2 zImage modules dtbs
    ログを残して時間計測をしたい場合は次のように書く
    time make -j2 zImage modules dtbs 2>&1 | tee make.log
  5. カーネルをインストールする。(以降は前回の記事と同様)
    # make modules_install
  6. dtbを書き換える。
    # cp -v arch/arm/boot/dts/*.dtb /boot/
    # cp -v arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
    # cp -v arch/arm/boot/dts/overlays/README /boot/overlays/
  7. カーネルイメージを書き換える。
    # cp -v /boot/kernel7.img /boot/kernel7.img.old
    # scripts/mkknlimg arch/arm/boot/zImage /boot/kernel7.img
  8. 再起動する。

 

参考Webページ

 

 

Raspberry Pi3 で I2Cセンサーを使う

RPi3 I2C

Raspberry Pi3(RPi3)でI2Cを使うときのメモです。

秋月電子通商でIRセンサー(赤外線で距離を測るセンサー)を注文したのだけど、どうやってRPi3で使うんだ?ということになりました。

下調べの段階で、UARTではラインが占有されてしまうのでI2Cのほうがよいということで、I2Cに対応したセンサーを注文していました。

http://akizukidenshi.com/catalog/g/gI-07547/

f:id:tuttitan:20170209184902p:plain

 

以下にRPi3で使うための手順を示します。

  1. RPiを起動し、i2cを有効にする。
    $ sudo raspi-config
    TUIが起動するので、[7 Advanced Options] -> [A7 I2C] と進む
  2. 一応、RPi3を再起動する。
  3. aptより、i2c-toolsとlibi2c-devパッケージを入れる。
    $ sudo apt-get update
    $ sudo apt-get install i2c-tools libi2c-dev
  4. 一度、RPi3をシャットダウンする。
  5. 次のように、GP2Y0E03とRPi3を接続する。(ブレッドボードで行なうとよいでしょう)

    f:id:tuttitan:20170209191650p:plain

  6. RPi3を起動し、i2cdetectコマンドでセンサー(初期アドレスは0x40)を認識できるか確認する。
    $ sudo i2cdetect -y 1
  7. I2Cプログラムを書いて動作を確認する。(参考Webページのプログラムで確認できました)

 

「I2Cでセンサーを繋ぐときに、プルアップしなくていいの?」という疑問があったのですが、RPi3の 3, 5ピン(SDA, SCL)はオンボードで1.8 [kΩ] でプルアップされているっぽいので、直接結線すればいい感じです。

Schematics - Raspberry Pi Documentation

f:id:tuttitan:20170209184836p:plain

 

よりAdvancedなことは機会があれば書きます。

 

 

参考Webページ

makeするときはログを残そう

Linux Linuxコマンド

makeに限った話ではないけど、コマンドの結果(出力&エラー出力)をじっくり見たい、もしくは昔の結果を参照したいという時がある。

特にカーネルビルドでmakeするような場合、何もしなければ膨大の結果がスルスルっとターミナル上を流れていってバッファを遡れなくなってしまう。これだと途中でwarningなどがあっても気付くことができない。(errorなら途中でmakeが止まるでしょう)

 

ならばどうすればログを残せるのか?

どうやら、標準出力と標準エラーをteeコマンドにパイプすればよさそうです。

# make 2>&1 | tee make.1.log

 

 

参考Webページ

WebDAVとディレクトリの設定

Apache WebDAV

WebDAVを使うときはディレクトリの設定に気を付けなはれやという話。

Apache2を使っているという前提で話を進めます。/etc/apache2/apache2.conf かそれに連なるファイルに然るべき設定をして、いざアクセスしてみると PROPFINDが405と怒られた。

設定としては、今までWebDAVでやってたのと変わらないしオカシイなと思っていたら、怒られたディレクトリには index.html が存在している。試しにリネームしてみると普通にアクセスできる。およよ...

 

どうやら、デフォルトのmoduleである mod_dir がWebDAVのルートディレクトリへのアクセスを index.html にリダイレクトして405エラーが出ていた模様。a2dismod dir で mod_dir を無効化しようとしたら、「このモジュールはエッセンシャルだから無効化するのはオススメしないよ?」と端末が言ってきたのでWebDAVでアクセスするルートディレクトリの設定で mod_dir を部分的に無効化した。(上流のディレクトリがAllowOverride Allであることを確認してね)

<Directory /webdav>
    DAV on
    DirectoryIndex
    Options -Indexes
</Directory>

 もちろん、.htaccessに書いてもOK。

 

同じ理屈で、『このディレクトリにアクセスがあったら、どこか違うページにリダイレクトする』といったような mod_rewrite の設定があってもエラーをもらうので設定には注意が必要なのです!