はじめに
OSの下回りについて知識がなかったので、今回この本を購入して勉強しようと思います。
12ステップで作る 組込みOS自作入門
変更履歴
2020/12/31
PCを新しくしたので、本記事を更新しました。
2021/11/03
cygwinのバージョンが64bitを使用する場合用に、本記事を更新しました。
用語集
GUIとCUI
・GUIはマウスからの操作を主体にしたインターフェース
・CUIはキーボードからのコマンド入力を主体にしたインターフェース
組込みOSと汎用OSの違い
・組込みOSは「すべてのアプリケーションは悪さをしない」性善説に基づいたアーキテクト
・汎用OSは「悪さをするアプリケーションがいる」性悪説に基づいたアーキテクト
→ 仮想メモリ、プロセスなどシステム全体へ影響しない仕組み
クロス開発とセルフ開発の違い
・クロス開発は「開発環境と実行環境が異なる」
・セルフ開発は「開発環境と実行環境が同一」
ファームウェアとソフトウェア
・ファームウェアはハードウェアを動かすためのソフトウェア
→ 基本的にユーザーが書き換え、入れ替えを想定していないところが異なる
開発環境の構築
使用するマイコン
H8/3069F
開発環境
ノートPC:Windows10 64bit
ソフトウェア:Cygwin
組込み機器のプログラム実行
①PC上でプログラムを開発
②組込み機器に対応した機械語を生成
構築手順
1.セルフコンパイラの環境作成
Cygwin(64bit)のインストール(https://www.cygwin.com のsetup-x86_64.exe)
補足
・インストールするPCが64bitの場合、32bitをインストールした場合、正しく動作しない可能性
があるので、PCのbit数に適したバージョンをインストールする。
2.Cygwinのインストール内容
Devel以下、次の4つのコンテンツ(最新のバージョン)をインストールする
1.binutils
2.gcc
3.make
4.patch(64bitの場合、パッチファイルの適用)
3.クロスコンパイラの作成
以下のファイルを取得
・binutils-2.19.1( http://www.ring.gr.jp/pub/GNU/binutils/ )
・gcc-3.4.6( http://www.ring.gr.jp/pub/GNU/gcc/ )
・Teraterm( https://ja.osdn.net/projects/ttssh2/releases/ )
4.圧縮ファイルの配置
・「C:\cygwin\home\ユーザ名」の配下にbinutils-2.19.1.tar.gzとgcc-3.4.6.tar.gzを配置
5.cygwinでの操作
binutils
$ tar xvf binutils-2.19.1.tar.gz
$ cd binutils-2.19.1
$ mkdir build
$ cd build
$ ../configure --target=h8300-elf --disable-nls --disable-werror
$ make
$ make install
gcc-3.4.6
$ tar xvf gcc-3.4.6.tar.gz
$ cd gcc-3.4.6
パッチファイルのインストール(64bit)
・こちら( http://kozos.jp/books/makeos/patch-gcc-3.4.6-x64-h8300.txt )の内容を
ファイルをpatch.txtで保存。解凍した「gcc-3.4.6」直下に配置。
$ patch -p0 < patch.txt
config.guessファイルの更新(64bit)
・こちら( https://github.com/gcc-mirror/gcc/blob/master/config.guess )の内容を
「gcc-3.4.6」内にある全ての「config.guess」ファイルに反映する。
補足
・config.guessファイルを更新しない場合、次のコマンド実行時にエラーと
修正先URLが出る。「ftp://ftp.gnu.org/pub/gnu/config」
こちらのサイトの内容のソースコードのコピーがGitにある。
gcc\collect2.cの更新
・書籍17ページに記載の修正を行う。
$ mkdir build
$ cd build
$ ./configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c --disable-werror
$ make
$ make install
書籍のソースコード一式
こちら(http://kozos.jp/kozos/osbook/) の「osbook_03.zip」
解凍したフォルダの階層を「osbook/src/01/bootload/以下ソースコード」に合わせ、
「C:/cygwin/home/ユーザ名」の配下に配置する。
以降、Makefileの変更を極力避けるために、フォルダの配置を合わせて指定する。
kz_h8write
シリアル通信でH8/3069FのフラッシュROMに書き込みを行うツール
もともとのh8_writeの改良版ツールとなる。
こちら(https://cubeatsystems.com/kz_h8write/)
解凍したフォルダのPackageFiles\bin\kz_h8write.exeを以下に置く
・「C:/cygwin/home/ユーザ名/osbook/src/tools/h8write」
・「kz_h8write.exe」を「h8write.exe」にリネーム
6.プログラムのビルド
上記の設定で、開発環境の準備完了。ビルド・実行に関しては以下を実施。
プログラムのビルド
「C:/cygwin/home/ユーザ名/osbook/src」以下各章ごとで開発したソースを置く。
1章での開発の場合
Cygwinで「C:/cygwin/home/ユーザ名/osbook/src/01/bootload」まで移動
Makefileの以下の箇所を変更
H8WRITE_SERDEV = comXX
(自分のWindows PCの場合はcom5で接続されている。ポート番号はTeratermで確認する)
$ make
$ make image
もしも、コンパイルで生成したファイルを削除したい場合は make cleanを実行
7.ボードへの書き込みと実行
1章での開発の場合
Cygwinで「C:/cygwin/home/ユーザ名/osbook/src/01/bootload」まで移動
ボードをROM書き込み用にスイッチを合わせる(ON,ON,OFF,ON)
$ make write
もしも書き込みに失敗した場合は、ボードのリセットボタンを押下して
もう一度書き込みを行う。
ボードをROM読み込み用にスイッチを合わせる(ON,OFF,ON,OFF)
Teratermを開き、シリアルデバイスを実行
comXX(Makefileで変更した番号)を選択し、実行。
リセットボタンを押下するとコンソールに表示される。
これで開発できる。長かった(20時間くらいをこれに費やした…)