The Embeddable Linux Kernel Subset
Creating A Linux Option for
- Palmtop Computers
- Very old PC's
- Single board microcomputers
- Embedded controller systems
- Other older computers
The current ELKS development image needs about 120K of RAM, and a full
running system should require 256K-512K for a full system.
ELKS is a project to build a small kernel subset Linux that can run
on small machines with limited processor and memory resources. The initial
proposed targets are the intel 8086 and maybe the zilog Z80. [Yes Z80 should
be possible - probably needing paged memory. Dave Braun's UZI
is proof it can be done].
The first question people ask (other than is this for real) is why?
Several reasons actually:
- An 8/16bit processor kernel is badly needed. There are really no other
options except Minix (research & educational use only). A kernel that
can run on this kind of hardware is useful for embedded systems projects
and for third world deployment where 80x86 x>0 machines are not easily
- A Linux kernel small enough to run on such systems ought to be understandable
by one person, and because it is a subset also useful learning material
to then look at the full kernel.
- Various palmtops use an 801C86 or variant embedded processor set. Linux
on the HP palmtops and potentially Psion 3 is a very interesting option.
- Hack Value. I for one would dearly love to end up with a backport to
the PDP-11 that was V7 binary compatible.
The processors chosen reflect those the authors have access to. Doing
a 680x0 embeddable kernel capable of running without an MMU would also
be an interesting project, although this would probably rule out swapping
and make the implementation of fork() hard. Minix does this by copying
which is messy but works. 683xx and MIPS R4xxx embedded processors are
an obvious further target.
The project state so far:
- Key goals have been chosen.
- V7 and as much as possible POSIX compliance
- Minix file system, as this performs best with small buffer cache
- Ability to compile both with its own compiler and standard DOS compilers.
- Capable of running programs from ROM.
- 8086 combined I/D and split I/D (ie 64K or 64K code + 64K data) is
a hard to avoid but acceptable limit.
- Initial drivers will be BIOS drivers and real mode.
- Use a vt52 style console (for size)
- We now have the 'bcc' GPL'd K&R compiler for minix running on Linux.
- A system call library builder has been written. This writes 8086 system
call modules from a descriptor file, and in future will also write the
kernel side tables and potentially the function stubs.
- The C library is near enough complete as is emulation and build environment
- We have curses, ash and other tools built.
- The bootloader is working. It loads split I/D minix binaries+setup
off a floppy disk happily.
- We have task switching/interrupts and a bios console behaving. The
disk driver is now mostly done but has the floppy drive type hard coded.
- The consoles we have include both a bios console and a raw console
that also supports virtual consoles.
We need volunteers to
- Scan archives and build small free applications to match the GNU ones
used in the bigger Linux systems.
- Join in extracting modules from the main Linux kernel, and in rewriting
the 'oversized/overfeatured' bits.
The mailing list is firstname.lastname@example.org and is majordomo managed.
The FTP archive site is linux.mit.edu.
UK.Linux.org index page
Page maintained by: Alan Cox