All Projects → apexrtos → apex

apexrtos / apex

Licence: other
Apex RTOS - A (somewhat) Linux compatible real time operating system

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to apex

Distortos
object-oriented C++ RTOS for microcontrollers
Stars: ✭ 354 (+2260%)
Mutual labels:  real-time, embedded, operating-system, rtos
Helios
The free embedded operating system.
Stars: ✭ 223 (+1386.67%)
Mutual labels:  embedded, operating-system, rtos
phoenix-rtos-kernel
Phoenix-RTOS microkernel repository
Stars: ✭ 77 (+413.33%)
Mutual labels:  real-time, operating-system, rtos
dtask
DTask is a scheduler for statically dependent tasks.
Stars: ✭ 17 (+13.33%)
Mutual labels:  real-time, embedded, rtos
rnk
rnk is a RTOS targeting ARM architecture.
Stars: ✭ 22 (+46.67%)
Mutual labels:  real-time, operating-system, rtos
Incubator Nuttx Apps
Apache NuttX Apps is a collection of tools, shells, network utilities, libraries, interpreters and can be used with the NuttX RTOS
Stars: ✭ 65 (+333.33%)
Mutual labels:  real-time, embedded, rtos
Drone Core
The core crate for Drone, an Embedded Operating System.
Stars: ✭ 263 (+1653.33%)
Mutual labels:  real-time, embedded, rtos
Zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
Stars: ✭ 5,335 (+35466.67%)
Mutual labels:  real-time, embedded, rtos
Incubator Nuttx
Apache NuttX is a mature, real-time embedded operating system (RTOS)
Stars: ✭ 591 (+3840%)
Mutual labels:  real-time, embedded, rtos
Cocoos
A cooperative operating system based on coroutines
Stars: ✭ 50 (+233.33%)
Mutual labels:  real-time, embedded, rtos
Drone
CLI utility for Drone, an Embedded Operating System.
Stars: ✭ 114 (+660%)
Mutual labels:  real-time, embedded, rtos
dandelion
🌀 Microkernel Real-Time Operating System in Rust
Stars: ✭ 20 (+33.33%)
Mutual labels:  operating-system, rtos
DemOS
Free, simple, extremely lightweight, stackless, cooperative, co-routine system (OS) for microcontrollers
Stars: ✭ 18 (+20%)
Mutual labels:  operating-system, rtos
fos
Interesting project,the Fast Real Time Operating Systems( FOS-RTOS)
Stars: ✭ 22 (+46.67%)
Mutual labels:  real-time, rtos
Embedded UKF Library
A compact Unscented Kalman Filter (UKF) library for Teensy4/Arduino system (or any real time embedded system in general)
Stars: ✭ 31 (+106.67%)
Mutual labels:  real-time, embedded
MoonOS
MoonOS (just a kernel atm) is a micro kernel designed for the x86_64 and arm architecure.
Stars: ✭ 82 (+446.67%)
Mutual labels:  operating-system, operating-system-kernel
xinu-avr
the Xinu OS for AVR atmega328p devices (e.g. Arduino)
Stars: ✭ 18 (+20%)
Mutual labels:  operating-system, rtos
wymlp
tiny fast portable real-time deep neural network for regression and classification within 50 LOC.
Stars: ✭ 36 (+140%)
Mutual labels:  real-time, embedded
zambesii
Non-unix, custom-API hybrid OS kernel written in C++ which can be thought of as an emulated microkernel. The native API is almost fully asynchronous and the kernel is aimed at high-scaling, high-throughput-requiring multiprocessor workloads, with working support for SMP and NUMA already implemented. Join the IRC channel, #zbz-dev on freenode!
Stars: ✭ 13 (-13.33%)
Mutual labels:  operating-system, operating-system-kernel
FreeRTOS-rust
Rust crate for FreeRTOS
Stars: ✭ 159 (+960%)
Mutual labels:  embedded, rtos

Apex

Apex is a real time operating system designed for use in small to medium scale embedded systems. It implements a subset of the Linux syscall interface and uses the musl C library.

This project initially borrowed heavily from the Prex project, but ended up largely rewritten.

Apex aims to be small, efficient and easy to understand. The main architectural difference from Prex is that Apex is a monolithic rather than a microkernel system.

Apex is under heavy development and should not be considered stable at this time. Contributions, suggestions, comments and general feedback are welcome.

Motivation

There are many RTOSes targeted at small microcontrollers with limited resources. These generally require a programmer to gain detailed knowledge of their libraries and interfaces in order to target them effectively. Often the resultant project is heavily dependent on the chosen RTOS. This can make it difficult to migrate an application to a new environment.

For large embedded systems there is Linux.

Apex tries to fit in between the two extremes, targeting systems where Linux is too large and excluding very small microcontrollers.

Generally, systems with 1MiB of ROM & RAM are enough for the Apex kernel and a rich set of userspace tools. Smaller systems can be targeted but will require more careful optimisation.

The project has the following goals:

  • Open source & royalty free.
  • Secure & reliable.
  • Small & efficient.
  • Easy to understand.
  • Binary compatibility with Linux (using musl libc).

Providing a Linux compatible environment has a number of benefits:

  • Development effort can be focused entirely on the kernel as userspace tools & libraries are provided by external projects.
  • The userspace environment is familiar to Linux developers.
  • Toolchains for Linux development are readily available & simple to obtain.
  • Applications can be developed & tested under Linux using advanced debugging tools (such as valgrind).

A (very) rough comparison of scale for a complete system:

Property Traditional RTOS Apex Linux
Code size (kernel & userspace) < 0.5MiB >= 0.5MiB >= 4MiB
Memory size < 0.5MiB >= 0.5MiB >= 4MiB
Architecture support >= 8-bit 32-bit(*) runs on anything
(*) 64-bit will be supported in the future.

Community

Discussion about Apex takes place on the mailing list at dev.apexrtos.com. You will need to subscribe in order to send messages to the list. Please address all mailing list email to [email protected].

Architecture Support

Architecture Status
aarch64 (ARMv8-A) Future
arm (ARMv7-A) Future
arm (ARMv7-R) Future
arm (ARMv7-M) Complete
arm (ARMv8-A) Future
arm (ARMv8-R) Future
arm (ARMv8-M) Future
i386 Future
m68k Future
microblaze Future
mips Future
mips64 Future
mipsn32 Future
or1k Future
powerpc (Classic) Future
powerpc (Book E) On Hold
powerpc64 Future
riscv32 Complete
riscv64 Future
s390x Future
sh Future
x32 Future
x86_64 Future

Board Support

Physical

Vendor Board CPU (Architecture) Status
nxp imxrt1050-evkb Cortex-M7 (ARMv7-M) Complete
nxp mimxrt1060-evk Cortex-M7 (ARMv7-M) Complete

Virtual (QEMU)

Architecture Board CPU (Architecture) Status
arm mps2-an385 Cortex-M3 (ARMv7-M) Complete
arm mps2-an500 Cortex-M7 (ARMv7E-M) Complete
arm virt Cortex-A15 (ARMv7-A) Future
aarch64 virt Cortex-A53 (ARMv8-A) Future
powerpc ppce500 e500v2 (PowerPC Book E) On Hold
riscv32 virt rv32 (RV32IMAFDCSU) Complete

Toolchain

Apex requires the excellent musl libc to build. By far the easiest way to get a musl libc toolchain is by using musl-cross-make.

An example config.mak for armv7-m:

TARGET = armv7m-linux-musleabi
GCC_CONFIG += --with-arch=armv7-m
GCC_CONFIG += --enable-languages=c,c++
GCC_CONFIG += --disable-libquadmath --disable-decimal-float
GCC_CONFIG += --enable-default-pie
GCC_CONFIG += --enable-cxx-flags="-ffunction-sections"
MUSL_CONFIG += --enable-debug
COMMON_CONFIG += CFLAGS="-g0 -Os" CXXFLAGS="-g0 -Os" LDFLAGS="-s"
COMMON_CONFIG += --disable-nls
COMMON_CONFIG += --with-debug-prefix-map=\$(CURDIR)=

Quick Start Guide

Assuming you have a toolchain (and qemu-system-arm) in your path the following sequence of commands should build a working system which boots to a shell:

$ git clone https://github.com/apexrtos/apex-examples.git
$ git -C apex-examples submodule update --init
$ mkdir build && cd build
$ ../apex-examples/configure --project=shell/config --machine=qemu/arm/mps2-an385
$ make run

Note that qemu-system-arm >= v3.0.0 is recommended as it contains an important bug fix for the emulated UART on the MPS2-AN385 board used in this example.

Structure

Apex is split into multiple repositories:

https://github.com/apexrtos
├── apex                        operating system kernel & boot loader
├── apex-examples               example projects
└── apex-tests                  test harnesses & projects

The top level of the Apex sources can be summarised as:

apex
├── boot                        Apex boot loader
├── cpu                         CPU specific configuration & sources
├── libc                        C libary (for bootloader & kernel)
├── libc++                      C++ library (for bootloader & kernel)
├── machine                     machine/board support files
├── mk                          build system
└── sys                         Apex kernel
    ├── arch                    architecture support
    ├── dev                     device drivers
    ├── fs                      file systems
    ├── kern                    kernel core
    ├── mem                     memory management
    └── sync                    synchronisation primitives

Configuration & Build System

The Apex build is controlled by a set of configuration files which describe the project, machine and CPU to build for. These files can be located in the Apex repository or in a project specific repository and can be freely mixed & matched.

In Apex we use the following terms:

Term Meaning
Project Userspace applications, init scripts, boot configuration, custom drivers, optional machine and/or CPU configuration.
Machine Board details, memory layout, minimal set of drivers, optional CPU configuration.
CPU CPU architecture & features.

Based on these configuration files the configure script generates a set of files (under conf/) in the build directory which describe the kernel and userspace configuration, and the files to build.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].