ブートローダの作成が完了 - 12ステップ本を試す その2

年末年始の空き時間に12ステップ本にしたがって作業を進めていましたが、7章まで完了することができました。
これでブートローダの作成が一段落ついた感じです。

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

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

ELFファイルを転送するにあたって、試しに使ってみていたminicomでの作業だとファイル転送の実行の操作が面倒でしたので、結局Macにデフォルトでインストールされているcuコマンドでh8ボードにシリアル接続して作業するようになりました。

また、xmodemプロトコルでのファイル転送につかったのはlsxコマンドですが、これについてもMacにはデフォルトでは入っていないコマンドなので、次のようにhomebrewからのインストールを行いました。

lsxコマンドのインストール

sudo brew install lrzsz

これでlsxなどのコマンドが使えるようになります。

ELFファイルのシリアル転送の実行

12ステップ本ではcuコマンド実行中に"~C"を入力してlsxコマンドを実行するように書いてありますが、Macのcuの場合は"~+"を入力してコマンドを実行すると、シリアルからの入力がコマンドへの入力になり、コマンドの入力がシリアルへの出力になります。

実際にこれまで作成したものを実行してみた所です。

% sudo cu -l /dev/cu.PL2303-00004006 
Connected.

kzload> 
boot loader started.
kzload> load
~+ lsx kozos.elf
Sending kozos.elf, 27 blocks: Give your local XMODEM receive command now.
Bytes Sent:   3584   BPS:196                             

Transfer complete
load succeeded.
kzload> run
magic      : 7f454c46
Class      : 01
Byte order : 02
Version    : 01
OS/ABI     : 00
ABI ver.   : 00
type       : 0002
arch       : 002e
version    : 00000001
entry point: 00ffc020
program hdr: 00000034
section hdr: 00000608
flags      : 00810000
hdr_size   : 0034
program_hdr_size : 0020
program_hdr_num  : 0002
section_hdr_size : 0028
section_hdr_num  : 0008
section_str_table: 0005
type     offset   vaddr    paddr    file-sz  mem-sz
-------- -------- -------- -------- -------- --------
00000001 00000000 00ffbfac 00ffbfac 000004ba 000004ba
00000001 000004bc 00ffc468 00ffc468 00000100 00000100
starting from entry point... : 00ffc020

os started.
kozos> echo Hello, world!
 Hello, world!
kozos>

runコマンドの処理ではELFファイルの情報を出力したあとkozos側に制御が移るようにしています。


ということで、12ステップ本にそって組込みOSを作ってみているところですが、12ステップ本は素晴らしい本だと思います。

  • 説明が入門者にもやさしく丁寧にかいてあること
  • CDROMメディアの普及などで最近の書籍ではあまり見かけなくなってしまった「このリストを全部打ち込もう。そうすれば動くようになるよ」という書き方
  • 最初は単純なものをつくり、徐々にステップアップしていくという達成感が得られやすくモチベーションも続きやすい進め方

といった点は、学習者にとってはとてもうれしいものです。

  • ブートローダ作りたい。ELFファイルのロードを学習したい。
  • OSを作ってみたい。OSの基本機能を学習したい。

という人はぜひ最初にこの本を手にしてみるとよいと思います。