Python
IoT
Edison

スタートアップ Intel Edison

More than 3 years have passed since last update.

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

Macでやる作業

ファームウェアアップデート

何はともあれ,これをしないと始まらない.
参考: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から,「Edison Yocto complete 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と言うらしい.

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がないので,できない.

インストールの確認

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にしたり,Node-Redをインストールしたり,Javaをインストールしたりもできるみたい.
https://communities.intel.com/docs/DOC-23391