ブログパーツ Twitter

« プリモプエル、9才になる | トップページ | ももの日!に届いたものは »

2014.02.20

Project HariTiger OS、再起動

ソチ冬季五輪も盛り上がっていますね。
時差の関係で競技のほとんどが日本時間の夜中になってしまうのがツライです。
そのせいもあってか、ロンドン五輪では楽しんだ「TV 中継されない競技のネット中継」を今大会ではまだ一度も見ていないな。


----------

始まりは2006年に購入した「30日でできる! OS自作入門」という分厚い本でした。

初版第2刷という結構早い段階で購入。
「30日でできる! OS自作入門」の Wiki はこちら
Amazon の「30日でできる! OS自作入門」のページはこちら

 
それを読んで作っていた自作 OS に「HariTiger OS」なる名前をつけて進捗をときどき公開していましたが、最後に画面を公開したのは2006年の8月。
(その後「blogのコメントで問い合わせがあった」ことに触れた記事が2008年末。)
 

過去の HariTiger OS に関する記事は以下の通り。
2008.12.31 さよなら2008
2006.08.05 Project HariTiger OS・続報4
2006.05.08 30日でOSを作る本・続報3
2006.04.27 30日でOSを作る本・続報2
2006.04.02 30日でOSを作る本-続報
2006.03.25 30日でOSを作る本

 
その後も気にはしていたのですが、手を付けることはなく年月は過ぎ...
 
いよいよ「眠れる虎」が目を覚まします。
 

「HariTiger OS」の名前は、「OS自作入門」での OS の名前である「Haribote(はりぼて) OS」にあやかって、「『はりぼて』じゃなくてせめて『張子の虎』に」ということでつけたので「眠れる虎」というわけです。



実は次のようなサイトを見つけたのです。
 
0から作るソフトウェア開発
 
Amazon Kindle ストアの「コンピュータ・IT」カテゴリーを覗いていたところ、「0から作るOS開発」というシリーズ本が出ているのを見つけたことがきっかけとなりました。

0から作るOS開発 Vol.0 環境準備編 OSを作る環境の準備と設定 [Kindle版]
0から作るOS開発 Vol.1 ブートローダー編 0から作るブートローダー [Kindle版]
0から作るOS開発 Vol.2 カーネルローダー編 0から作るカーネルローダー [Kindle版]
0から作るOS開発 Vol.3 カーネル編 そしてカーネルへ [Kindle版]
0から作るOS開発 Vol.4 カーネル編 割り込み ~IDTとPICとPIT~ [Kindle版]
0から作るOS開発 Vol.5 カーネル編 物理メモリー管理 [Kindle版]
0から作るOS開発 Vol.6 カーネル編 ページング [Kindle版]
0から作るOS開発 Vol.7 カーネル編 フロッピーディスクドライバー [Kindle版]
0から作るOS開発 Vol.8 カーネル編 DMAドライバー [Kindle版]
0から作るOS開発 Vol.9 カーネル編 ヒープとkmallocとスラブアロケーター [Kindle版]
0から作るOS開発 ドライバー編 キーボードドライバー[Kindle版]
0から作るOS開発 ドライバー編 VGAグラフィックドライバー [Kindle版]
0から作るOS開発 ライブラリー編 連結リスト [Kindle版]
0から作るOS開発 補足説明編 GRUBからの自作カーネル起動 [Kindle版]

 
で、「著者が web 上でも情報を出していないか」と思って検索したところ見つけたのが先ほどのサイトです。
(本は「サイトの内容をまとめた+α」らしいです。)
 
いくらか内容を読んでみて、「これを使えば HariTiger OS の不満な点のいくつかを改善できるのではないか」と考えたので、重い腰をあげることにしたのです。



「HariTiger OS の不満な点」と書きましたが、元にした「OS自作入門」の Haribote OS の不満な点とも言えるのですが、それらのうちのいくつかを挙げてみると...
 
・「簡単に作成できる」ようにするために、作成に使うツール類(アセンブラ,コンパイラなど)が専用品であった
→ 一般的な NASM や gcc で開発したい。仮想 PC ソフトはもちろん Virtualbox で。
 
・ブートローダが色々な点で独特
→ 一般的な OS 用のものに習って2段階式のものにしたい。また、Linux などで標準の GRUB から OS がブートできるようにしたい。
 
・OS の画面がいきなりグラフィック画面から始まる
→ 最初はテキストモードで文字がぞろぞろ流れて、その後にグラフィックモードに移るとカッコイイかも。
 
・システムコールの実装方法がどうもなぁ
→ Linux などが使っている INT 80h を使う方法に変えたい。
 
・デスクトップが今となっては時代遅れ感が
→ 最新のタブレット風な画面にしたらおしゃれ?



まずはウオーミングアップとして、QEMU という仮想 PC ソフト上で動いていた HariTiger OS Ver.0.0.4 を、Virtualbox 上で動かすことに挑戦!
 
HariTiger OS Ver.0.0.4
(Virtualbox の上の仮想 PC を HariTiger OS の FD イメージから起動するように設定しただけ。)
※画像をクリックすると大きな画像(640x480)を表示します。
 
あっさり動いてしまって、逆に拍子抜け。
 
考えてみたら HariTiger OS の「タブでアプリを切り替え」という UI (ユーザー・インターフェース)は、Chrome OS なんかよりも早かったわけですよね。
 
惜しいことした...(何が



そしていよいよ作成を開始したのが今月の6日のことでした。
 
従来の HariTiger OS を改造するのではなく、「OS自作入門」(※以後「30日OS」)と「0から作るソフトウェア開発」(以後「※0からOS」)を参考にして、一から作成します。
(基本は「30日OS」で、要所要所に「0からOS」の知識を使用。)
 
開発にはアセンブラとして「NASM」を、コンパイラとしては「gcc」を使用しています。

「30日OS」は、アセンブラは NASM を改良した「nask」を、コンパイラは「cc1」を使用。
「0からOS」は。アセンブラは「NASM」と「GAS」を、コンパイラは「gcc」を使用。
また「0からOS」は Windows 上で UNIX 系のコマンドを使用するために「Cygwin」を導入していますが、私は Linux の一種である Ubuntu 上で開発します。

 
で、現在の画面がこちら!
 
新 HariTiger OS
(あれれ? 2月6日から開始してまだこんな段階?)
※画像をクリックすると大きな画像(720x400)を表示します。
 
まあ、ものすごく久しぶりのC言語だったんで勘を取り戻すのに時間がかかったため、とでもしておきましょうか。
(「const char」なんて知らなかったもん。文字列は「char」で扱うものと思ってた。)
 
ちなみに magic 以降の表示はデバッグ用なので、まもなく消します。



しかし先ほどの画面は「OS 本体」の起動画面。
 
その前の「ブートローダ」の段階の画面がこちら。
 
GRUB の OS 選択画面
(お、なんかメニューみたいになっていますね。)
※画像をクリックすると大きな画像(720x400)を表示します。
 
これが Linux などで一般的に使用されている GRUB (正確には GRUB 2) の OS 選択画面なのです。
(Windows でもマルチブート構成にした場合、起動時に OS 選択画面が出ますよね。あれに相当するものです。)
 
もちろん OS 選択画面を出さずに OS 起動までもっていくこともできますが、そうすると GRUB が目立たなくなるのでこうしています。
 
GRUB の HariTiger OS への設定方法については「0からOS」の方法(※)を踏襲していますが、OS を自動起動させるための設定については「0からOS」に書かれている「grub.cfg を編集する」ではできませんでした。

「0からOS」では「FD に GRUB を設定するのは面倒なので、GRUB を設定した iso ファイル(要するに CD)を作成し、そこから FD 内の OS を起動する」という方法を採っています。

 
web を色々調べまくった結果、以下のサイトを参考にして解決しました。
 
Vol.202 - いますぐ実践! Linux システム管理
(どうやら「0からOS」で使用ている GRUB と、Ubuntu が採用している GRUB 2 だと方法が違うみたいですね。)
 
以下のような手順で行いました。
 
1./etc/default/grub を編集
 
こうなっていたのを、
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

 
こう直しました。
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=15
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

※変更点は太字にしています。
 
2行目は「#」でコメント化して、OS 選択画面を表示させるようにしています。
4行目は無操作時に自動的に OS を起動するまでの待ち時間を「15秒」にしています。
 
2.grub-mkconfig コマンドを実行して grub.cfg ファイルを作成
 
あらかじめ「0からOS」での手順でホームディレクトリ下に rescue ディレクトリ以下を作成していたので、以下のコマンドを実行。
 $ sudo grub-mkconfig -o rescue/boot/grub/grub.cfg

Ubuntu 上で作業しているので管理者権限で実行するためには「sudo」が必要。

 
3.作成された grub.cfg ファイルを編集
 
作成された「grub.cfg」ファイルでは、開発用 PC の Ubuntu のための OS 選択画面を表示してしまうので、HariTiger OS 用に編集します。
 
選択メニューの先頭を Ubuntu から HariTiger OS 用に修正して、他の選択肢はコメント化しました。
 
HariTiger OS 起動のための部分だけ掲載します。
(まだ不要な部分が残っているかも。)
 
menuentry 'HariTiger OS' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    set root='fd0'
    multiboot /kimage
    boot
}

 
4.grub-mkrescue コマンドを実行して iso ファイルを作成
 
このコマンドについては「0からOS」の方に書いてあります。
$ sudo grub-mkrescue --output=rescue.iso rescue

Ubuntu 上で作業しているので(以下略)

 
ただ、このコマンドの実行に必要な「xorriso」というのが Ubuntu に入っていなかったので、別途インストールが必要でした。
 
なお「GRUB でない2段階式ブートローダ」については、GRUB に挑戦する前に作成して(もちろん「0からOS」に準拠)、まあまあ満足の行く出来でした。
(今でも iso からでなく FD からブートすると、そのブートローダから起動するようになっています。)



とりあえず今のところの予定としては、
 
テキストモードでできる部分をもう少しすすめて、その後にグラフィックモードへ切り換える
 
といったように進めていきたいと思っています。
 
今回こそ「30日」どころか「300日」はかかるな、うん。


結論: 「進捗どうですか」とは聞かないようにお願いします。


・5月9日 追記
HariTiger OS についての新しい記事を書いたらリンクをつけることにしました。
2014.03.06 新HariTiger OS、1ヶ月

« プリモプエル、9才になる | トップページ | ももの日!に届いたものは »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« プリモプエル、9才になる | トップページ | ももの日!に届いたものは »

2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

お気に入り

無料ブログはココログ