Zeke is a portable operating system mostly targetted for ARM processors.[1] Zero Kernel, as it was originally known, is a tiny kernel implementation that was originally targeted for ARM Corex-M microcontrollers. The reason to start this project was that most of RTOSes available at the time for M0 feeled less or more bloated for very simple applications. Secondly I found architectures based on ARMv6-M to be quite challenging and interesting platforms for RTOS/kernel development, especially when ARMv6-M is compared to ARMv7-M used in M4 core or any Cortex-A cores using real ARM architectures.
One of the original goals of Zero Kernel was to make it CMSIS-RTOS compliant where possible, as some concepts of Zeke were not actually CMSIS compliant from the begining. However the scope of the project shifted pretty early and the kernel is no longer CMSIS compatible at any level. Currently Zeke is moving towards POSIX-like system and its user space is taking a Unix-like shape. Nowadays Zeke is a bit bloatty when compared to the original standard of a bloated OS but I claim Zeke is still quite tightly integrated system, compared to any other Unix-like OS implementation.
Figure [figure:zeke] illustrates architectural layers of the operating system. Scope of Zeke project is to implement a portable Unix-like[2] operating system from scratch[3] that is optimized for ARM architectures and is free of legacy.
In addition to portability another long standing goal has been configurability and adjustable footprint of the kernel binary as well as the whole OS image. This is achieved by modular kernel architecture and static compile time configuration. Like for example HAL selection is already almost fully locked at compilation time.
Zeke includes a partially BSD compatible C standard library.
There is a coding_standards.markdown
file that you should read before
contributing. That document describes the guidelines for development and
contribution as well as gives some information about calling conventions and
initialization of kernel subsystems.
Man pages
This directory also contains some auto generated as well as manually written
man pages under man
and sman
directories. To build the man pages, run
make doc-man
in the root directory. After that it's possible to read the
man pages using ./zman <name>
in this directory.
Term | Description |
---|---|
POSIX | Portable Operating System Interface for uniX is a family of standards specifying a standard set of features for compatibility between operating systems. |
HAL | Hardware Abstraction Layer. |
inode | inode is the file index node in Unix-style file systems that is used to represent a file fie system object. |
LFN | Long File Name. |
MBR | Master Boot Record. |
ramfs | RAM file system. |
SFN | Short File Name. |
VFS | Virtual File System. |
vnode | vnode is like an inode but it's used as an abstraction level for compatibility between different file systems in Zeke. Particularly it's used at VFS level. |
bio | IO Buffer Cache. |
dynmem | (dynamic memory) is the block memory allocator system in Zeke, allocating in 1 MB blocks. |
VRAlloc | or [vralloc] Virtual Region Allocator. |
MIB | Management Information Base tree. |
IPC | Inter-Process Communication. |
shmem | Shared Memory. |
RCU | Read-Copy-Update. |
ELF | Executable and Linkable or Extensible Linking Format. |
PUnit | a portable unit testing framework for C. |
GCC | GNU Compiler Collection. |
GLIBC | The GNU C Library. |
CPU | Central Processing Unit is, generally speaking, the main processor of some computer or embedded system. |
DMA | Direct Memory Access is a feature that allows hardware subsystems to commit memory transactions without CPU's intervention. |
PC | Program Counter register. |
- Zeke is portable to at least in a sense of portability between different ARM cores and architectures.
- The project is aiming to implement the core set of kernel features specified in POSIX standard.
- At least almost from scratch, some functionality is derived from BSD kernels as well as some libraries are taken from other sources.