12ステップで作る組込みOS自作入門　環境構築　後編（2022年8月）


前編の続きです。今回は3と4のステップについて進めていきます。今回も丁寧に書いていきますので、分かっている方はその都度飛ばしていってください。また、間違っている場合はぜひ編集リクエストやコメントで教えてください。

前編はこちら

https://qiita.com/nekoshark02/items/a5a95e732fcd3003dede

では後編も進めていきましょう！
# 3.プログラムをコンパイルし、FDTを用いてマイコンに書き込む
### シリアルケーブルの接続を確認
まずはシリアルケーブルの接続を確認しましょう。
自分の使ったシリアルケーブルだと、ttyUSB0ではなくttyS0でした。書籍のp42,43を確認しながらコマンドを打ち込んでみましょう。
```:Ubuntu 16.04
cd ../../../../ (ルートディレクトリに戻る)
ls -l /dev/ttyS0
```
うまくいけば、以下のように表示されます。
```Ubuntu 16.04
crw--w---- 1 root tty 4, 64 Aug 14 03:31 /div/ttyS0
```
うまくいかなければ、ttyS0をttyUSB0に変えて確認してみましょう。
どちらも上手くいかなかった場合、このような表示が見れると思います。
```Ubuntu 16.04
ls: cannot access '/dev/ttyS0': No such file or directory
```
自分はこの記事を参考にしました。

https://kinneko.hatenadiary.org/entry/20140118/p2

まずはコンソールに以下のコマンドを打ち込みます。
```Ubuntu 16.04
sudo vi /lib/udev/rules.d/50-udev-default.rules
```
すると50-udev-default.rulesのソースが見れると思います。26行目に
```Ubuntu 16.04
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"
```
という文字列が見れると思います。ここにMODE="0666"を追記します。
```Ubuntu 16.04
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", MODE="0666"
```
#### vimを使ったことがない人向けのおすすめの記事

https://kekaku.addisteria.com/wp/20190129143137

細かいことを考えたくなければ、上下キーで26行目まで下がって、左右キーで行末まで移動し、キーボードでiを押します。すると編集モードに入るので、「MODE="0666"」を打ち込み、escキーを押し、:wqで上書き保存して終了します。キーボードはUSキーボードの設定になっているため、注意してください。

https://www.nagasaki-gaigo.ac.jp/toguchi/pc/multilingual/keyboard_us_jis.htm

このようになれば成功です。
```Ubuntu 16.04
ls -l /div/ttyS0
crw--w---- 1 root tty 4, 64 Aug 14 03:31 /div/ttyS0
```
### Makefileの編集
ではプロジェクト内のMakefileを編集していきましょう。

srcフォルダ内の01フォルダの中にあるbootloadフォルダ内を見てください。すると、main.cやstartup.sなどのファイルがあると思います。そこにMakefileがあると思います。Visual Studio Codeなどのエディタで編集しましょう。
**H8WRITEのところは気にしないでください。そのままで大丈夫です。今回はFDTを用いて書き込みます。**
「H8WRITE_SERDEV」のところを、先ほど確認したシリアルデバイスファイル名にします。自分の場合は/dev/ttyS0だったので、H8WRITE_SERDEV = /dev/ttyS0と書きました。
![スクリーンショット (229).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1500513/db31fcb5-5a7c-b3c2-95ba-b8ce8df5e971.png)
保存してエディタを閉じます。

### プロジェクトのビルド
ここまで出来たら、次はプロジェクトをビルドしていきます。
```:Ubuntu 16.04
cd workspace/src/01/bootload
ls (ソースコードがきちんとあるか確認)
make
make image
```
たまにcdで「No such file or directory」のような表示が出たら、Windows側のコマンドプロンプトで、vagrant_makeosフォルダにcdして、そこでVagrant reloadして、仮想環境を再起動させましょう。自分が環境構築をしていた時に、たまにそういうことがありました。
make imageが上手くいったら、ls -lでkzloadとkzload.motがあるか確認しましょう。
```:Ubuntu 16.04
ls -l
```
確認できましたでしょうか?
### フラッシュROMへ書き込む
では、フラッシュROMへの書き込みを行います。H8/3069Fマイコンボードには4連のディップスイッチがあります。**電源につないでいない状態で**ディップスイッチを左から「ON」,「ON」,「OFF」,「ON」にします。そのあと電源につなげると、フラッシュROM書き込みモードとしてCPUが起動します。
シリアルケーブルでマイコンとPCを接続します。一瞬LEDが光って消えますが、きちんと接続されていますので安心して下さい。

では書き込みを行います。

### マイコンへの書き込み
今回はFDTを用いて書き込みを行います。FDTを用いる前にh8writeやkz_h8writeなどを使いましたが、自分の環境ではうまくいきませんでした。（Makefileは正しいはずなのに、なぜかエラーを出す）
まあよく分からないので、FDTを用いて書き込んでいこうと思います。

FDTのダウンロード

https://www.renesas.com/jp/ja/software-tool/flash-development-toolkit-programming-gui#download

ダウンロードするにはルネサスへユーザー登録する必要があります。まずは登録しておきましょう。ダウンロードは一番上の[無償評価版]で良いです。
また、インストーラーの途中で拡張子の関連付けを聞いてくるので、忘れずに「*.mot」にチェックを入れましょう。
インストールに成功したら、まずはFDTを立ち上げましょう。自分はこのサイトを参考にしました。

http://memes.sakura.ne.jp/memes/?page_id=575

立ち上げたら「デバイスとカーネルの選択」でH8/3069Fを探し、選択します。
「次へ」を押したら、「通信ポート」という項目が出ると思います。Select portはWindows側で認識されているシリアルポート（デバイスマネージャーのポート（COMとLPT）の項目にて、接続しているシリアルポートがcomXと表示されているはずです。うまく表示されていなかったら指し直すか、ドライバを修復するか、再起動するかしてください）のCOMポート番号を選んでください。
自分の場合はそのままで認識されていたので、そのまま次へを押しました。
その他の設定は書籍のp45を参考にして設定してください。
うまくいけば次のような画面が出ると思います
![スクリーンショット (230).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1500513/b20ba797-fbde-455e-c933-20d4e0bf8ebe.png)
スタートを押すと書き込みが始まります。書き込みがうまくいけば「書き込みが完了しました」とログに表示されます。
ここで、**マイコンの電源を抜いた状態で**マイコンを動作モードに変えます。4連のディップスイッチを「ON」,「OFF」,「ON」,「OFF」にします。

これで第3ステップが終了しました。ここまでくれば、後はシリアル通信の確認をするだけです。

# 4.Seristerでシリアル接続の確認
正直Teratermでもよいのですが、せっかくならGUIのSeristerを使いたいと思いましたので、インストールして使っていきます。

Seristerのダウンロード

https://www.vector.co.jp/soft/win95/hardware/se423507.html

インストール手順は簡単なので省略します。インストールが完了したら立ち上げます。
![スクリーンショット (231).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1500513/cd57f40b-96a7-9299-5d81-a88cf4462694.png)
通信設定はポートがWindows側のCOMポート番号、その他ボーレートやパリティなどはp46の表1.2に準します。
「監視開始」を押し、Seristerをテキストモードにし、マイコンのリセットボタンを押すと、「Hello World!」という文字列が出てくると思います。出てくればシリアル通信は成功です！おめでとうございます！
上手くいったときはこのようになります。
![スクリーンショット (226).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1500513/6c5b33d3-c865-c1b1-809d-d1ac9e353277.png)

これで全ステップは終了です！おめでとうございます！お疲れさまでした！！！

## ここまでで上手くいっていない方へ
ここまでで上手くいっていない方がいれば、参考になるかもしれないサイトのリンクを載せておきますので、参考にしていただければ嬉しいです。Cygwinや公式のVMイメージを使ったり、WSLを使ったりといろいろやりようはあります。めげずに頑張ってください！

・公式ページ

http://kozos.jp/books/makeos/#source_code

・KOZOS友の会

https://groups.google.com/g/kozos_tomonokai

・WSLで「12ステップで作る組み込みOS自作入門」の環境構築をしてHello World!してみる

https://to-son.net/2020/04/16/12step-wsl-environment/

・12ステップで作る組込みOS自作入門 1stステップ ~開発環境の構築

https://qiita.com/Shohei_miyasako/items/6e0e1a9f298bd8db3369

### 参考文献
・坂井 弘亮　12ステップで作る組込みOS自作入門　カットシステム　2010
・http://kozos.jp/books/makeos/#source_code
・https://qiita.com/ohno-Tk/items/c258133889d172223231
・https://qiita.com/aoi70/items/b66a451f4b7f5f05beec
・https://techcommunity.microsoft.com/t5/windows-11/pl2303-issues-prolific-usb-to-serial-drivers-win-11/m-p/2966957
・https://imadedede.hatenablog.com/entry/2020/07/13/014241
・https://to-son.net/2020/04/16/12step-wsl-environment/
・https://www.avrfreaks.net/forum/prolific-pl2303ta-usb-serial-and-windows-11
・https://kinneko.hatenadiary.org/entry/20140118/p2
・http://memes.sakura.ne.jp/memes/?page_id=575