This chapter will help you get a general understanding of what the OS is capable of and how it works. Before writing software for the OS, it is suggested that you read through this chapter.
Background
The Operating System was initially written as part of a hobby project, aimed at being a lightweight yet featured, POSIX compatible system for use in a small microcontroller systems. In addition to providing processes (multitasking) it also supplies the application programmer with ready to use *NIX-style drivers and a fully working Virtual File System (VFS) allowing desktop-like programming workflow for microcontroller systems.
User programs are built separately from the kernel easing development workflow and project management, as well as making it easy to use a single OS for multiple systems. These programs are stored in an external file system and loaded at runtime when needed. Just like with regular computers, functionality is changed by modifying these individual pieces instead of re-installing the entire operating system.
Key Features
- Preemptive multitasking with three priority levels and an idle process
- Dynamic loading of executables
- Proper separation of kernel- and userspace using syscalls
- Memory protection using the MPU hardware present in Cortex-M/R based microcontrollers
- Crash recovery for user programs
- Signals that are similar to their Linux counterparts
- External memory support
- Virtual File System (VFS)
- FATFS as filesystem backend
- Pipes and IO-redirection
- Network sockets
- Drivers exposed to user code through the /dev virtual file system
- Frame buffer console
- Drivers for various devices such as LCDs, Audio DACs and temperature sensors
- A collection of simplified core utilities
- Kernel filesystem exposing internal data in an easy to use file tree