自作OS — ソースファイルの整理、ライブラリ作成、Timer機能の追加、、、そして、つぎはぎOSの道へ

ステップローダーの不要になった機能を削除してスリム化し、ステップローダーとブートモニターで共通に使う関数をcommonディレクトリへ集約した。今回、i686-elf-arというライブラリ作成用のツールがあることを初めて知り、自作のmemcpy()などの汎用関数をライブラリ化して、common/lib/へlibstring.aとして作成した。静的ライブラリをつくるため、rcsというオプションを意味も分からずサイトの情報通りに付けて作成したが、コンパイルとリンクもできて、VirtualBoxで動作したからうまくいっているのだと思う。FatFsなどの<string.h>参照のために、pseude_string.hへlnコマンドでファイルリンクを設定した。
これから肥大化していくであろう開発に備えて、Makefileを含めて全体の整理を行った。commonディレクトリへ移動したインクルードファイルをMakefileのi686-elf-gccのオプションで-I指定、ライブラリはオプションの「最後の位置」で-Lと-lの指定で参照するように変更した。FatFsを共通化することも考えたが、ffconf.hのリードオンリー構成とリード/ライト構成のオブジェクトサイズの違いがあるし、今後FatFsがバージョンアップしても、安定して動いているなら旧バージョンのままでよいし、新しくビルドするモジュールにだけそれぞれリンクする方が賢明だと思った。ステップローダーの自作ソースは3ファイルだけになり、ロードモジュールはFatFs(リードオンリー構成)を含めて16.2K-byteに収まった。ブートモニターの自作分は6ファイルで現在40.6K-byte(リード/ライト構成のFatFsを含む)となった。普通の開発だとstdxxxなどのシステム共通ライブラリの更新はしないものだが、自作のものなので、しょっちゅう思い付いて修正や追加を行っていて、そんな時のcommonを含めたmakeの依存関係の設定が私にはよく理解できておらず、一部の再コンパイル漏れがでたりして、結局make cleanでオブジェクトを削除してから全部をmakeしなおすことが多い。どこかに頭のいいMakefileのサンプルがないだろうか、、、、、

関係ないかもしれないが、ステップローダーでリードオンリー構成のFatFsをできるだけ小さくしようとffconf.hを設定したら、以下のような警告が出るようになった。
ff.c:809:13: warning: ‘put_utf’ defined but not used [-Wunused-function]809 | static UINT put_utf ( /* Returns number of encoding units written (0:buffer overflow or wrong encoding) */
警告なので、リンクと実行に何の影響もないのだが、put_utfという変数名からすると、UNICODE関連のような気もする。宣言しても使われてない(defined but not used)ということなので、コメントアウトしてしまおうかと思ったが、ff.cのソースを見ると、LNF関連定義の#ifdefでコードの生成が複雑に絡み合っているみたいだったので、そのままにしておいた。

ずっと後回しにしていたが、ブートモニターにTimer割り込みを追加した。PITの初期化は簡単なので、割込み間隔は取り敢えず10msecとして、すぐに動くようになった。シングルタスクなので、単純にウェイトするためにしか使えないが、OSにタイマー機能は必要だ。

思いがけず、ブートローダーの起動に成功して、その感動でここまで突っ走ってきたが、プログラミングと関係ない仕事をしながらでは、可処分自由時間の確保が難しい。今はもう満足感もあるが、疲れたというのが正直なところ。FatFsの作者の方に感謝するとともに、すごい人の作った、すごいプログラムを使わせてもらう方針へ転換することにした。
今はOSSが盛んな時代でもあるし、既にオープンソースがあるものについて、自己満足で作成することに疑問を持つようになった。やるのなら、それらを使った新しいことをやりたい。これからもOSは作り続けるが、オープンソースを利用し、謂わば「つぎはぎOS」として、自分なりのアイディアを盛り込んだOSを少しずつ構築しようと思う。

カテゴリー: Linux, VirtualBox, 自作OS パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です