This FAQ is maintained by Brian Candler; please send all updates to B.Candler@pobox.com. The latest version of this document is available at http://pobox.com/~b.candler/elks/elks-faq.html. Note that ELKS is in the very early stages of development and this information is likely to become out of date rapidly.
Additional information can be found at the ELKS home page at http://www.uk.linux.org/Linux8086.html.
There is a mailing list. To subscribe, send a message to majordomo@vger.rutgers.edu containing the words subscribe linux-8086 in the body. Archives of the mailing list can be found at http://epocha.pd.mcs.net/Linux8086/
Note that ELKS is not Linux, and the mailing list is not a suitable place for posting questions about Linux (despite its name). These would be better sent to one of the Linux-specific newsgroups such as comp.os.linux.answers
More information on the background, goals and current status of the project can be found at the ELKS home page.
tar -xvzf Dev86-0.0.7.tar.gz -C /usr/src
tar -xvzf elks-0.0.44snap.tar.gz -C /usr/src
The development environment will be created in /usr/src/linux-86, and
the kernel source in /usr/src/linuxmt. Next you have to build the
development tools, which include the bcc compiler:
cd /usr/src/linux-86
make install
Next, if you have got hold of any patches which apply to this version, apply
them to your source directory; then compile the kernel.
# Apply patches (optional)
cd /usr/src/linuxmt
patch -p1 <patchfile # -p1 strips off initial 'linuxmt/' from names
# Build kernel
make dep
make
(If you're used to building Linux kernels with gcc, you'll be amazed at
how quick this is! :-) The result is a floppy disk image called "Image",
which you can copy to a formatted floppy and boot from.
dd if=Image of=/dev/fd0
You should now be able to boot with this disk, but you won't get much
further without a root floppy disk for it to mount. You'll need to use
bcc to compile an 'init' program and make a root minix filesystem.
This is explained further down.
Compile your program like this:
bcc -0 -O -ansi -s init.c -o init
-0 selects 8086 code generation,
-O enables optimisation,
-ansi enables ansi-style function prototypes (only), and
-s strips symbols out of the
binary.
A real version of 'init' is being prepared for inclusion in the tiny-utils package, also on linux.mit.edu.
mkdir /usr/src/root86
cd /usr/src/root86
mkdir dev
cd dev
mknod tty c 4 0
cd ..
mkdir sbin
cd sbin
cp <your-program> init
cd ..
fdformat /dev/fd0H1440 # if floppy not yet formatted
mkfs -t minix /dev/fd0 1440
mount -t minix /dev/fd0 /a # need a mount point "/a"
cp -pR /usr/src/root86/* /a
umount /a
Alternatively, if you have a 2.0.x kernel and mount-2.5k, you can use the
loopback filesystem to create a disk image on your hard disk, and then
dump it to floppy
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
One solution is to fit a 360K drive as the second drive in your Linux PC - you can then format 360K disks with fdformat /dev/fd1d360 and create filesystems as usual.
Otherwise, you will need to create a floppy disk image file, transfer it to the PC which has the 360K drive (e.g. using a serial cable), then use "rawrite" under DOS to recreate the disk from the image file.
However at the moment (version 0.0.44), the type of root disk to expect is hard-coded into the kernel. So before compiling, if you are going to run on a machine which does not have a 1.44MB drive, you need to edit drivers/block/doshd.c, search for "hack hack" and change the floppy geometry parameters. This should be fixed soon.
dd if=/dev/fd0 of=root.image bs=1k count=360
This image can then be transferred to the target and written out using
'rawrite' as before. If you use the loopback filesystem this step is
not necessary.
cd /usr/src/linux-86/elksemu
make module
insmod binfmt_elks.o
Note that you will need to rerun the 'insmod' each time you reboot. There
are some sample bcc programs you can try in /usr/src/linux-86/tests
(such as a version of 'wc')
If when making the module you get an error saying "modversions.h: no such file or directory" then you need to edit the Makefile to remove the reference to this file, i.e.:
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 YedidyaThere are reports this broke under the latest ELKS versions (>0.0.46?) Note - will this work on <386 machines?> > Today I managed to combine root/boot disks using LILO. It just worked! > > I created /boot on the floppy, copied Image and boot.b to it, > put in /etc (on the floppy) lilo.conf with this : > boot=/dev/fd0 > compact > image=/boot/Image > label=lin16 > did lilo -r /mnt > and Hopla! > I didn't look at the kernel sources yet to compare the boot code of linux > and linux-16, but I guess they act the same, and that's why lilo worked.