ELKS FAQ

This a list of answers to Frequently Asked Questions about ELKS, also known as Linux-8086.

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 Linux-8086 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.

Section 1 - General

Section 2 - Compiling and installing

Section 3 - Using ELKS

Section 4 - Unanswered questions


Section 1 - General

Q1.1. What is ELKS?

ELKS is the Embeddable Linux Kernel Subset, a project to build a small kernel subset Linux that can run on machines with limited processor and memory resources. The initial proposed targets are the Intel 8086 and maybe the Zilog Z80. A kernel that can run on this kind of hardware is useful for embedded systems projects, for third world deployment where 80x86 x>0 machines are not easily available, and for use on various palmtops.

More information on the background, goals and current status of the project can be found at the ELKS home page.

Q1.2. How does ELKS compare with standard Linux?

ELKS is intended as a subset of true Linux, and ought to be small enough to be understood by one person, so it should be invaluable as a learning tool. It is in the very early stages of development, and big chunks are missing, such as working multitasking, swapping, shared libraries, parallel and serial I/O, and networking. Having said that, it is already able to boot, provide virtual consoles, mount a root minix filesystems floppy, and start a small program.

Q1.3. Are there any ready-to-run distributions of ELKS?

Not yet. You need to use a standard Linux machine, download the sources, and cross-compile to generate the 8086 target code.

Q1.4. Can ELKS run on an 8088?

The 8088 is identical to the 8086, except it has an 8-bit external data bus instead of 16-bit (and thus is slower). So yes, ELKS will run on it.

Section 2 - Compiling and Installing

Q2.1. Where can I find the source?

At ftp://linux.mit.edu/pub/ELKS

Q2.2. How do I make an ELKS kernel?

Download dev86/Dev86-0.0.6.tar.gz and kernel/elks-0.0.43snap.tar.gz (or the latest versions) from linux.mit.edu. Unpack them into /usr/src (or any other convenient directory)
    tar -xvzf Dev86-0.0.6.tar.gz -C /usr/src
    tar -xvzf elks-0.0.43snap.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 any patches, apply them to your source directory (there is currently a patch to 0.0.43 on Brian Candler's ELKS page), then compile the kernel.
    cd /usr/src/linuxmt
    patch -p1 <patchfile   # -p1 strips off initial 'linuxmt/' from names
    make dep
    make
(If you're used to building normal 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.

Q2.3. I get an error saying that /usr/include/linux/vm86.h does not exist

Edit /usr/include/sys/vm86.h, and change #include <linux/vm86.h> to #include <asm/vm86.h>

Q2.4. How do I make an 'init' for ELKS?

After the ELKS kernel has booted it will run /sbin/init. Since important things like fork() and signal() are not yet implemented, this program can't be very sophisticated. But you can compile a simple "hello world" program using printf(...) or write(STDOUT_FILENO,...), and it should run.

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.

Q2.5. How do I make a root filesystem disk?

You need to create a minix floppy containing the appropriate bits and pieces. At present you need only two files - /dev/tty (4,0) and /sbin/init, which is your "hello world" program (see above). Don't expect more out of elks for the time being... there's a lot more work to be done.
    mkdir /usr/src/root86
    cd /usr/src/root86
    mkdir dev
    cd dev
    mknod tty c 4 0
    cd ..
    mkdir sbin
    cd sbin
    cp  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/null 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

Section 3 - Using ELKS

Q3.1. Can I run bcc binaries under Linux?

Yes - by loading a kernel module you can run ELKS binaries directly. This makes development of programs to run under ELKS much less painful, since you can test them on your normal Linux system (although they might not work under ELKS, if your program uses a kernel facility which is not yet implemented)
    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')

Q3.2. Can I boot ELKS under DOSEMU?

Yes. ELKS can boot inside dosemu 0.63.1.36 running under Linux 2.0.7, and probably other combinations as well. Make sure your floppy drive is configured in /etc/dosemu.conf, and use the -A flag to dos or xdos if necessary to force a floppy boot.
    floppy { device /dev/fd0 threeinch }  

Section 4 - Unanswered questions

Answers to these questions would be appreciated!


Brian Candler / last updated 21 August 1996