暇なので積読していた「12ステップで作る組み込みOS自作入門」に手を出してみました。
書籍に紹介されていたwindowsでの開発環境ではCygwinの使用が推奨されていましたが、今はWSLがあるのでこれを使ってみようと思いました。
WSLはおろかLinux自体まともに使ったことがなかったので、環境構築に丸一日かかった…
モノの準備
とりあえず、自分の環境の紹介から。
- デスクトップPC(Win10pro 1903 64bitに WSLでUbuntu 18.04.4LTS導入済み)
次にマイコン関連
ボードのシリアルポートとケーブルを固定する金属部分が、邪魔で接続できないので外しました。
私は、問題なく書き込みできましたが、公式ページでは延長ケーブルを買って、ねじ止めして接続することが推奨されています。
環境構築
WSL導入済みという前提のもとで書きます。
折角、ネイティブLinuxではなくWSLを使うので、ファイル編集とシリアル通信テストはWindows側から行ってみます。
エディタはVSCode、シリアル通信テスタはSeristerを使用します。
- 補足
VSCodeは「右クリックでvscodeを開く」を有効にしておくことをお勧めします。
一応、自分が構築したディレクトリ構造を記します。(gccなどのコンパイラとコードはディレクトリ分けてもいいかも)
1 | home |
今回、gcc、binutilsのconfigureスクリプト実行時に、ファイル場所を指定しません。その場合、h8マイコンのツール類(h8300-elf-hoge)は、make install時に以下にインストールされます。
1 | Ubuntu |
binutils
初めにbinutilsを導入します。
バージョンは2.19.1を選択。最新のバージョン入れたらビルド時エラーはいたので書籍に掲載されているバージョンをお勧めします。
1 | $ cd ~/ |
- 補足
makeコマンドを打つとき、オプション-j 5
(数字はcpuのコア数+1?)をつけるとビルドを高速化出来ます。実行時間が早くなるのでお勧めです。
gcc
次にgccを導入します。
バージョンは3.4.6を選択。こちらも書籍と同じバージョンをお勧めします。
今回、64bit環境ですので、パッチの適応が必要です。
1 | $ cd ~/12step/src |
kz_h8write
シリアル通信でH8/3069FのフラッシュROMに書き込みを行うツールです。h8writeの改良版とのことでこちらを使用します。
- H8/3069F writer for KOZOS (kz_h8write)
zip形式での配布のため上記サイトからだとwgetコマンドが使えません。試してみたところhtmlがダウンロードされてしまいました。
そこで、Windows側でブラウザからkz_h8write-v0.2.1.zipをダウンロードし、解凍、エクスプローラーを開きWSLの該当ディレクトリにコピーします。
コピー出来たら以下のようにコマンドを打ちます。kz_h8write というバイナリがビルドされブートローダーが生成されます。1
2$ cd ~/12step/src/kz_h8write-v0.2.1/PackageFiles/src
$ make
これは書き込み時に、プロジェクトのMakefileから直接参照させるのでmake installする必要はないです。
とりあえず、環境構築は出来ました。
次にHello World!してみます。
Hello World!
まず、公式サイトからソースコードをダウンロードします。
01というフォルダが、Hello World!のプロジェクトだと思います。
このフォルダを先ほどと同じように、エクスプローラーからWSLにアクセスして、作業ディレクトリにコピーします。
次に、プロジェクト内のMakefileを編集します。
16行目20行目を書き換えます。
16行目は上記のように書き換えればいいですが、20行目は、シリアルポート接続先なので、環境によって異なります。
Windows 10 のアップデートBuild 16176でWSLから直接シリアルポートを利用できるようになりました。
Serial Support on the Windows Subsystem for Linux
デバイスマネージャーからマイコンで使用しているシリアルポートを確認します。
COM1なら/dev/ttyS1
COM2なら/dev/ttyS2
と指定します。
上記の場合COM3なので/dev/ttyS3と指定します。
後は書籍通り1
2
3
4$ cd ~/12step/src/01/bootload
$ make
$ make image
$ make writeと打てば書き込めると思います。書き込めない場合、マイコンのスイッチをチェックしてみてください。
最後にseristerで監視してみようと思います。
マイコンのスイッチを切り替えた後、書籍に書いてありますが、ボーレートを9600、バリティなし、バイトサイズ8、ストップビット1と設定します。
ポート番号は先ほどデバイスマネージャーで確認したポート番号を入力してください。
監視開始ボタンを押し、マイコンボードのリセットボタンを押すと以下のように、Hello World!が出力されると思います。注意
Seristerの監視をオンにしたままマイコンに書き込むとエラーが出るので、書き込む際にはSeristerの監視をオフにしましょう。