DockerでH8/3069Fビルド環境構築

[H8/3069F](http://akizukidenshi.com/catalog/g/gK-01271/)を買ってきました。
H8/3069F用のビルドにはgcc-3.4.6(2006年リリース)を使うそうで、Macでビルド環境を作るのは大変なようです(一度試してみたのですが、とてもめんどくさい)
現在の環境に気を使って構築するのも。。なのでDockerを使うことにしました。
gccの4系でも動くそうですがクロスプラットフォームのビルド環境の準備は何かと面倒くさいのは変わらないようです。

# ここで出来ること

Docker使ってH8/3069Fのビルドとフラッシュの書き込み環境が作れる
※ 試すためにはH8/3069Fのマイコンを自分で用意する必要がある


# 書籍

[12ステップで作る組込みOS自作入門 ](http://www.amazon.co.jp/gp/product/4877832394/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4877832394&linkCode=as2&tag=manabu-22) 2010/05出版


# 買ってきたもの

* [H8/3069Fネット対応マイコンＬＡＮボード](http://akizukidenshi.com/catalog/g/gK-01271/) 2006/01/23発売
* [USB-シリアル変換ケーブル](http://akizukidenshi.com/catalog/g/gM-02746/)
* [ACアダプタ5V2A](http://akizukidenshi.com/catalog/g/gM-01801/)
* [RS232Cケーブル](http://akizukidenshi.com/catalog/g/gC-00004/)

# 環境

* Mac Yosemite 10.10.4
* [Boot2docker v1.7.1](https://github.com/boot2docker/osx-installer/releases)
* VirtualBox 4.3.28 (Boot2docker付属のもの)
* [md_PL2303_MacOSX-10.6-10.10_v1.5.1.zip](http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41)
* [Oracle_VM_VirtualBox_Extension_Pack-4.3.28-100309](http://download.virtualbox.org/virtualbox/4.3.28/Oracle_VM_VirtualBox_Extension_Pack-4.3.28-100309.vbox-extpack)

# Boot2Docker環境構築

[How to use](https://docs.docker.com/installation/mac/)を見てBoot2Docker環境を構築

# USBtoSerialをVirtualBoxで認識する
[md_PL2303_MacOSX-10.6-10.10_v1.5.1.zip](http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41)と、[Oracle_VM_VirtualBox_Extension_Pack-4.3.28-100309](http://download.virtualbox.org/virtualbox/4.3.28/Oracle_VM_VirtualBox_Extension_Pack-4.3.28-100309.vbox-extpack)をインストールし下記を設定

![スクリーンショット 2015-07-26 15.08.36.png](https://qiita-image-store.s3.amazonaws.com/0/35973/fae80d8f-2e48-56fc-587e-4311b58c3de3.png "スクリーンショット 2015-07-26 15.08.36.png")

**※USBドライバのインストール後にMacの再起動が必要**

# h83069fコンテナ構築

```
$ eval "$(boot2docker shellinit)"
$ docker pull otmb/h83069f
```

* コードはコンテナに置く場合

```
$ docker run --name h83069f -it --privileged -v /dev/ttyUSB0:/dev/ttyUSB0 otmb/h83069f bash
``` 

* ローカルにコードを置いて管理する場合

```
$ cd ~/
$ git clone https://github.com/otmb/h83069f.git
$ docker run --name h83069f -it --privileged -v /dev/ttyUSB0:/dev/ttyUSB0 -v $HOME/h83069f:/root otmb/h83069f bash
$ docker attach h83069f
$ cd /root/src/01/bootload
$ make
$ make image
$ make write
```

# Makefile

makeの設定

```
PREFIX = /usr/local
ARCH   = h8300-elf
```

# はまりみち

* USB2シリアル ドライバ認識

  * ドライバが認識出来ていればMacでは`/dev/tty.usbserial`で認識。
     * Oracle_VM_VirtualBox_Extension_Packを入れてVirtualBoxを起動すると`/dev/tty.usbserial`は見えなくなる。

  * VirtualBoxを起動し、`$ boot2docker ssh`でログインすると`/dev/ttyUSB0`が出来ている

* H8/3069Fのジャンパー設定
  * フラッシュへのReadとWriteはジャンパーを変える必要がある(詳しくは書籍参照ください)

# Docker操作メモ

* `$ eval "$(boot2docker shellinit)"` 環境変数適用
* `$ docker stop h83069f` docker停止
* `$ docker start h83069f` docker起動
* `$ docker attach h83069f`でdocker接続`[Ctrl+PQ]`でbash抜ける

# Docker bash内操作メモ

* `minicom` で接続、`[Ctrl+A]+X`で抜ける
* `make`,`make image`,`make write`に対応(してるはず)

# その他：自分でビルドする

```
$ git clone https://github.com/otmb/h83069f.git
$ cd h83069f
$ docker build -t h83069f
```
参考: [Dockerfile](https://registry.hub.docker.com/u/otmb/h83069f/dockerfile/)
 
# その他：ビルドする時だけ起動する
```
$ cd ~/h83069f
$ docker run --rm -v `pwd`:/root -w /root/src/01/bootload otmb/h83069f make
```

# 所感やら雑談

H8/3069Fはファーストステップ(ビルド環境構築)が大変とのことで、コンテナを使うことで環境構築が楽になればと思い公開しました。
といっても、環境構築から楽しまれる方もいます。
なお、Dockerfileはregistry.hub.docker.comにあるOFFICIAL REPO[gcc](https://registry.hub.docker.com/_/gcc/)を参考に作成しました。
コンテナも今後は共通コンテナ仕様がでてくると手順諸々変わってしまうので、参考程度にお使いください。
あと、組み込み系のビルドとDockerの相性が意外に良いので驚きました。

しかし、今使ってる回線がWiMAXなのでDocker扱うのは遅くて大変です。
WiMAX2でもないし、どんどん遅くなる。。そろそろ変えないとなぁ。