検索
連載

フルスクラッチの“Hello World”を動かしてみようH8マイコンボードで動作する組み込みOSを自作してみよう!(1)(3/3 ページ)

学習用、ホビー用の組み込みOSとして「KOZOS」があります。本連載では「KOZOS」を使ってH8/3069Fマイコンボード上でいろいろと実験をしつつ、フルスクラッチで組み込みOSを自作していく過程を体験してみます。最終的にはソフトウェア完全自作のWebサーバを動かします。

Share
Tweet
LINE
Hatena
前のページへ |       
※本記事はアフィリエイトプログラムによる収益を得ています

3.3.ファームウェア転送用アプリケーションの準備

 H8はフラッシュROMを内蔵しており、シリアル経由でプログラムを書き込むことができます(ROMライタは不要です)。

 この書き込みには「Open SH/H8 writer」(通称「h8write」)というフリーソフトウェアが利用できます。h8writeは以下からダウンロードできます。FreeBSD、GNU/Linux、Windows共通で利用できます。


関連リンク:
Open SH/H8 writer

 上記Webサイトにソースコードがありますので、先頭行にあるOSの指定を環境に合わせて修正し、以下のようにしてコンパイルして実行形式を作成しておきます。

% gcc h8write.c -o h8write -Wall
 

 なお、フラッシュROMの書き込みは、「FDT(Flash Development Toolkit)」というメーカー純正のツールでも行えます。ただ、こちらはWindows用しかありません。

3.4.端末エミュレータの準備

 本稿で説明している「Hello World!」はシリアル経由で“Hello World!”という文字列を出力するものです。このため、シリアル通信用のアプリケーションをPC側にインストールする必要があります。

 シリアル通信用アプリケーションには、以下があります。これらは「端末エミュレータ」などと呼ばれます。

  • FreeBSD、GNU/Linuxなど……「cu」「kermit」「minicom」など
  • Windows……「TeraTerm」「ハイパーターミナル」など

 Windowsの場合は「TeraTerm」、GNU/Linuxの場合は「minicom」がいいでしょう。まずはこれらをインストールしておきます。

3.5.ソースコードの準備

 KOZOSはオープンソースソフトウェアです。ソースコードはKOZOSのWebサイトで公開されています。

 ただし、上記Webサイトの情報は、筆者が開発を進めるたびにその都度公開している情報のため、あまりまとまっていません。今回は初心者向けということで、書籍用に整理されたソースコードを利用します。

 参考文献[2]のWebサイトから「osbook_03.zip」をダウンロードしてください。解凍すると図12のフォルダ構成でファイルが展開されます。

osbook_03 ─┬─ 01 ── bootload ── main.c    ┐
            │                         startup.s │(1stステップのソースコード)
            │                         vector.c  │
            │                         …        ┘
            ├─ 02 ── bootload ── … (2ndステップのソースコード)
            ├─ 03 ── bootload ── … (3rdステップのソースコード)
            …
            └─ 12 ┬─ bootload ── … (12thステップのブートローダーのソースコード)
                    └─ os ───── … (12thステップのOSのソースコード)
図12 ソースコードのフォルダ構成

 これは筆者の書籍「12ステップで作る組込みOS自作入門」(参考文献[1])の各章(ステップ)に応じたソースコードになっています。

 そして本来ならば、フルスクラッチというならばこれを写経して……といいたいところですが、ここはソースコードをそのまま利用してしまいましょう。解凍したフォルダに「tools」というフォルダを作成し、h8writeを図13の構成で配置します。

osbook_03 ─┬─ 01 ── bootload ── main.c    ┐
            │                         startup.s │(1stステップのソースコード)
            │                         vector.c  │
            │                         …        ┘
            ├─ 02 ── bootload ── … (2ndステップのソースコード)
            ├─ 03 ── bootload ── … (3rdステップのソースコード)
            …
            ├─ 12 ┬─ bootload ── … (12thステップのブートローダーのソースコード)
            │      └─ os ───── … (12thステップのOSのソースコード)
            └ tools── h8write─── h8write.c (h8writeのソースコード)
                                       h8write   (h8writeの実行ファイル)
図13 h8writeを追加する

 さらにPCのシリアルポートに合わせて、表2を参考にして「osbook_03/01/bootload/Makefile」の「H8WRITE_SERDEV」を修正します。

OS デバイスファイル名
FreeBSD-4.xでPC付属のシリアルポートを利用 /dev/cuaaX
FreeBSD-6.xでPC付属のシリアルポートを利用 /dev/cuadX
FreeBSDでUSBシリアルアダプターを利用 /dev/cuaUX
LinuxでPC付属のシリアルポートを利用 /dev/ttySX
LinuxでUSBシリアルアダプターを利用 /dev/ttyUSBX
Windows comX
表2 シリアルのデバイスファイル名

 表2中のデバイスファイル名の「X」の部分は、環境によって異なってきます。FreeBSD/Linuxでは多くの場合は「0」ですが、以下で説明する「make write」を試してみてダメなようなら「1」で試してみてください。WindowsはPC付属のシリアルポートでは「1」の場合が多いかと思いますが、これもダメなら「2」「3」と試してみてください。USBシリアルアダプターを利用している場合は、「4」「5」あたりになることが多いようです。

 例えば、「osbook_03/01/bootload/Makefile」では「H8WRITE_SERDEV」は、

H8WRITE_SERDEV = /dev/cuad0
 

のように定義されていますが、Windowsで「com4」を利用するのであれば、

H8WRITE_SERDEV = com4
 

のように修正します。

3.6.ファームウェアのビルド

 さて、いよいよファームウェアをビルドして動作させてみましょう。まずはソースコードのフォルダ(osbook_03/01/bootload)に入って、以下を実行することでソースコードをコンパイルしてファームウェアをビルドします。

% make clean
% make
% make image
 

 図14は、筆者の環境(FreeBSD)で実行したときの写真です。臨場感を出すために、出力文字だけでなくあえて画面写真を掲載しています。

make image
図14 make image

 これでファームウェアとして「kzload」というファイルと、マイコンボードへの転送用のファイル形式に変換した「kzload.mot」というファイルが作成されています(図14)。

 次にPCとマイコンボードをシリアルケーブルで接続します(図15)。

マイコンボードとPCを接続する
図15 マイコンボードとPCを接続する

 マイコンボードのディップスイッチを、左から「ON、ON、OFF、ON」(上、上、下、上)に設定します(図16)。これでマイコンボードがフラッシュROM書き込みモードで起動するようになります。

ディップスイッチを書き込みモードにする
図16 ディップスイッチを書き込みモードにする

 設定したら、電源アダプターを接続して電源ONします。本マイコンボードには電源スイッチはないため、電源アダプターの着脱で電源をON/OFFします。なお、電源LEDのようなものはないため、電源が入っているかどうかは見た目には分かりませんので注意してください。

 電源を入れたらスーパーユーザーになって「make write」を実行することでh8writeが動作し、ファームウェアを転送して内蔵フラッシュROMに書き込みます。

% su
# make write
 

 図17は、「make write」を実行したところです。「H8/3069F is」と表示された状態になれば、うまく接続されています。そのまましばらく待つと転送が開始され、図18のように「EEPROM Writing is successed.」と出力されます。

make write
図17 make write
書き込み完了
図18 書き込み完了

 これでマイコンボードのフラッシュROMに、ファームウェアを書き込むことができました。後は電源ONでファームウェアが起動します。

 “Hello World!”の出力を確認するには、端末エミュレータ(TeraTermやminicomなど)を利用します。端末エミュレータを起動して、さらにパラメータを表3のように設定します。多くの場合はデフォルトのままでいいようですが、一応確認しておいた方がいいでしょう。

利用するデバイス 表2のもの
ボーレート 9600bps
データ長 8ビット
ストップビット長 1ビット
パリティ なし
ハードウェアフロー制御 なし
ソフトウェアフロー制御(XON/XOFF) なし
表3 シリアル通信のパラメータ

 図19は、筆者が愛用している「cu」というツールで接続したところです。

端末エミュレータでマイコンボードに接続する
図19 端末エミュレータでマイコンボードに接続する

 ディップスイッチの設定を、左から「ON、OFF、ON、OFF」(上、下、上、下)に設定します(図20)。これでマイコンボードがフラッシュROMからブートするようになります。

ディップスイッチを起動モードにする
図20 ディップスイッチを起動モードにする

 リセットボタンを押して、起動してみましょう(図21)。リセットボタンはディップスイッチのすぐ右側にあります。

リセットボタンを押す
図21 リセットボタンを押す

 図22は、端末エミュレータの出力です。マイコンボードから“Hello World!”の文字列がシリアル経由で送信され、端末エミュレータ側で出力されています。無事、「HelloWorld!」が動作しています。

“Hello World!”が出力される
図22 “Hello World!”が出力される

 うれしくてリセットボタンを何回も押してみました(図23)。その都度リセットがかかり、繰り返し出力されています。

繰り返しリセットしてみる
図23 繰り返しリセットしてみる

4.次回

 今回は開発環境を構築して動作させることにとどまりました。次回は各種ソースコードを説明し、「Hello World!」の出力に必要な作業は何かを詳しく解説します。


筆者紹介:

坂井弘亮(さかいひろあき)


某企業でネットワーク系の開発を行いながら、個人で組み込みOS「KOZOS」の開発や書籍/雑誌記事執筆、各種セミナーでの発表やイベント出展、勉強会の開催など多方面で活動中。IPAセキュリティ&プログラミングキャンプ 2010講師。著書は「12ステップで作る組込みOS自作入門」など多数。


モノづくりが大好き!(筆者Webサイト)

KOZOSのブログ(筆者ブログ)



Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る