A certain engineer "COMPLEX"

開発メモ その167 Raspberry Pi 3をWindows 10でエミュレートする

Introduction


備忘録。
RaspberryPIを仮想環境で使いたくなったのでメモ。
ただし、現時点ではARM64のエミュレートはできませんでした。

How to


下記の方が教えてくれました。

どうも、ビンの王冠をスプーンで開けようとして指を怪我したニンゲンです。(怠慢ヨクナイネ)ちなみにビンの王冠と芥川龍之介は同い年なんですよ、知らなくて良い雑学で...

QEMUのインストール

下記から最新版をダウンロードしてインストール。

Raspbian Jessieのダウンロード

下記からダウンロード。
最新のStrechは動かなかったので断念。

QEMU用カーネルとDevice Treeファイル

下記から、

  • versatile-pb.dtb
  • kernel-qemu-4.4.34-jessie

をダウンロード。
kernel-qemuはバージョンが随時変わります。

Qemu kernel for emulating Rpi on QEMU. Contribute to dhruvvyas90/qemu-rpi-kernel development by creating an account on GitHub.

下準備

仮想マシンでも何でも良いのでダウンロードしたRaspbianのイメージを仮想マシンにコピー。

セクターの確認


$ fdisk -l 2017-01-11-raspbian-jessie-lite.img
Disk 2017-01-11-raspbian-jessie-lite.img: 1.3 GiB, 1390411776 bytes, 2715648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x244b8248

Device Boot Start End Sectors Size Id Type
2017-01-11-raspbian-jessie-lite.img1 8192 137215 129024 63M c W95 FAT32 (LBA)
2017-01-11-raspbian-jessie-lite.img2 137216 2715647 2578432 1.2G 83 Linux

マウント


$ sudo mount -v -o offset=$((512*137216)) -t ext4 ./2017-01-11-raspbian-jessie-lite.img /mnt/
mount: /dev/loop0 mounted on /mnt.

ファイルシステムテーブルの編集


$ sudo vi /mnt/etc/fstab

proc /proc proc defaults 0 0
-/dev/mmcblk0p1 /boot vfat defaults 0 2
- /dev/mmcblk0p2 / ext4 defaults,noatime 0 1
+ #/dev/mmcblk0p1 /boot vfat defaults 0 2
+ #/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

ld.so.preloadの編集


$ sudo editor /mnt/etc/ld.so.preload

- /usr/lib/arm-linux-gnueabihf/libarmmem.so
+ #/usr/lib/arm-linux-gnueabihf/libarmmem.so

アンマウント


$ sudo umount /mnt

起動

-hdaでダウンロードしたRaspbianのイメージを指定します。これがHDDになります


set QEMU="C:\Program Files\qemu\qemu-system-arm.exe"
%QEMU% -kernel kernel-qemu-4.4.34-jessie ^
-cpu arm1176 ^
-m 256 ^
-M versatilepb ^
-serial stdio ^
-append "root=/dev/sda2 rootfstype=ext4 rw" ^
-hda 2017-01-11-raspbian-jessie-lite.img ^
-net nic ^
-net user,hostfwd=tcp::20022-:22

開発メモ その166 重すぎるリポジトリをgit fetchする

Introduction


備忘録。
自宅のライブラリ保存用リポジトリが巨大化してpullできなくなりました。
その際の対策。


$ git fetch
remote: Enumerating objects: 8824, done.
remote: Counting objects: 100% (8821/8821), done.
error: RPC failed; curl 56 Failure when receiving data from the peer
fatal: the remote end hung up unexpectedly
fatal: protocol error: bad pack header

How to


下記の方が教えてくれました。

git clone http://example.com/fuga.git remote: Counting objects: 3203, done. remote: warning: suboptimal pack - out of memory remote: fatal: Out of memory, ma...

徐々にfetchしてpullすればよいと。


$ git fetch --depth 1
remote: Enumerating objects: 8374, done.
remote: Counting objects: 100% (8374/8374), done.
remote: Compressing objects: 100% (6008/6008), done.
remote: Total 8356 (delta 2189), reused 8277 (delta 2170)
Receiving objects: 100% (8356/8356), 1.31 GiB | 28.65 MiB/s, done.
Resolving deltas: 100% (2189/2189), completed with 9 local objects.
From https://hogehoge:3000/git/Lib
+ 67ccf8298...3fb81d65f master -> origin/master (forced update)
* [new branch] develop -> origin/develop
$ git fetch --depth 10
remote: Enumerating objects: 332, done.
remote: Counting objects: 100% (331/331), done.
remote: Compressing objects: 100% (154/154), done.R
remote: Total 310 (delta 166), reused 262 (delta 149)
Receiving objects: 100% (310/310), 66.85 MiB | 25.18 MiB/s, done.
Resolving deltas: 100% (166/166), completed with 10 local objects.
$ git fetch --depth 100
remote: Enumerating objects: 6031, done.
remote: Counting objects: 100% (5332/5332), done.
remote: Compressing objects: 100% (4312/4312), done.
remote: Total 5107 (delta 1739), reused 2367 (delta 531)
Receiving objects: 100% (5107/5107), 208.07 MiB | 14.61 MiB/s, done.
Resolving deltas: 100% (1739/1739), completed with 120 local objects.
$ git fetch
$ git pull origin master

cloneの場合も同様。


$ git clone --depth 1 http://example.com/fuga.git

開発メモ その165 gitで全ブランチをpullする

Introduction


備忘録。
UbuntuGit for Windowsで使えました。

How to


下記の方が教えてくれました。

すごく久々の投稿。 とりあえずコマンドを先に。 for branch in `git branch -r | grep -v HEAD | awk -F'/' '{print $2}'`; do git checkout ...


for branch in `git branch -r | grep -v HEAD | awk -F'/' '{print $2}'`; do git checkout $branch; git pull; done

Googleでgit 全ブランチで検索してトップに出てくるページのスクリプトは使えませんでした。

開発メモ その164 Ubuntu 18.04にCUDA 9.2をインストール

Introduction


CUDAのダウンロードページでCUDA 9.2にアクセスすると

Ubuntu 18.04に対応していないように見える。
そこはかとない不安を感じながら9.2をインストールしたのでメモ。

How to


17.10を選択し、runfile [local]を選択しダウンロードするだけです。
パッチもあるので忘れないこと。

インストール


sudo sh cuda_9.2.148_396.37_linux

でインストールを開始する。
最初にEULAの承諾を求められるので末尾に移動する。
Ctrl+Fで一気に末尾に。


Do you accept the previously read EULA?
accept/decline/quit:accept

EULAの承諾に対してはacceptと押下してENTER。
以降は、質問に答えていく形で、yまたはnEnterを駆使します。
途中でドライバーのインストールを聞かれますが、既に入っているなら無理してインストールする必要はないです。


You are attempting to install on an unsupported configuration. Do you wish to continue?
(y)es/(n)o [ default is no ]: y


Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 396.37?
(y)es/(n)o/(q)uit: n


Install the CUDA 9.2 Toolkit?
(y)es/(n)o/(q)uit: y


Enter Toolkit Location
[ default is /usr/local/cuda-9.2 ]:


Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y


Install the CUDA 9.2 Samples?
(y)es/(n)o/(q)uit: y


Enter CUDA Samples Location
[ default is /home/takuya ]:


Installing the CUDA Toolkit in /usr/local/cuda-9.2 ...
Installing the CUDA Samples in /home/takuya ...
Copying samples to /home/takuya/NVIDIA_CUDA-9.2_Samples now...
Finished copying samples.


===========
= Summary =
===========


Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-9.2
Samples: Installed in /home/takuya


Please make sure that
- PATH includes /usr/local/cuda-9.2/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-9.2/lib64, or, add /usr/local/cuda-9.2/lib64 to /etc/ld.so.conf and run ldconfig as root


To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.2/bin


Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-9.2/doc/pdf for detailed information on setting up CUDA.


***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 9.2 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run -silent -driver


Logfile is /tmp/cuda_install_2992.log

パッチのインストール

こちらもEULAの承諾が必要です。


sudo sh cuda_9.2.148.1_linux

承諾方法は同様。
聞かれるのはインストール先のみ。


Enter CUDA Toolkit installation directory
[ default is /usr/local/cuda-9.2 ]:


Installation complete!
Installation directory: /usr/local/cuda-9.2

簡単ですね。
aptを使うインストールよりも、こちらのが簡単な気がしないでもないです。

開発メモ その163 Ubuntu 18.04 with CUDA 9.2でcaffeをビルドする

Introduction


Ubuntu 18.04でパッケージマネージャーからインストールできるgccのバージョンが7になっている。


$ gcc --version
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

CUDA 9が6以降のgccでのビルドをサポートしていないため、caffeをビルドしようとするとエラーが起きてします。
が、openposeでビルドするときはこのエラーが起きないんですよね...
ちなみにこんなエラー。


$ cmake --build . --config Release
[ 1%] Running C++/Python protocol buffer compiler on /media/hdd/work/local/caffe/src/caffe/proto/caffe.proto
Scanning dependencies of target caffeproto
[ 1%] Building CXX object src/caffe/CMakeFiles/caffeproto.dir/__/__/include/caffe/proto/caffe.pb.cc.o
[ 1%] Linking CXX static library ../../lib/libcaffeproto.a
[ 1%] Built target caffeproto
[ 1%] Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile_1.dir/util/cuda_compile_1_generated_math_functions.cu.o
In file included from /usr/include/host_config.h:50:0,
from /usr/include/cuda_runtime.h:78,
from :0:
/usr/include/crt/host_config.h:121:2: error: #error -- unsupported GNU version! gcc versions later than 6 are not supported!
#error -- unsupported GNU version! gcc versions later than 6 are not supported!
^~~~~
CMake Error at cuda_compile_1_generated_math_functions.cu.o.Release.cmake:219 (message):
Error generating
/media/hdd/work/local/caffe/build/src/caffe/CMakeFiles/cuda_compile_1.dir/util/./cuda_compile_1_generated_math_functions.cu.o


src/caffe/CMakeFiles/caffe.dir/build.make:497: recipe for target 'src/caffe/CMakeFiles/cuda_compile_1.dir/util/cuda_compile_1_generated_math_functions.cu.o' failed
make[2]: *** [src/caffe/CMakeFiles/cuda_compile_1.dir/util/cuda_compile_1_generated_math_functions.cu.o] Error 1
CMakeFiles/Makefile2:235: recipe for target 'src/caffe/CMakeFiles/caffe.dir/all' failed
make[1]: *** [src/caffe/CMakeFiles/caffe.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

とにかくこの対処方法。

How to


対処として、古いgccをインストールしてそっちに切り替える方法もありますが、面倒なのでこれはパス。
なので、CUDA側のgccバージョンチェックを無効化する方法を採用します。


$ sudo vi /usr/include/crt/host_config.h

で設定ファイルを開き、下記チェック個所をコメントアウトします。


#error -- unsupported GNU version! gcc versions later than 6 are not supported!
//#error -- unsupported GNU version! gcc versions later than 6 are not supported!