スタートアップ Intel Edison

今回はMacでやりました．
これはあくまで**メモ**なので，まとまった情報を期待してはいけない．．

# Macでやる作業
## ファームウェアアップデート
何はともあれ，これをしないと始まらない．
参考：[Flashing Edison (wired) - Mac](https://communities.intel.com/docs/DOC-23193#jive_content_id_Step_4__Flashing_Edison "Flashing Edison (wired) - Mac")

### 母艦（Mac）にHomebrewでツールをインストール
インストール済みの人は次の項へ．
*ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"*

### ファームを焼くために使うツールをMacにインストール
*brew install dfu-util coreutils gnu-getopt*

### Edisonのイメージを焼き込む
まずはダウンロード
[Edison - Software Downloads](https://communities.intel.com/docs/DOC-23242 "Edison - Software Downloads")から，「[Edison Yocto complete image](http://downloadmirror.intel.com/24271/eng/edison-image-ww36-14.zip "Linux image")」をダウンロードして，解凍しておく．

解凍したディレクトリへ移動
*cd ~/Downloads/edison-image-ww36-14* など

焼き込みスクリプト起動
*./flashall.sh*
スクリプトを起動すると，直後に「Please plug and reboot the board」と言われるので，そしたら一度，USBを抜いて挿し直す．
挿し直しは自動的に認識されるので，ターミナルを操作する必要はない．
焼き込みには5分くらいかかるので，電源を落としたりしないよう，ゆっくり待つ．

# シリアル接続してやる作業
## screenでシリアル接続
*screen /dev/cu.usbserial-A903BYAS 115200 -L* 
"-A903BYAS"の部分は，環境によって変わる．

## ログイン
接続したら，Returnを2度押すと，ログインプロンプトが現れる．
*login> __root__*
と入力して，rootユーザーでログイン．パスワードは必要ない．

## スケッチを停止
もしArduinoスケッチのプロセスが動いていたら，入力がモタついて操作しにくいので，以下のコマンドで止める．
*/opt/edison/sketch_reset.sh*

## バージョン確認
*cat /etc/version*
と入力して，表示されるバージョンが「edison-weekly_build_68_2014-09-08_13-49-07」のように，build_68以降であればOK．

## hostnameとパスワードとWifiの設定
*configure_edison --setup*
と入力すると，設定が始まる，Wifiは設定したらすぐに接続される．
設定が終了したら，「Done. Please connect your laptop or PC to the same network as this device and go to http://192.168.0.9 or http://edison.local in your browser.」のように言われてSSH接続できるようになるので，ここから先はSSHで作業を行う．

Wifiの設定だけを行う場合は，
*configure_edison --wifi*
で良い．

# SSH接続してやる作業
## ログイン
別のターミナルから，
*ssh root@edison.local*
「edison.local」のところは，前の項でシリアルから確認したアドレス．
パスワードを要求されるので，先ほど設定したばかりのものを入れる．

## タイムゾーンの変更
*rm /etc/localtime*
で既存の設定を消してから，

*ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime*
で東京/日本に合わせる．

## パッケージマネージャの設定
Yocto Linuxのパッケージマネージャは[opkg](http://wiki.openwrt.org/doc/techref/opkg)と言うらしい．
### Edisonの標準リポジトリの登録
*vi /etc/opkg/base-feeds.conf*
で __vi__ を起動して，
>src/gz all http://repo.opkg.net/edison/repo/all
>src/gz edison http://repo.opkg.net/edison/repo/edison
>src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32

の3行を記入．

### Intelリポジトリの登録
*vi /etc/opkg/intel-iotdk.conf*
で __vi__ を起動して，
> src intel-iotdk http://iotdk.intel.com/repos/1.1/intelgalactic
> src intel-all http://iotdk.intel.com/repos/1.1/iotdk/all
> src intel-i586 http://iotdk.intel.com/repos/1.1/iotdk/i586
> src intel-x86 http://iotdk.intel.com/repos/1.1/iotdk/x86

の4行を記入．

###パッケージリストのアップデート
*opkg update*

###インストール済みパッケージのアップグレード
*opkg upgrade*

## 自前ビルドしたライブラリの配置場所を作る
### ~/.local以下にディレクトリを作る
Edisonの __/__ 以下はあまり容量が割り振られていないため，2.2GBとeMMCの半分以上の容量が割り振られている __/home/__ 以下にツールやライブラリをインストールする．

*vi ~/.profile*
で __vi__ を起動して，

> export PATH=~/.local/bin:$PATH

を入力．これで，このディレクトリに配置したアプリケーションが優先して検索されるようになる．

入力後，
*source ~/.profile*
で，設定を有効化．（あるいは再ログイン）
コマンドで __export__ を入力すると，PATHが設定されていることがわかる．

## 計算ライブラリの導入
### gfortran(GCC)のインストール
**あっ，ダメだこれ．Edisonのメモリ容量が少な過ぎて，途中で止まる．．クロスビルド環境構築せな．**

ビルドに必要なパッケージをopkgでインストール．
*opkg install libgmp-dev libmpfr-dev libmpc-dev*

ソースのダウンロード
*wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.1/gcc-4.9.1.tar.bz2*

解凍
*tar jxvf ./gcc-4.9.1.tar.bz2*

ビルドディレクトリの作成
*mkdir ./gcc-4.9.1/build*

移動
*cd ./gcc-4.9.1/build*

コンフィグ
*../configure --prefix=/home/root/.local --enable-languages=c,c++,fortran --with-fpmath=sse*

ビルド
*make*

インストール
*make install*

### ATLASとLapackのインストール
Automatically Tuned Linear Algebra Software(ATLAS)の導入．線形代数高速演算ライブラリであるBLASのCPUアーキテクチャごとのチューニングを自動でやってくれる実装ってとこ．計算に特化したライブラリ(SciPyとか)だと，BLASが必要になる場合が多いので，ここで入れておく．

ATLASのソースを入手
*wget http://downloads.sourceforge.net/project/math-atlas/Stable/3.10.2/atlas3.10.2.tar.bz2*

解凍
*tar jxvf ./atlas3.10.2.tar.bz2*

Lapackのソースを入手
*wget http://www.netlib.org/lapack/lapack-3.5.0.tgz*

ビルドディレクトリの作成
*mkdir ./ATLAS/build*

移動
*cd ./ATLAS/build*


コンフィグ
**ATLASは自動的にCPUに最適なチューニングをしてくれるので，この後の作業は，スケッチはもちろん，nodeなども止めて，なるべくCPUに負荷のかかっていない状態でやるのが良い．**

*../configure --prefix=/home/root/.local --with-netlib-lapack-tarfile=/home/root/lapack-3.5.0.tgz --nof77 -v 2*

ビルド
*make build*
ここで並列ビルドやろうとして"-j2"とか入れると，エラー出る．
色々な最適化パターンを試すので，超絶時間かかる（12時間以上！）．
*nohup make build > ./make.log &*
とすると，ログアウト後もビルドが継続し，ログがmake.logに書き出されるので，さっさと母艦との通信は切って，電源供給だけはしたまま一日中放っておくのが良い．


インストール
*make install*
libf77blas.aがないってError出るけど，libatlas.a, libcblas.a, liblapack.a, libptcblas.aはインストールできたみたい．
ちなみに，make checkは，libf77blas.aがないので，できない．

###インストールの確認

```c:dgesv_example.c
#include <cblas.h>
#include <clapack.h>
#include <math.h>

#define NDIM 4 

int main (){
        int i, j;
        int N=NDIM, NRHS=1, LDA=NDIM, LDB=NDIM;

        double *A = (double *)malloc(NDIM*NDIM*sizeof(double));
        double *B = (double *)malloc(NDIM*sizeof(double));
        int *IPIV = (int *)malloc(NDIM*sizeof(int));

        A[0] = 1.80; A[4] = 2.88; A[8]  = 2.05; A[12] =-0.89;
        A[1] = 5.25; A[5] =-2.95; A[9]  =-0.95; A[13] =-3.80;
        A[2] = 1.58; A[6] =-2.69; A[10] =-2.90; A[14] =-1.04;
        A[3] =-1.11; A[7] =-0.66; A[11] =-0.59; A[15] = 0.80;
    
        B[0] = 9.52; 
        B[1] = 24.35; 
        B[2] = 0.77;
        B[3] = -6.22;

        clapack_dgesv(CblasColMajor, N, NRHS, A, LDA, IPIV, B, LDB);

        for (i=0;i<N;i++)
                printf("%f\n", B[i]);

        free(A);
        free(B);
        free(IPIV);
}
```

*gcc ./dgesv_example.c -I/home/root/.local/include -L/home/root/.local/lib -llapack -lcblas -latlas*

> 1.000000
> -1.000000
> 3.000000
> -5.000000

と出力されればOK．

## Python環境のセットアップ
pipで色々入れられるようにする．

### インストール先を/home以下に指定

*vi ~/.profile*
で __vi__ を起動して，

> export PATH=~/.local/bin:$PATH
> export PYTHONPATH=~/.local/lib/python2.7/

を入力．

入力後，
*source ~/.profile*
で，設定を有効化．（あるいは再ログイン）

さらに．
*vi ~/.pydistutils.cfg*
で __vi__ を起動して，

> [install]
> user=1

を入力．

### setuptoolsのインストール
*wget https://bootstrap.pypa.io/ez_setup.py --no-check-certificate -O - | python*

### pipのインストール
*easy_install pip*

### NumPy Pandasのインストール
ここも3,4時間かかるので注意．
*pip install numpy pandas*


## その他
アクセスポイントにしたり，[Beacon/iBeacon](http://support.apple.com/kb/HT6048?viewlocale=ja_JP)にしたり，[Node-Red](http://nodered.org/)をインストールしたり，Javaをインストールしたりもできるみたい．
https://communities.intel.com/docs/DOC-23391