CentOS 7, fedora 21を Intel Edison の母艦にしてみよう

Intel Edison の yocto の生成です。 linux ディストリビューションは、ubuntu だけではないですよね。 ということで、CentOS7 と fedora21 で Intel Edison の母艦を立ててみました、の巻。
---
- CentOS 7, fedora 21 は 64bit 版を前提に書きます。
	- 32Bit 版はライブラリインストール時のディレクトリ指定を /usr/lib64 から /usr/lib に読み替えれば可能かと思います（未確認）。
- ここの記載のほとんどが諸先輩方の功績です。ありがとうございました。
	- ポイントは libusb と dfu-util が yum で取れないので母艦でmake installするという点です。
**

# fedora21 Workstation は最初におまじない
開発ツールを入れておきましょう。
```
$ sudo yum -y install gcc gcc-c++
```
# 母艦の環境確認と設定。
必要なツールを母艦に入れておきましょう(CentOS7, fedora21 共通手順)。
```
$ sudo yum -y install git chrpath patch diffstat libtool minicom
```
hostname は、ドメイン名を付けておきましょう(付いていない場合は.localの追加でOKです)。
```
$ sudo hostname xxxx.local
$ sudo vi /etc/hostname
```
git の設定です。メールアドレスは、gmail.comでも大丈夫。
```
$ git config --global user.email "xxxxx@xxxxx"
$ git config --global user.name "xxxx xxxx"
```
USB 接続のユーザーアクセス許可設定です。
```
$ sudo vi /lib/udev/rules.d/50-udev-default.rules
```
次の1行をUSBかttyの記述のある行の次の行に追加しておいてください。
> KERNEL=="/dev/ttyUSB*", GROUP="uucp", MODE="0666"

母艦での作業場を以下とします。（任意設定可）
```
$ sudo mkdir /usr/local/edison
$ sudo chmod 777 /usr/local/edison
$ cd /usr/local/edison
```
# 必要なソースの入手とインストール

libusb : libusb-1.0.9.tar.bz2 `http://www.libusb.org/`
```
$ cd /usr/local/edison
$ tar xvf ~/Download/libusb-1.0.9.tar.bz2
$ cd libusb-1.0.9/
$ ./configure –-prefix=/usr –-libdir=/usr/lib64
$ make
$ sudo make install
```
dfu-util : dfu-util-0.8.tar.gz `http://dfu-util.sourceforge.net/releases/`
```
$ cd /usr/local/edison
$ tar xvf ~/Download/dfu-util-0.8.tar.gz
$ cd dfu-util-0.8
$ ./configure –-prefix=/usr
$ make
$ sudo make install
```
Edison Linux source files : edison-src-rel1-maint-rel1-wwXX-XX.tgz `https://communities.intel.com/docs/DOC-23242`
```
$ cd /usr/local/edison
$ tar xvf ~/Download/edison-src-rel1-maint-rel1-wwXX-XX.tgz
$ cd edison-src/
$ mkdir dl
$ mkdir sstate
$ ./device-software/setup.sh –-dl_dir=./dl –-sstate_dir=./sstate \
--bb_number_thread=8 –-parallel_make=8
```
- 引数 **8** は母艦のCPUコア数の**2~3**倍に設定する。
- `bb_number_thread`, `parallel_make` の代わりに、`conf/local.conf` の `BB_NUMBER_THREADS` と `PARALLEL_MAKE` を編集しても良い。

/root ディレクトリのサイズを拡大しておきます。
以下の2つのファイルにある rootfs のサイズを変更します。
```
./device-software/meta-edison-distro/recipes-bsp/u-boot/files/edison.env
./device-software/meta-edison-distro/recipes-core/images/edison-image.bb
```
>2つのファイルで指定する値は同じ容量であることが大切です（1MiBは1024バイト）。
>
> - edison.env は MiB 単位です。
> - edison-image.bb は バイト単位です。

# yocto の image ファイルを作る。
カーネル生成は bitbake を使います。
```
$ cd /usr/local/edison/edison-src
$ source pock/oe-init-build-env
$ bitbake virtual/kernel
```
- 母艦能力次第ですが、しばしお待ちください。WARNING が出ますが通ればOKです。
- もしエラーが出たときは、母艦環境にツールかライブラリが足りないためです。 yum で追加をしてください。（足りないものはエラーメッセージのどこかに書かれています）

カーネルのコンフィグを行う場合、menuconfig を使って .config を生成し、defconfig としてコピーします。
```
$ cd /usr/local/edison/edison-src # カーネル生成からの続きなら不要。
$ source pock/oe-init-build-env # カーネル生成からの続きなら不要。
$ bitbake linux-yocto -c menuconfig
```
- edison は **32bit-core** なので 64bit OS としない
```
$ cp tmp/work/edison-poky-linux/linux-yocto/X.XX.XX+gitXXXX/linux-edison-standard-build/.config \
../device-software/meta-edison/recipes-kernel/linux/files/defconfig
$ bitbake virtual/kernel -c configure -f -v
```

いよいよ全体の生成です。 フラッシュROMに書き込む全ファイルイメージを生成します。
```
$ cd /usr/local/edison/edison-src # カーネル生成からの続きなら不要。
$ source pock/oe-init-build-env # カーネル生成からの続きなら不要。
$ bitbake edison-image
```
- ここは長時間かかります。
- WARNING が出ますが、最後まで通ればOK。通るまで bitbake する。

転送ファイルを1フォルダにまとめます。 これにより、build 下に toFlash というディレクトリが生成され、ディスクイメージが1つにまとまります。
```
$ cd /usr/local/edison/edison-src/
$ ./device-software/utils/flash/postBuild.sh
```

# edison に新しい環境を書き込む
edison のFTDIチップ側(OTGではない方）と母艦とを USB にて接続します。
```
$ ls /dev/ttyUSB*
```
先の設定により rw-rw-rw- 属性になっていることを確認してください。
転送状態を見るため、minicom を立ち上げて置くことも有効なので立ち上げておきます。
```
$ LANG=C minicom -D /dev/ttyUSB0
```
- 通信設定は`115,200bps, data 8bit, non-parity, stop 1bit, H/Wフローなし, S/Wフローなし`です。
- `CTRL-A+Z`でメニューを出しながら設定した後、設定を保存しておくと次の起動からはデフォルトとなるので便利です。

edison のフラッシュROMに書き込みます。
```
$ cd /usr/local/edison/edison-src/build/toFlash
$ sudo ./flashall.sh
```
次のことを順番に行ってください。

1. edison OTG と母艦とを USB にて接続します。
1. minicom 側でedisonが起動し、flashall.sh 側と相互に動いていることが確認できると思います。
1. その後、flashall.sh は終了しますが、minicom 側ではリブート2回ほど行ってます。
1. めでたく、`login:` まで来たら終了です。
1. root でログインし、遊ぶか shutdown してください。
1. shutdown 完了までは、USB ケーブル **2** 本は外さないでください。