LK (Little Kernel) is a tiny operating system suited for small embedded devices, bootloaders, and other environments where OS primitives like threads, mutexes, and timers are needed, but there’s a desire to keep things small and lightweight. On embedded ARM platforms the core of LK is typically 15-20 KB.
LK is available from https://github.com/littlekernel/lk and is Open Source software, provided under the MIT license.
Who is using LK?
Newer Android phones have some chance of LK running all the time alongside Linux.
A few ARM SoC manufacturers use LK as their default bootloader such as DragonBoard 410c based on Qualcomm Snapdragon 410 processor.
The Fuchsia Operating System’s microkernel, Magenta is based on LK.
NewOS is a open source operating system with an emphasis on design and portability. It is largely implemented in C/C++, with a small amount of assembly. Full source is available.Currently, the system is mostly a kernel with a minimal amount of user space libraries and applications. Thus far, most of the work has been put into the kernel and other underlying support. As a result the system isn’t that interesting from an end-user point of view (no gui, simple commands on a command line), but that can change given a moderate amount of work by the maintainers or any volunteers.
- Explore some areas of modern OS design
- Provide a flexible framework to build other systems out of
- Cross-platform portability
- Provide a clean implementation that can be used as a learning tool for others
- Provide an educational opportunity for developers
- To have fun!
The following is a short list of implemented design features that you’d expect on a modern operating system:
- Strict architecture-independance layer to allow clean porting to multiple cpu architectures
- Fully reentrant kernel
- Protected memory
- Separate user and kernel space, multiple address spaces
- Full locking primitives
- Kernel debugging support with installable debugger commands and remote gdb support
- Modern VM design (demand paging, swapping, memory mapping), with support for full filesystem cache integration
- Dynamically loadable kernel modules: drivers, filesystems, generic modules
- Full virtual filesystem layer, device file system
- Initial support for iso9660, nfs, ext2fs filesystems
- Full user space shared lib support
- Kernel based network stack (full TCP/IP)
- Remote block device
- Basic VESA mode support with generic framebuffer console
- Text-based console
- Shell with scripting support
- POSIX signals
- process groups, session groups
- Network cards: Realtek 8139, AMD PCNet32
- Native FS
- Full IDE/ATAPI stack
- Full libc implementation
- Graphics driver architecture
- Self hosting (requires more POSIX)
- Anything anyone has the time for!
The system currently can be built to run on the follwing systems:
- Intel IA-32 (x86) – Tested on desktops through 4-way servers
- Sega Dreamcast – Hitachi SH-4
- PPC based machines – G3/G4 Macs, Pegasos
Many ports of the system are waiting to happen when we get the time (hardware is purchased, documents have been found, just need to dedicate a few weeks):
- ARM dev board – TI OMAP based dev board
- Sun Blade 100 – UltraSPARC IIe in 64-bit mode
- NeXT B&W slab – Motorola 68040 based
- SGI Indy – MIPS R5000 based Indy in 32- and 64-bit mode
- DEC Multia – Alpha 21064