この 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 等に送ってね。
更なる情報、プロジェクトの目標、進行状況は ELKS home page. で確認出来ます。
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
もし別のサイトをご存じでしたらメインテナーまで連絡して下さい。
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 makemake configは linuxカーネルの物と似た振る舞いをします。デフォルトの設定のま まで多くのシステムで動くでしょう。貴方自身の行っている事が良く理解出来ていな いうちはオプションの変更はしないで下さい。 (もし gccを使って linuxカーネルを作った事が有るなら elksカーネルの makeの 速さに驚きますよ! :-) 最終的に "Image"と呼ばれるフロッピーディスクイメージが 出来ます。フォーマットされたフロッピーディスクにコピーし、ブートして下さい。
dd if=Image of=/dev/fd0or
make diskこれでこのディスクからブート出来ます。あとはマウントするルートフロッピー ディスクを作ります。bccを使い、"init"プログラムをコンパイルし、root minix ファイルシステムを作る必要があります。以下を読み進めて下さい。
現バージョンの "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に残されます。
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/fd0ELKS.0.53から 1.44M以外のフロッピーも使えます。上の方法でサイズを適宜おきか えて下さい。1.2Mのドライブで 360Kの書き込みが可能です。360Kのドライブでブー トしたいのなら必要でしょう。
一つの方法として 360Kのドライブを Linux PCの2つめのドライブとし fdformat /dev/fd1d360 とフォーマットしてからファイルシステムを作ります。
それから DOSで "rawrite"を使い イメージファイルを作り直します。
Root disksは自動検出されるようになりました。ですから、もう 1.44Mb以外のサイズ にコンパイルし直す必要はありません。
dd if=/dev/fd0 of=root.image bs=1k count=360'rawrite'をする前に作っておいて下さい。ループバックファイルシステムを使っ たのならこの操作は不必要です。
もし "root disk mount failing on device 03c0 "(03c0でルートディスクのマウントに失敗しました。)とメッセージが出たら 16進 コードエディターでブートイメージの中の始めの方に有る C003hを捜し、8003hに 替えて下さい。(c003hはインテル式の記述では 03c0となります。) これは多くのバージョンで動きます。けれども別のバージョンではどのアドレスに相 当するか定かではありません。 jose@cnct.com さんの報告によれば 0.0.62のブートイメージでは 0adfと0adeとの事で した。
まず 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の所は キロバイト単位を入れて下さい。
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を区画の番号に変えます。最後の2つの数値は区画の番号を16進表記したマイ ナー番号です。 -例- hdb3のマイナー番号は 67、これは16進表記では43です。ですから ROOT_DEV の数値は 0x343となります。
新しいカーネルフロッピーディスクを作る為に Type
make disk と入力して下さいそしてこの新しいブートディスクで 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
floppy { device /dev/fd0 threeinch }
> 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さんは次のバージョンでシングルディスクで動くように作業していま す。