esオペレーティングシステムのビルド方法


はじめに

es オペレーティングシステムの開発にあたっては、まずビルドシステム上で使用するツール類(IDLコンパイラなど)を作成し、続いてクロス開発環境(C/C++コンパイラ、リンカなど)を構築する必要があります。

ソースパッケージの展開

esオペレーティングシステムのソースパッケージを展開します。

$ tar -zxvf es-0.1.1.tar.gz

ソースパッケージのディレクトリ構成は以下のようになっています。

ディレクトリ名 内容
es-0.1.1 トップディレクトリ
    cmd esのアプリケーションプログラムを格納する場所
    esidl IDLコンパイラesidlが格納されている場所
    include esのインクルードファイルが格納されている場所
        es esのクラスライブラリ、テンプレートライブラリのヘッダーファイルが格納されている場所
            base esの基本的なインターフェイス定義ファイル(.idl)が格納されている場所
            device esのデバイスドライバのインターフェイス定義ファイル(.idl)が格納されている場所
            naming esの名前空間インターフェイス定義ファイル(.idl)が格納されている場所
            util esの補助的なインターフェイス定義ファイル(.idl)が格納されている場所
    init esカーネルが最初に起動するinitプロセスのソースが格納されている場所
(カーネルイメージはこのディレクトリから作られます。)
    os esを構成するコンポーネントを作るためのライブラリを格納している場所
        bootsect ブートセクターとカーネルローダーのソースが格納されている場所
        fs ファイルサブシステムのライブラリが格納されている場所
            fat FATファイルサブシステムのソースが格納されている場所
            iso9660 ISO 9660ファイルサブシステムのソースが格納されている場所
        kernel カーネル本体のソースが格納されている場所
            include カーネルのビルドに必要なインクルードファイルが格納されている場所
            pc カーネルのPC依存部分のソースが格納されている場所
            port カーネルの汎用的な部分のソースが格納されている場所
            posix カーネルをPOSIX環境でエミュレーションするためのソースが格納されている場所
            testsuite カーネルのテストスイートを格納している場所
        libes++ esのクラスライブラリ、テンプレートライブラリのソースを格納されている場所
        net TCP/IPプロトコルスタックのソースが格納されている場所
            include TCP/IPプロトコルスタックのビルドに必要なインクルードファイルが格納されている場所
            src TCP/IPプロトコルスタックのビルドに必要なソースファイルが格納されている場所
            testsuite TCP/IPプロトコルスタックのテストスイートを格納している場所
    patches esで使用する外部のクロス開発ツールに当てるパッチファイルを格納している場所
    tools esカーネルを構築する際に使用するコマンドラインツールのソースを格納している場所

開発ツールのビルド

まずesのビルドシステム上で使用するツール類(IDLコンパイラなど)をビルドします。以下の例では、ディレクトリes-linuxでツールをビルドします(名前は何でもかまいません)。

$ mkdir es-linux
$ cd es-linux
$ CFLAGS=-g CXXFLAGS=-g ../es-0.1.1/configure
$ make
$ sudo make install

IDLコンパイラ、インターフェイス ヘッダーファイル、ライブラリ、コマンドライン ツールの順番にビルドが進み、デフォルトでは /usr/local/bin の中に vcopy, vformat, vlist, esidl といったツール コマンドがインストールされます。

クロス開発環境のビルド

esでは、リンカ、C/C++コンパイラ、C標準ライブラリとして、GNU Binutils、GCC, the GNU Compiler Collection、Newlibにパッチを当てたものを使用してクロス開発を行っています。実際にesオペレーティングシステムをビルドする前に、これらの開発ツールを開発ツールのビルド方法を参考にしながらビルドします。ビルドが完了したら、クロス開発ツールのインストールされている場所にPATHを通しておいてください。

PATH=/usr/local/es/bin:$PATH
export PATH

追加ライブラリのビルド

続いて、esオペレーティングシステムのアプリケーションソフトウェアから利用する追加のランライムライブラリをビルドします。追加ライブラリのビルド方法を参考にしながらビルドしてください。

esオペレーティングシステムのビルド

現在サポートしているターゲットは、i386-pc-esです。以下の例では、 ディレクトリes-pcでi386-pc-es用のesオペレーティングシステム本体をビルドします(名前は何でもかまいません)。

$ cd es-pc
$ CFLAGS=-g CXXFLAGS=-g ../es-0.1.1/configure --prefix=/usr/local/es --host=i386-pc-es --target=i386-pc-es
$ make
$ sudo make install

インターフェイス ヘッダーファイル、ライブラリ、カーネル イメージ、ECMAScriptインタープリタ esjsの順番にビルドが進み、上記の例では/usr/local/esの下に生成したファイルがインストールされます。ここまでの手順でカーネル本体はビルドできています。

Squeakのビルド

esオペレーティングシステムからSqueakを実行することもできます。Squeakを利用したい場合はSqueakのビルド方法を参考にしながら、Squeakをビルドしてください。

ディスクイメージの作成とシステムの起動

qemuなどのCPUエミュレータでカーネルを起動するためのディスクイメージを作成するスクリプトがes-pc/init/esという名前で作成されています。

$ cd es-pc/init
$ ./es

上記の手順で出来た仮想ディスクイメージfat32.imgには以下のようなファイルが含まれています。

ファイル名 内容
es.ldr esのカーネルローダー。
ファイルシステムのブートセクターから読み込まれて実行されるファイルです。
es.img esのカーネル本体です。
eventManager.elf キーボードやマウスからの入力をイベントとして記録して外部のプログラムから利用できるようにするサービスを提供するプログラムです。
console.elf イベントマネージャーからキーボードイベントを取得して入力された文字のストリームに変換したり、SVGA画面上に文字列を表示するサービスを提供するプログラムです。
esjs.elf esjs ECMAScriptインタープリタの実行ファイルです。
shell.js ECMAScriptで記述したコマンドラインシェル プログラムです。
cat.js ECMAScriptで記述したcatコマンドです。
% cat file/cat.js
cd.js ECMAScriptで記述したcdコマンドです。
% cd file
clear.js 図形描画用のキャンバスをクリアするコマンドです。
% hello
date.js ECMAScriptで記述したdataコマンドです。
% date
echo.js ECMAScriptで記述したechoコマンドです。
% echo a b c
edit.js ECMAScriptで記述したUnixのedライクなラインテキストエディタです。
% edit hello.js
figure.js CanvasRenderingContext2Dインターフェイスを用いてSVGA画面に描画するデモスクリプトです。
ls.js ECMAScriptで記述したlsプログラムです。
% ls file
rm.js ECMAScriptで記述したrmコマンドです。
% rm hello.js
hello.elf 画面にhello, world.と表示するお馴染みのプログラムです。
% hello
squeak.elf es用にポーティングしたSqueakです。
Squeak3.7-5989-full.changes Squeakのイメージファイルの差分ファイルです。
Squeak3.7-5989-full.image Squeakのイメージファイルです。
SqueakV3.sources Squeakのイメージファイルのソースです。
fonts.conf fontconfig用の設定ファイル。
conf.d/40-generic.conf fontconfig用の設定ファイル。
fonts/LiberationMono-Regular.ttf redhat社のLiberationフォント。等幅。
fonts/LiberationSans-Regular.ttf redhat社のLiberationフォント。セリフなし。
fonts/LiberationSerif-Regular.ttf redhat社のLiberationフォント。セリフ付き。
fonts/sazanami-mincho.ttf さざなみフォント。明朝体。
fonts/sazanami-gothic.ttf さざなみフォント。ゴシック体。
1b68cf4fced22970e89022fed6868d03-x86.cache-2 fontconfigが生成したフォントキャッシュファイルです。

作成されたfat32.imgを指定してqemuなどからesを起動することが出来ます。

$ qemu -hda /home/shiki/es-pc/init/fat32.img -serial stdio -soundhw sb16 -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=/etc/qemu-ifup

この例ではqemuにプライマリ ハードディスク ドライブのディスク イメージとしてfat32.imgを使用し、オーディオ用のハードウェアとしてSoundBlaster 16をエミュレートすることを指定してesを起動しています。 またネットワークデバイスとしてネットワークにアクセスするために TUN/TAP デバイスを使用しています(設定方法はこちら)。esのDHCPクライアント機能が有効になっていますので、家庭用ルーターなどDHCPサーバーが動作しているLANの中で起動させると、IPアドレスをesが自動的に取得ます。Squeakからはウェブ ブラウザScamperを使ってインターネットのウェブページを見たりすることができます。

esオペレーティングシステムの実際の使い方については、esオペレーティングシステムの使い方を参照してください。

カーネルのデバッグ方法

es-0.0.8以降ではesカーネル本体によるgdbを使ったデバッグ がサポートされています。

$ qemu -hda fat32.img -serial stdio -serial tcp::1234,server
QEMU waiting for connection on: :1234,server

のようにCOM 2にTCPを指定してqemuを起動すると、カーネル本体をgdbでリモートデバッグできます。

$ gdb es.elf
(gdb) target remote localhost:1234
(gdb) c

コマンドラインのgdbの変わりにkdbgなどGUIベースのデバッガを利用することもできます。

$ kdbg -r localhost:1234 es.elf

[esオペレーティングシステムのホームページに戻る]


Copyright © 2006, 2007
Nintendo Co,. Ltd.

Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Nintendo makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.

SourceForge.jp