H8マイコン開発環境構築


環境

* macbookair early2014
* OSX Mavericks
* [H8/3069Fネット対応マイコンLANボード](
http://akizukidenshi.com/catalog/g/gK-01271/
)
* [USBシリアル変換ケーブル](
http://akizukidenshi.com/catalog/g/gM-00720/
)

対象
[12ステップで作る 組込みOS自作入門](http://kozos.jp/books/makeos/)もしくはH8マイコン開発をmacで行いたい人

手順
0. 標準のgccをclangからapple-gccに変更
1. Xcode command line toolsをインストール
2. USBシリアルドライバインストール(書き込み用USBケーブル)
3. H8用のビルドツールのインストール
4. h8write(書き込みツール)のインストール
5. 動作確認

##0. 標準のgccをclangからapple-gccに変更

macportsでapple-gccをインストールし，標準のgccにセットする

```bash:bash
$ sudo port install apple-gcc42
$ sudo port install gcc_select
$ sudo port select --set gcc apple-gcc42
```


##1. Xcode command line toolsをインストール
1. Xcodeのインストール

	App Storeからインストール
2. サインイン

	Xcodeを起動し，Xcode->Open Developer Tool->More Developer Tools．
	サインインを求められるのでサインイン(もしくは登録してサインイン)
3. Command Line Toolsのインストール

```bash:bash
$ sudo xcode-select --install
```

##2. USBシリアルドライバインストール(書き込み用USBケーブル)
[PL2303 USB to Serial Driver for Mac OS X](
http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41
)をダウンロード，インストール
再起動し，接続した状態でターミナルから以下のコマンドを実行し，デバイスの認識を確認

```bash:bash
$ ls -l /dev/cu*
```

この環境では/dev/cu.usbserialと認識された

##3. H8用のビルドツールのインストール

* Downloadディレクトリにsrcディレクトリを作り，その中に必要なソースをダウンロード

```bash:bash
$ cd ~/Downloads
$ mkdir src
$ cd src
$ curl -O http://www.ring.gr.jp/archives/GNU/binutils/binutils-2.21.1.tar.bz2
$ curl -O http://www.ring.gr.jp/archives/GNU/gcc/gcc-3.4.6/gcc-3.4.6.tar.bz2
$ curl -O http://www.ring.gr.jp/archives/GNU/gmp/gmp-4.3.2.tar.bz2
$ curl -O http://www.ring.gr.jp/archives/GNU/mpfr/mpfr-2.4.2.tar.bz2
$ curl -O http://www.multiprecision.org/mpc/download/mpc-0.8.2.tar.gz
```

* ダウンロードしたアーカイブを展開

```bash:bash
$ tar jxvf binutils-2.21.1.tar.bz2
$ tar jxvf gmp-4.3.2.tar.bz2
$ tar jxvf mpfr-2.4.2.tar.bz2
$ tar zxvf mpc-0.8.2.tar.gz
$ tar jxvf gcc-3.4.6.tar.bz2
```

* gcc3.4.6は64bit環境でエラーが出るため以下の修正をする

修正ファイル : ~/Download/src/gcc-3.4.6/gcc/config/h8300/h8300.c
> 55行目
> -static void h8300_emit_stack_adjustment (int, unsigned int);
> -static int round_frame_size (int);
> +static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT);
> +static HOST_WIDE_INT round_frame_size (HOST_WIDE_INT);
> 371行目
> -h8300_emit_stack_adjustment (int sign, unsigned int size)
> +h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size)
> 400行目
> -static int
> -round_frame_size (int size)
> +static HOST_WIDE_INT
> +round_frame_size (HOST_WIDE_INT size)

* H8用gcc, binutilsなどのインストール
(/usr/local/h8-elfにそれぞれインストールする)

**binutils**

```bash:bash
$ sudo mkdir /usr/local/h8-elf
$ cd binutils-2.21.1
$ mkdir build
$ cd build
$ CFLAGS=-Wno-error=deprecated-declarations ../configure --target=h8300-elf --disable-nls --prefix=/usr/local/h8-elf
$ make
$ sudo make install
```

**gmpライブラリ**

```bash:bash
$ sudo mkdir /usr/local/gmp
$ cd ..
$ cd gmp-4.3.2
$ ./configure --prefix=/usr/local/gmp
$ make
$ make check
$ sudo make install
```

**mpfrライブラリ**

```bash:bash
$ sudo mkdir /usr/local/mpfr
$ cd ..
$ cd mpfr-2.4.2
$ ./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp
$ make
$ make check
$ sudo make install
```

**mpcライブラリ**

```bash:bash
$ sudo mkdir /usr/local/mpc
$ cd ..
$ cd mpc-0.8.2
$ ./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr
$ make
$ make check
$ sudo make install
```

**gcc**
/usr/local/h8-elf/binに一時的にpathを通す

```bash:bash
$ export PATH=/usr/local/h8-elf/bin:$PATH
```

インストール
srcフォルダにbuildディレクトリを作る(解凍フォルダの外)。解凍フォルダ内でやるとエラーになる

```bash:bash
$ cd ..
$ mkdir build
$ cd build
$ ../gcc-3.4.6/configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --disable-libssp --enable-languages=c --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --with-mpc=/usr/local/mpc --prefix=/usr/local/h8-elf
$ make
$ sudo make install
```

##4. h8write(書き込みツール)のインストール
Downloadフォルダに移動してダウンロード

```bash:bash
$ cd ..
$ cd ..
$ curl -O http://mes.sourceforge.jp/h8/h8write.c
$ gcc -Wall -o h8write h8write.c
```

使用するディレクトリにソース(h8write.c)とバイナリ(h8write)を移動(フォルダはMakefileで指定)

##5. 動作確認
以下は[12ステップで作る 組込みOS自作入門]のソースを使用

* Makefileの使用デバイスをデバイスを
[2. USBシリアルドライバインストール(書き込み用USBケーブル)]
で確認したものに置き換え

> H8WRITE_SERDEV = /dev/cu.usbserial

* makeコマンド

```$ make``` オブジェクトファイルの生成
```$ make image``` 実行ファイルの生成
```$ make write``` 書込み(SW1 ON ON OFF ON)
```$ make clean``` 生成ファイルの削除

* minicomでシリアル出力を確認

```$ sudo minicom -s -o```
> 設定：
> シリアルデバイス：/dev/cu.usbserial
> ボーレート:9600bps
> データ長:8bit
> ストップビット:1bit
> パリティ:なし
> ハードウェア・フロー制御	:なし
> ソフトウェア・フロー制御	:なし
mode5でボードを起動(SW1 ON OFF ON OFF)

##参考
[12ステップで作る 組込みOS自作入門](http://kozos.jp/books/makeos/)
[[PATCH, h8300]: Fix build on 64bit targets](https://gcc.gnu.org/ml/gcc-patches/2006-10/msg00337.html)
[MacでH８開発環境構築 - 12ステップ本を試す](http://d.hatena.ne.jp/satfy/20101226)
[H8クロスコンパイル環境 on Mac OS X 10.9 (Marvericks)](http://oodiarydiary.blog.so-net.ne.jp/2014-01-04-2)