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/srcThe 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 installNext, 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/fd0You 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 /aAlternatively, 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=360This 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.oNote 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.