Character set: ISO-2022-JP(JIS)

# ELKS FAQ

これは Linux-8086としても知られている ELKSについての何度も繰りかえされる質問 に対する答えのリストです。

この FAQは Brian Candelerさんのオリジナルを元に Alister Riddochさんがメンテナン スを行っています。アップデートは ajr@ecs.soton.ac.uk. に送って下さい。最新版は http://www.ecs.soton.ac.uk/elks. に在ります。 注！ ELKSは開発の初期段階なのでこの情報はすぐ陳腐化しますよ。

他の情報は ELKSホームページ http://www.uk.linux.org/ELKS-Home/index.html. で見て下さい

メーリングリストに参加するには 本文に subscribe linux-8086とだけ書いて majordomo@vger.kernel.org に送って下さい。 メーリングリストのアーカイブは http://epocha.pd.mcs.net/Linux8086/. 又は http://www.cyberpass.net/~dummy/robert/archives/linux-8086/ which に在ります。

注！ ELKSは Linuxでは在りません、ですからこのメーリングリストは Linuxに 関する質問にはふさわしく在りませよ。 comp.os.linux.misc 等に送ってね。

## セクション 1 概要

- Q1.1. ELKSって何?
- Q1.2. ELKSと Linuxの違いは?
- Q1.3. ELKSはすぐ使える?
- Q1.4. ELKSは 8088プロセッサーで動く?

## セクション 2 コンパイルとインストール

- Q2.1. ソースコードはどこに在りますか?
- Q2.2. ELKSのカーネルはどのように作りますか?
- Q2.3. /usr/include/linux/vm86.h が見つからないとのエラーが出ました。
- Q2.4. ELKSの "init"はどのように作りますか?
- Q2.5. rootファイルシステムはどのように作るの?
- Q2.6. XTと 360Kディスクドライブが在るのですがどうすれば良いですか?
- Q2.7. bootイメージのルートデバイスを 変える方法は?
- Q2.8. ハードディスクへのインストール方法は?

## セクション 3 ELKSを使う

- Q3.1. Linuxで bccのバイナリーは動きますか?
- Q3.2. DOSEMU上で ELKSはブートしますか?

## セクション 4 未解答の質問

## セクション 1 概要

### Q1.1. ELKSって何?

ELKSは組み込み用途可能な Linuxカーネルのサブセットで Linuxから派生した小さな カーネルを作るプロジェクト( UNIX V7相当のシステムコールを持つカーネル)で少な いメモリー、非力なプロセッサーでも動作可能です。当初の目標はインテル 8086と 80286の 16bitプロテクトモードです。 このようなハードウェアで動くカーネルは組み込み機器に役立ち、高性能な最新の CPUの無い第三世界や、様々なパームトップ機に使えます。

更なる情報、プロジェクトの目標、進行状況は ELKS home page. で確認出来ます。

### Q1.2. ELKSと Linixの違いは?

ELKSは Linuxから派生したもので、一個人が理解可能なサイズですから学習用途に使 えますよ。まだ開発の初期段階なので、スワップ、シェアドライブラリー、パラレル 、シリアルI/O、ネットワーク等が未実装です。今はブートが可能で、仮想コンソール 、minixファイルシステムフロッピーのマウント、いくつかの小さなプログラムの実行 が出来ます。

### Q1.3. ELKSはすぐ使える?

まだです。Linux機を使い、ソースをダウンロードして 8086コードをクロスコンパイ ルする必要が在ります。現バージョンのELKSの bootイメージ、rootディスクイメー ジは在ります。でも多くのプラットフォームでテストする必要が在ります。 Michael Stratesさんは bootと rootイメージを一つにまとめる作業を行って下さいま した。

### Q1.4. ELKSは 8088プロセッサーで動く?

8088は 16bitではなく 8bitの拡張データバスを持つことです(それで遅いよ)。 もちろんELKSは動きます。

## セクション 2 コンパイルとインストール

### Q2.1. ソースコードはどこに在りますか?

ftp://linux.mit.edu/pub/ELKS がプライマリーサイトです。ELKSと Dev86のある他のサイトは以下の通りです。

ftp://ftp.ecs.soton.ac.uk/pub/elks/
ftp://cam053212.student.utwente.nl/pub/8086-nix/ELKS/
ftp://tsx-11.mit.edu/pub/linux/ALPHA/linux-16/
ftp://src.doc.ic.ac.uk/packages/linux/tsx-11-mirror/ALPHA/linux-16/
ftp://ftp.amscons.com/pubi/mirrors/ELKS

もし別のサイトをご存じでしたらメインテナーまで連絡して下さい。

### Q2.2. ELKSのカーネルはどのように作りますか?

`dev86/Dev86-0.0.13.4.tar.gz` と `kernel/elks-0.0.67/elks-0.0.67.tar.gz` (もしくは最新バージョン)をダウンロードし /usr/src に解凍して下さい。

        tar -xvzf Dev86-0.0.13.tar.gz -C /usr/src
        tar -xvzf elks-0.0.67.tar.gz -C /usr/src

開発環境は /usr/src/linux-86に、カーネルのソースは /usr/src/elksに展開され ます。 次ぎに bccコンパイラを含むツール類を作成します。

        cd /usr/src/linux-86
        make install

それからカーネルをコンパイルします。

        cd /usr/src/elks
        # カーネルを作る。
        make config
        make dep
        make

make configは linuxカーネルの物と似た振る舞いをします。デフォルトの設定のま まで多くのシステムで動くでしょう。貴方自身の行っている事が良く理解出来ていな いうちはオプションの変更はしないで下さい。 (もし gccを使って linuxカーネルを作った事が有るなら elksカーネルの makeの 速さに驚きますよ! :-) 最終的に "Image"と呼ばれるフロッピーディスクイメージが 出来ます。フォーマットされたフロッピーディスクにコピーし、ブートして下さい。

        dd if=Image of=/dev/fd0

or

        make disk

これでこのディスクからブート出来ます。あとはマウントするルートフロッピー ディスクを作ります。bccを使い、"init"プログラムをコンパイルし、root minix ファイルシステムを作る必要があります。以下を読み進めて下さい。

### Q2.3. /usr/include/linux/vm86.h が見つからないとのエラーが出ました。

`/usr/include/sys/vm86.h` の `#include <linux/vm86.h>` を `#include <asm/vm86.h>` に変更して下さい。

### Q2.4. ELKSの "init"はどのように作りますか?

ELKSカーネルがブートすれば /bin/initが動き出します。

現バージョンの "init"は linux.mit.eduにもある tiny-utilsパッケージに含まれる ものです。カーネルコードが最近変更になり /bin/shの代わりに /bin/initがロード されるようになりました。

カーネル0.0.67は kernel/elks-0.0.67/elkscmd.tar.gzに initと login(パスワード チェックなし)を含むユーティリィティーのセットが在ります。そのコンパイルとイン ストール法は

        bcc -0 -O -s init.c -o init
        bcc -0 -O -s login.c -o login

として実行ファイルを作り、ルートディスクの /binディレクトリーにコピーして下 さい。loginプログラムは /etc/passwdと /etc/groupファイル、それと /bin/sh(も しくは /etc/passwdのシェルのエントリーに記されているシェル)が必要です。

コンパイラオプションの`-0` (数値の"ゼロ")は8086コードを生成し、`-O` (大文字の"オ ー")はコードの最適化を有効にし、`-ansi` は ANSIファンクションプロトタイプを有効 にし、`-s` はバイナリーコードからシンボルを除きます。

カーネル0.0.56から sash(スタンドアローン シェル)が使え、多くの人に /bin/shの 代わりに使われています。elkscmd.tr.gzに含まれています。/etc/passwdと /etc/gr oupは linuxの物をコピーすると良いでしょう。ls -lが使えます。また sashのエラー レポートが /usr/lib/liberror.txtに残されます。

### Q2.5. rootファイルシステムはどのように作るの?

いくつかの物を含んだ minixフロッピーを作らねばなりません。/bin/に initと lo ginと sh、/etc/には passwdと group、/dev/には initの為の３つの ttysが必要です 。
注! /dev/ttyは Linuxが標準で使う（５、０）とは異なりますよ。

        mkdir /usr/src/root86
        cd /usr/src/root86
        mkdir dev
        cd dev
        mknod tty c 4 0
        mknod tty2 c 4 1
        mknod tty3 c 4 2
        mknod fd0 b 3 128
        cd ..
        mkdir bin
        cd bin
        cp <path-to-elkscmd-init> init
        cp <path-to-elkscmd-login> login
        cp <path-to-elkscmd-sash> sh
        cd ..
        mkdir etc
        cd etc
        cp <path-to-skeleton-passwd> passwd
        cp <path-to-skeleton-group> group
        cd ..
        fdformat /dev/fd0H1440      # if floppy not yet formatted
        mkfs -t minix -n14 /dev/fd0 1440
        mount -t minix /dev/fd0 /a  # need a mount point "/a"
        cp -pR /usr/src/root86/* /a
        umount /a

いくつかのディストリビューションでは /dev/fd0H1440のかわりに /dev/fd0u1440を 使います。

パスワードはまだサポートされていないので passwdファイルからパスワードを削除 して下さい。

もし2.2.xカーネルで mount-2.5kが使えるならハードディスクにループバックファイルシ ステムを使ってディスクイメージを作れます。そうしたらフロッピーにダンプして 下さい。

        dd if=/dev/zero of=root.image bs=18k count=80
        losetup /dev/loop0 root.image
        mkfs -t minix /dev/loop0 1440
        mount -t minix /dev/loop0 /a
        ...
        umount /a
        dd if=root.image of=/dev/fd0

ELKS.0.53から 1.44M以外のフロッピーも使えます。上の方法でサイズを適宜おきか えて下さい。1.2Mのドライブで 360Kの書き込みが可能です。360Kのドライブでブー トしたいのなら必要でしょう。

### Q2.6. XT と 360Kディスクドライブが在るのですがどうすれば良いですか?

目的のマシンが 360Kドライブがついているときなど 別のマシンで bootとroot イメージを使うときはちょっとした注意が必要です。360Kドライブ(5.25"DD)は 40トラックですし 1.2MB(5.25"HD)は 80トラックです。1.2MBドライブは 360Kの ディスクを読めますが、書き込めません。

一つの方法として 360Kのドライブを Linux PCの２つめのドライブとし `fdformat /dev/fd1d360` とフォーマットしてからファイルシステムを作ります。

それから DOSで "rawrite"を使い イメージファイルを作り直します。

#### Boot disks

'Image'ファイルはどのタイプのフロッピーにも書き込めますし、正しくブート します。必要な事は 'rawrite'を使い、目的のディスクを作ることだけです。

Root disksは自動検出されるようになりました。ですから、もう 1.44Mb以外のサイズ にコンパイルし直す必要はありません。

#### Root disks

ファイルシステムのサイズを 360Kに置き換え mkfsコマンドを実行し 360Kの ルートイメージが出来たら必要なファイルをこのディスクにコピーして下さい。 そしてアンマウントし、次の様にディスクイメージを作ります。

            dd if=/dev/fd0 of=root.image bs=1k count=360

'rawrite'をする前に作っておいて下さい。ループバックファイルシステムを使っ たのならこの操作は不必要です。

#### RAMの制限

バージョン0.0.44は、640K RAMを前提としていました。しかしながら 640K以下で起きる DEF_INITSEGと DEF_SETUPSEGの問題は以降のバージョンでは修正されていますので、何も 変更する必要はありません。

### * Q2.7. bootイメージのルートデバイスを 変える方法は?

バージョン0.0.62のブートディスクは 2つ目のフロッピードライブをルートディス クとして使うようにコンパイルされてました。なぜなら wait_for_keypress()ファン クションが壊れてしまうからです。

もし "root disk mount failing on device 03c0 "(03c0でルートディスクのマウントに失敗しました。)とメッセージが出たら 16進 コードエディターでブートイメージの中の始めの方に有る C003hを捜し、8003hに 替えて下さい。(c003hはインテル式の記述では 03c0となります。) これは多くのバージョンで動きます。けれども別のバージョンではどのアドレスに相 当するか定かではありません。 jose@cnct.com さんの報告によれば 0.0.62のブートイメージでは 0adfと0adeとの事で した。

### * Q2.8. ハードディスクへのインストール方法は?

バージョン0.0.65から ELKSルートディスクをハードディスクにインストール出来るよ うに成り、それを使うようにブートフロッピーを作れます。まだいくつかのバグがあ りますが、ルートフロッピーより便利でしょう。

まず fdiskを使い区画(パーティション)を作ります。いくつかのバージョンの fdisk が使えますが今のルートディスクのみ hd?1-4をサポートしています。 もし DOSの基本区画があれば DOSの fdiskでは 2つ目の基本区画は作れません。 ELKS 0.0.67のルートディスクにある fdiskはまだ枯れていませんが私のシステムでは 問題なく使えています。

区画分けが済んだら bootと rootフロッピーを使い ELKSを立ち上げて mkfsを使いフ ァイルシステムを作って下さい。これは ELKSの fdiskを使いファイルシステムを作ろ うとしている区画の正しいデバイス名を知る為の安全な方法です。

        mkfs /dev/hd?? <size>

hd??は正しい区画番号を、sizeの所は キロバイト単位を入れて下さい。は 32M 以上は使えません。 例として IDEドライブでスレーブに接続されたディスクの最初の区画に 20Mのファイ ルシステムを作るときは

        mkfs /dev/hdb1 20000

これでマウントポイント /mntにマウントするには

        mount /dev/hd?? /mnt とします。

新しい区画のルートディレクトリは少しミスがあり /mntからは "ls -l"が使えません なぜ mkfsが少し間違ったファイルシステムを作るのか私には分かりませんが、その 上で作業してます。

以下の様に新しいファイルシステムに基本的なディレクトリを作ります。

        mkdir /mnt/bin
        mkdir /mnt/dev
        mkdir /mnt/usr
        mkdir /mnt/usr/lib
        mkdir /mnt/mnt
        mkdir /mnt/etc
        mkdir /mnt/root
        mkdir /mnt/home
        mkdir /mnt/home/user?....

次に基本的なファイルを移します。まともなシステムにするにはよりおおくのファイ ルが必要でしょうけれども、ここは基本となるものだけですが結構役立ちます。

        cp /bin/init /mnt/bin/init
        cp /bin/login /mnt/bin/login
        cp /bin/sh /mnt/bin/sh
        cp /bin/ls /mnt/bin/ls
        cp /bin/pwd /mnt/bin/pwd
        cp /bin/mount /mnt/bin/mount
        cp /bin/umount /mnt/bin/umount
        cp /bin/cp /mnt/bin/cp
        cp /etc/passwd /mnt/etc/passwd
        cp /etc/group /mnt/etc/group
        cp /usr/lib/liberror.txt /mnt/usr/lib/liberror.txt

最後に基本的なデバイスを作ります。

        mknod /mnt/dev/tty c 4 0
        mknod /mnt/dev/tty2 c 4 1
        mknod /mnt/dev/tty3 c 4 2
        mknod /mnt/dev/fd0 b 3 128
        mknod /mnt/dev/fd1 b 3 192
        mknod /mnt/dev/hda b 3 0
        mknod /mnt/dev/hda1 b 3 1
        mknod /mnt/dev/hda2 b 3 2
        mknod /mnt/dev/hda3 b 3 3
        mknod /mnt/dev/hda4 b 3 4
        mknod /mnt/dev/hdb b 3 64
        mknod /mnt/dev/hdb1 b 3 65
        mknod /mnt/dev/hdb2 b 3 66
        mknod /mnt/dev/hdb3 b 3 67
        mknod /mnt/dev/hdb4 b 3 68

そしたらアンマウントしましょう。

        umount /dev/hd??

次に正しいデバイスを指定した新しいカーネルをコンパイルし直す必要があります。 これは ELKSカーネルソースにある include/linuxmt/config.hを編集し、ROOT_DEVの 0x380を区画の番号に変えます。最後の２つの数値は区画の番号を１６進表記したマイ ナー番号です。 -例- hdb3のマイナー番号は 67、これは１６進表記では４３です。ですから ROOT_DEV の数値は 0x343となります。

新しいカーネルフロッピーディスクを作る為に Type

        make disk と入力して下さい

そしてこの新しいブートディスクで ELKSを立ちあげて下さい。新しくルートがマウン トされます。警告メッセージがでますが通常どうりに動きます。でもフロッピーディ スクのものより速いですよ。ルートディレクトリは完璧ではないけれど別のディレク トリに移れますし、その他の点もいつもどうり動きます。

## セクション 3 ELKSを使う

### Q3.1. Linuxで bccのバイナリーは動きますか?

はい。カーネルモジュールをロードする事により ELKSバイナリーを直接実行出来ます 。これは ELKS上でプログラムを開発するより手軽ですし、Linux機でテスト出来ます 。（とは言ってもあなたのプログラムがカーネル未実装のコードを使ってもELKSでは 動きませんが。）

        cd /usr/src/linux-86/elksemu
        make module
        insmod binfmt_elks.o

リブートする度に 'insmod'と入力する必要が有る事に注意して下さい。 /usr/src/linux-86/testsに試せる bccのサンプルプログラムがいくつか在ります。 ('wc'等)

モジュール作成時に "modversions.h: no such file or directory"のエラーが出たら Makefileから次の行を削除して下さい。

    MODCFLAGS=-D__KERNEL__ -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
              -fno-strength-reduce -pipe -m486 -DCPU=486 -DMODULE -DMODVERSIONS

### Q3.2. DOSEMU上で ELKSはブートしますか?

はい。Linux 2.0.7の dosemu 0.63.1.36で ELKSはブート出来ます。多分他の組みあわ せでも良いでしょう。フロッピーブートを行う為に dosもしくは xdosで -Aフラグを 使い `/etc/dosemu`にフロッピーディスクドライブの設定をします。

        floppy { device /dev/fd0 threeinch }

## セクション 4 未解答の質問

これらの質問の答えを歓迎いたします。

- DOSからLOADLIN.EXEで Linuxがブート出来るように ELKSも出来ますか？ Benjamin C. W. Sittler さんがそれが出来る BootELKS, を作りました。
- 私のパームトップ機には RAMドライブが在ります。ELKS で使えますか？ (ELKSに msdosfsがあればよいと思うのですが...)
- bootと rootフロッピーディスクを一つにまとめられますか？

      > From: Bar-David Yedidya
      >
      > 今日私は LILOを使い root/bootディスクを一つにまとめました。動いたよ！
      > フロッピーディスクに /bootを作り、Imageをコピーし、boot.bをします。
      > フロッピーディスクの /etcにこれらを加えた lilo.confを置きます。
      > boot=/dev/fd0
      > compact
      > image=/boot/Image
      >         label=lin16
      >
      > did lilo -r /mnt
      > and Hopla!
      > 私はまだ Linuxと linux-16のブートコードをカーネルのソースで見比べていませ
      > んが、同じ動作だと思いますし、liloが動く理由と思います。

  最近のバージョンの(0.0.46以降)ELKSでは壊れるとの報告が在ります。 386以前のマシンでも動くのでしょうか？

  Chad Pageさんは次のバージョンでシングルディスクで動くように作業していま す。

Japanese translation by Tadayoshi Kubo