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
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.
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.
Not yet. You need to use a standard Linux machine, download the
sources, and cross-compile to generate the 8086 target code.
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
At ftp://linux.mit.edu/pub/ELKS
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.
Edit /usr/include/sys/vm86.h, and change
#include <linux/vm86.h>
to #include <asm/vm86.h>
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.
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
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')
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!
- Can I start ELKS from DOS, like LOADLIN.EXE does for Linux?
- My palmtop has a RAMdrive. Can ELKS access it?
(When ELKS gets an msdos filesystem, that is)
- Can I combine the boot and root floppies?
Brian Candler /
last updated 21 August 1996