Bootloader)について見ていきます。Grubは様々なOS(Windows、Linuxなど)をブートするブートローダーとなります。Grubを使用することで、自分で作った自作OSをフロッピー、CD、USBなどからブートすることができるようになります!!!それでは、順番に見ていきます。初期のコンピューター1940年代〜1950年代の初期のコンピューターでは、人の手で1週間ぐらいかけてコンピューターに入力していました。初期型のENIACではコンピューターの配線を変えてプログラムを入力していて、まだブートローダーというものはありませんでした。(強いて言えば”人間”がブートローダーとなります。Syste)では、1つのプログラムが実行できました。容量が少なくプログラム自身を少しずつ部分的にロードして実行していました。701では、"Load"ボタンを押すとパンチカードなどのメディアからブートローダーをロードするハードウェアが開発されました。Load)と呼ぶようになり、現在でもIPLという言葉が使われています。701では、"Load"ボタンを押すとブートローダーをメモリーに読み込み、読み込まれたブートローダーは実行を開始します。人が入力するのではなく自動的に、大きなプログラムをメモリーに読み込み、そのプログラムの実行を開始します。”ブート”という言葉は少なくとも1958年から使用されているようです。(”ブート”という言葉自体はブーツを持ち上げるために付いているブーツのブーツストラップからきています。人ではなく、”ブーツが自分自身でブートストラップを持ち上げる”イメージからきていて、プログラムがプログラム自体をメモリーにロードすることを”ブートストラップ”と呼ぶようになりました。最初は”ブートストラップ”でしたが、次第に省略されて”ブート”になったようです。System/360とその後継機(現在のメインフレームで言えばz/Architecture)では、ブートローダーが行う処理のことをIPLと読んでいます。System/360以降のシステムではオペレーターはIPLが格納されているデバイスを指定するコマンドを打ち込み、が指定したデバイスからIPLを読み込みできるようになりました。ROMを使用したコンピューターROM(読み込み専用メモリー)がコンピューターに導入されてから、従来のブート処理が変わってきました。ROMに格納されているファームウェアがブート処理を行うようになりました。(現在のBIOSも同様にROMに格納されているファームウェアとなります)。1では、PROMに格納されているファームウェアでブートローダーをロードするようになり、”Load”ボタンをが無いコンピューターを作りました。これにより、オペレーターが操作することなくブートローダーをロードするコンピューターが出てきます。実行するように設計されるようになりました。現在のパソコン現在のパソコンでは、昔のパソコンとの互換性のためにBIOSがブートデバイスから512バイトのブートローダーをメモリーにロードし、ブートローダーを実行します。現在ののパソコンでは、512バイトのブートローダーでは、OSを起動する処理をプログラムするには小さすぎるため、OSをロードするプログラムをロードします。OSをロードするためには、ブートデバイスを制御するドライバーや、デバイスのどこにカーネルがあるのかを記録しているファイルシステムを調べ、カーネルをロードするプログラムが必要となります。OSをロードするプログラムをこのサイトではカーネルローダーと記載しています。このように、OSを起動するには、2段階以上のローダーが必要となります。ブートローダーは、OSをロードするプログラムをメモリーにロードして、カーネルを起動するプログラムとなります。ブートローダー自身もパソコンの電源を入れた時にBIOSがメモリーにロードし、ブートローダーの処理を起動します。BIOS自身は電源を入れた時のリセット処理でBIOSのファームウェアの処理が呼び出されます。Bootloaderの略となります。これまでのブートローダーは専用のOSのみしか起動できませんでしたが、(例えばNTLDRはWindowsを、LILOはほぼLinuxだけを起動していました)。ベースに作られていますので、様々なOSを起動することができます。ブートローダーとして採用されています。Hurdを起動させるためのものでした。1999年にゴードン・マッツィヒカイトという方と奥地秀則という方がGNUプロジェクトの公式ソフトウェアとして公開しました。GRUBの特徴GRUBは起動時に設定ファイル(デフォルトではgrub.cfg)を読み込み、またカーネルやinitrd(初期RAMディスク)を選んで起動することができ、コマンドラインを入力することもできます。ファイルシステムと様々なデバイスGRUBはUnixで主に使用されているファイルシステムからWindowsのVFATやNTFSなど様々なファイルシステムに対応しています。OSが格納されている色々なメディア(HDD、CDなど)からOSをロードすることができます。インターフェース設定を行うことで、起動時のブートメニューの背景画像を表示させたりといった設定ができます。ネットワークからの起動ネットワークからOSをダウンロードして、起動することができますので、ディスクレスシステムも可能となります。マルチブートマルチブート仕様に対応しているOSを選んで起動することができます。マルチブート仕様に対応していないOSでも、そのOSのブートローダーをロードすることで(チェインロード)、ブートすることができます。GRUBのブート処理GRUBには公式的に2つのバージョンがあります。Legacy)と呼ばれています。現在GNUはGRUBレガシーの開発を中止していて、grubバージョン0.9*がGRUBレガシーにあたります。2にプロジェクトが移行しています。2と記載されています。うプラっとフォームへのインストール対応、その他の役に立つパッケージの追加、などを行うために全面的に書き換えを行ったものです。IPAの「未踏ソフトウェア創造事業」の「次世代GRUBブートローダの基本設計と実装」という案件として採択されました。2の開発に統合され、正式にリリースされたのが2012年2月となります。2を対象としています。2のブート処理パソコンの電源を入れた時にBIOSはHDDなどのディスクのMBR(最初のセクター:512バイト)からブートローダーを読み込み、ブートローダーの処理を開始します。GRUBも最初は512バイトしか読み込まれませんので、このサイトでブートローダーとカーネルローダーの例を載せているような具合に2段階構成となっています。このサイトのブートローダーにあたるのがboot.imgで、boot.imgの処理でカーネルをロードするcore.imgをロードします。実行に必要なモジュールのロードとカーネルのロードを行います。boot.imgの処理ディスクのMBRまたはGRUBをチェインロードするときはPBR(VBR:仮想ブートセクター)に格納されています。BIOSがまずMBR(ディスクの最初のセクター)から512バイトのboot.imgを物理アドレス0x7C00に読み込みboot.imgの処理を開始します。boot.imgではデフォルトでは次のセクター(フロッピーディスクの場合。CDなどは1セクターの読み込みで2024バイト読み込みできるため、boot.imgが終わる次のバイトから2024バイトはメモリーにあります。)以降に格納されているcore.imgをメモリーに読み込み、core.imgの処理を開始します。通常boot.imgの次のセクター(または次のバイトから)に格納されています。core.imgでは、実行時に必要に応じてファイルシステムのモジュールをロードし、ディスクのファイルシステムに格納されているカーネルをメモリーにロードしてからカーネルの処理を起動します。モジュールでGRUBのメニューや設定ファイル(通常grug.cfg)の読み込みを行いカーネルを起動します。ここまでで、GRUBの概要が分かりました。(ここまでであまり詳細が把握できていなくても問題ありません)。次回はGRUBを実際にインストールして自作OSを起動してみます。GRUBのインストール。