12ステップで作る組込みOS自作入門#1

組込みの仕事を始めて3年位たつが、修正の仕事ばかりできちんと基礎を理解できていなかったと思い、再度勉強をすることにした。

 

12ステップで作る組込みOS自作入門

12ステップで作る組込みOS自作入門

 

 

勉強方法としては、上記の「12ステップで作る組込みOS自作入門」を読みつつ、実際にプログラムを作ってH8/3069Fマイコンボードに組み込む流れで。

環境はこんな感じ。

 

Windows7+Cygwin

・USB Serial Port

・H8/3069Fマイコンボード

 

1stステップでは「開発環境の作成」。

まず初めにクロス開発環境を作るが、GNU/Linuxを用意するのが面倒なので今回はWindows7(32bit)にCygwinをインストールする(本でも一応勧められている)。

CygwinはH8/3069Fマイコンボード付属のCDに入っていたのでそれをインストール。ちなみにバージョンはversion 2.78.2.9。

 

次にGNUプロジェクトが提供しているgccというコンパイラbinutilsというアセンブラ・リンカ等のツール類をインストール。

こちらはこの本の作者のHP(http://kozos.jp/books/makeos/)から入手したファイルを使用。

binutilsはインストールできたがgccでビルド時にエラーが発生。

"/usr/bin/install: permission denied"と出ているが権限の問題ではない様子。

ググッて調べてみるとgcc-3.4.6フォルダのMakefileの変数INSTALLが悪さをしているらしい。

binutils-2.19.1フォルダのMakefileの変数INSTALLをコピペしてみるとインストールが出来た。

 

ここでやっとプログラムファイルの作成に入る。

main()関数とスタートアップ、割り込みベクタ、ライブラリ関数、シリアル・デバイス・ドライバ、ヘッダファイル、リンカ・スクリプトMakefileを作成する。

ヘッダファイルの説明で「typedefによって定義された型をヘッダファイルの上で利用すると、ヘッダファイルの依存関係ができてしまい、インクルード時に順番などを考慮する必要がある」とあるのが分からなかったがとりあえず後回しに。

とりあえず忘れそうなので各ファイルをざっとおさらい。

 

スタートアップ : 各種初期化を行ったあとにmain関数を呼び出すファイル。アセンブラで作成。

割り込みベクタ : 関数へのポインタを定義。現在startのみ。

ライブラリ関数 : 標準ライブラリを使わないためライブラリ関数を作成する。現在1文字送信と文字列送信のみ。

シリアル・デバイス・ドライバ : デバイスドライバ(シリアルポート)。デバイスの初期化、送信可能かの確認、1文字送信を行う。

リンカ・スクリプト : 実行形式ファイルのメモリ配置を定義(メモリ・マップ)。

Makefile    : コンパイル・リンクを行い実行形式を作成する手順。

 

 

ファイルを作成後にmakeコマンドでコンパイル・リンカを行う。

その後、make imageコマンドでファームウェア「kzload」をELF形式からモトローラSレコード・フォーマット(mot)に変換し、「kzload.mot」を作成する。

 

その後、make writeコマンドでkzload.motをH8/3069Fマイコンボードに転送を行う(DSWはON-ON-OFF-ON)。

この時、com1 port errorが発生。

MakefileのH8WRITE_SERDEVをCOM1に修正したが直らなかったが、USB Serial PortのUSBを抜き差しするとなぜか転送が成功した…。

 

今回作成したプログラムは"Hello World!"という文字列をシリアル出力するので、確認にはシリアルポートの入出力を行う端末シミュレータが必要となるため、Tera Termをインストール。特に問題は起きないためインストール手順は省略。

DSWをON-OFF-ON-OFFにしてリセットを行うと、Tera Termに"Hello World!"が出力。

無事成功!!

 

f:id:netobas:20140315195153p:plain

 

ここまでに5時間ちょいくらい…環境構築さえなければ…!