Help us understand the problem. What is going on with this article?

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

はじめに

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つのコンテンツ(最新のバージョン)をインストールする
無題0.png

1.binutils

無題.png

2.gcc

無題2.png

3.make

無題3.png

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

cygwin
$ 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

cygwin
$ tar xvf gcc-3.4.6.tar.gz
$ cd gcc-3.4.6

gcc\collect2.cについて、書籍17ページに記載の修正する。

cygwin
$ ./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」まで移動

cygwin
$ 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)

cygwin
$ make write

もしも書き込みに失敗した場合は、ボードのリセットボタンを押下して
もう一度書き込みを行う。

ボードをROM読み込み用にスイッチを合わせる(ON,OFF,ON,OFF)

Teratermを開き、シリアルデバイスを実行

comXX(Makefileで変更した番号)を選択し、実行。
リセットボタンを押下するとコンソールに表示される。

これで開発できる。長かった(20時間くらいをこれに費やした…)

2020/12/31 変更
以前は、パッチファイルを適用する必要があったが、
今回適用したCygwinのバージョンを適用すると不要となる。

パッチファイルの適用

Cygwinでpatchのインストール

d1752b13-s.png

パッチファイルのインストール

・こちら( http://kozos.jp/books/makeos/patch-gcc-3.4.6-x64-h8300.txt )の内容を
ファイルをpatch.txtで保存。解凍した「gcc-3.4.6」に配置。

cygwin
$ tar xvf gcc-3.4.6.tar.gz
$ cd gcc-3.4.6

このフォルダ内にpatch.txtを配置
またgcc\collect2.cについて、書籍17ページに記載の修正を行う

cygwin
$ patch -p0 < patch.txt 
$ ../configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c --disable-werror
$ make
$ make install
Shohei_miyasako
自身の備忘録用に技術的な記事を書こうと思います。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away