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

暇なので積読していた「12ステップで作る組み込みOS自作入門」に手を出してみました。
書籍に紹介されていたwindowsでの開発環境ではCygwinの使用が推奨されていましたが、今はWSLがあるのでこれを使ってみようと思いました。
WSLはおろかLinux自体まともに使ったことがなかったので、環境構築に丸一日かかった…

モノの準備

とりあえず、自分の環境の紹介から。

  • デスクトップPC(Win10pro 1903 64bitに WSLでUbuntu 18.04.4LTS導入済み)

次にマイコン関連

ボードのシリアルポートとケーブルを固定する金属部分が、邪魔で接続できないので外しました。



私は、問題なく書き込みできましたが、公式ページでは延長ケーブルを買って、ねじ止めして接続することが推奨されています。

環境構築

WSL導入済みという前提のもとで書きます。
折角、ネイティブLinuxではなくWSLを使うので、ファイル編集とシリアル通信テストはWindows側から行ってみます。
エディタはVSCode、シリアル通信テスタはSeristerを使用します。

一応、自分が構築したディレクトリ構造を記します。(gccなどのコンパイラとコードはディレクトリ分けてもいいかも)

1
2
3
4
5
6
7
8
9
10
home
|---user
| |---12step
| |---src
| |---binutils-2.19.1
| |---gcc-3.4.6
| |---kz_h8write-v0.2.1
| |---01 (以下書籍のコード)
| |---02
| |---

今回、gcc、binutilsのconfigureスクリプト実行時に、ファイル場所を指定しません。その場合、h8マイコンのツール類(h8300-elf-hoge)は、make install時に以下にインストールされます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Ubuntu
|---bin
|---boot
|---dev
|---etc
|---home
| |---user
| |---12step
| |---src
|---usr
| |---local
| |---bin
| |---h8300-elf-gcc
| |---h8300-elf-as
| |---
| |---

binutils

初めにbinutilsを導入します。

バージョンは2.19.1を選択。最新のバージョン入れたらビルド時エラーはいたので書籍に掲載されているバージョンをお勧めします。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ cd ~/ 
$ mkdir 12step
$ cd 12step
$ mkdir src
$ cd src
$ wget http://core.ring.gr.jp/pub/GNU/binutils/binutils-2.19.1.tar.gz
$ tar zxvf binutils-2.19.1.tar.gz
$ cd binutils-2.19.1
$ mkdir build
$ cd build
$ ../configure --target=h8300-elf --disable-nls --disable-werror
$ make
$ sudo make install

gcc

次にgccを導入します。
バージョンは3.4.6を選択。こちらも書籍と同じバージョンをお勧めします。

今回、64bit環境ですので、パッチの適応が必要です。

1
2
3
4
5
6
7
8
9
10
11
12
$ cd ~/12step/src
$ wget http://core.ring.gr.jp/pub/GNU/gcc/gcc-3.4.6/gcc-3.4.6.tar.gz
$ tar zxvf gcc-3.4.6.tar.gz
$ cd gcc-3.4.6
$ vi gcc/collect2.c /* 本で解説されている修正を行う */
$ wget http://kozos.jp/books/makeos/patch-gcc-3.4.6-x64-h8300.txt
$ patch -p0 < patch-gcc-3.4.6-x64-h8300.txt /* 64bit環境用のパッチを適用 */
$ mkdir build
$ cd build
$ ../configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c --disable-werror
$ make -j 5
$ sudo make install

書籍p17の修正は上記のようにviを使用してもいいですが、Windows側から編集してみましょう。


エクスプローラーを開き、アドレスバーに\\wsl$と入力



WSLにアクセスできました。


gccディレクトリで右クリックしてCodeで開くを選択




vscodeで編集ができます。



kz_h8write

シリアル通信でH8/3069FのフラッシュROMに書き込みを行うツールです。h8writeの改良版とのことでこちらを使用します。

  • H8/3069F writer for KOZOS (kz_h8write)
    zip形式での配布のため上記サイトからだとwgetコマンドが使えません。試してみたところhtmlがダウンロードされてしまいました。
    そこで、Windows側でブラウザからkz_h8write-v0.2.1.zipをダウンロードし、解凍、エクスプローラーを開きWSLの該当ディレクトリにコピーします。

    コピー出来たら以下のようにコマンドを打ちます。
    1
    2
    $ cd ~/12step/src/kz_h8write-v0.2.1/PackageFiles/src
    $ make
    kz_h8write というバイナリがビルドされブートローダーが生成されます。
    これは書き込み時に、プロジェクトの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の監視をオフにしましょう。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×