In a previous post I gave an update on the development status of ELK, the Embedded Little Kernel. ELK allows you to use the ELLCC tool chain to target bare metal environments. ELK is currently under development, but is available and becoming quite usable for the ARM.
ELK can be configured with a range of functionality, from a very simple “hello world” environment where you take control of everything, to a full MMU enabled virtual memory based system. In all cases, ELK uses the musl C standard library compiled for Linux so ELK can provide a very POSIX-like environment in the bare metal work (i.e. kernel space).
An example of elk in action can be found in the ELLCC source repository in the ELK example directory. You can configure the example to build four configurations:
- Running from flash with no MMU.
- Running from flash with virtual memory enabled.
- Running from RAM with no MMU.
- Running from RAM with MMU enabled.
The full ELK source code can be found here. Functionality currently supported by ELK:
- Threading using pthread_create(). Many other thread synchronization functions are available, like POSIX mutexes and semaphores.
- Virtual file system support, with a RAM, device, and fifo (pipe) file system supported currently.
- A simple command processor for debugging and system testing.
ELK works by trapping and emulating Linux system calls. The current state of system call support is available on the system call status page.