はじめに
OSの下回りについて知識がなかったので、今回この本を購入して勉強しようと思います。
12ステップで作る 組込みOS自作入門
変更履歴
2020/12/31
PCを新しくしたので、本記事を更新しました。
用語集
GUIとCUI
・GUIはマウスからの操作を主体にしたインターフェース
・CUIはキーボードからのコマンド入力を主体にしたインターフェース
組込みOSと汎用OSの違い
・組込みOSは「すべてのアプリケーションは悪さをしない」性善説に基づいたアーキテクト
・汎用OSは「悪さをするアプリケーションがいる」性悪説に基づいたアーキテクト
→ 仮想メモリ、プロセスなどシステム全体へ影響しない仕組み
クロス開発とセルフ開発の違い
・クロス開発は「開発環境と実行環境が異なる」
・セルフ開発は「開発環境と実行環境が同一」
ファームウェアとソフトウェア
・ファームウェアはハードウェアを動かすためのソフトウェア
→ 基本的にユーザーが書き換え、入れ替えを想定していないところが異なる
開発環境の構築
使用するマイコン
H8/3069F
開発環境
ノートPC:Windows10 64bit
ソフトウェア:Cygwin
組込み機器のプログラム実行
①PC上でプログラムを開発
②組込み機器に対応した機械語を生成
構築手順
1.セルフコンパイラの環境作成
Cygwin(32bit)のインストール(https://www.cygwin.com のsetup-x86.exe)
補足
・インストールするPCが64bitでも64bitをインストールしてはいけない!!
・本付属のCDも最新版をインストールする旨のエラーが出るのでできない!!
2.Cygwinのインストール内容
2020/12/31 追記
cygwinのインストーラ画面を更新
Devel以下、次の4つのコンテンツ(最新のバージョン)をインストールする
1.binutils
2.gcc
3.make
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.tar.gzファイルの展開
・「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
gcc\collect2.cについて、書籍17ページに記載の修正する。
$ ./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://ja.osdn.net/projects/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」まで移動
$ make
$ make image
もしも、コンパイルで生成したファイルを削除したい場合は make cleanを実行
7.ボードへの書き込みと実行
1章での開発の場合
Cygwinで「C:\cygwin\home\ユーザ名\osbook\src\01\bootload」まで移動
Makefileの以下の箇所を変更
H8WRITE_SERDEV = comXX
(自分のWindows PCの場合はcom5で接続されている。ポート番号はTeratermで確認する)
ボードをROM書き込み用にスイッチを合わせる(ON,ON,OFF,ON)
$ make write
もしも書き込みに失敗した場合は、ボードのリセットボタンを押下して
もう一度書き込みを行う。
ボードをROM読み込み用にスイッチを合わせる(ON,OFF,ON,OFF)
Teratermを開き、シリアルデバイスを実行
comXX(Makefileで変更した番号)を選択し、実行。
リセットボタンを押下するとコンソールに表示される。
これで開発できる。長かった(20時間くらいをこれに費やした…)
2020/12/31 変更
以前は、パッチファイルを適用する必要があったが、
今回適用したCygwinのバージョンを適用すると不要となる。
パッチファイルの適用
Cygwinでpatchのインストール
パッチファイルのインストール
・こちら( http://kozos.jp/books/makeos/patch-gcc-3.4.6-x64-h8300.txt )の内容を
ファイルをpatch.txtで保存。解凍した「gcc-3.4.6」に配置。
$ tar xvf gcc-3.4.6.tar.gz
$ cd gcc-3.4.6
このフォルダ内にpatch.txtを配置
またgcc\collect2.cについて、書籍17ページに記載の修正を行う
$ patch -p0 < patch.txt
$ ../configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c --disable-werror
$ make
$ make install