Skip to content

A Linux-like real-time operating system for Robotics and the Internet of Things (IoT)

License

Notifications You must be signed in to change notification settings

tenok-rtos/tenok

Repository files navigation

Tenok

The Tenok project is a real-time operating system (RTOS) designed for robotic applications and the Internet of Things (IoT). The name originated from the language of an indigenous tribe called Amis in Taiwan, where "tenok" means "kernel" in their language. It resembles various designs from Linux and maintains a small code footprint for ARM Cortex-M processors. In contrast to NuttX, Tenok does not implement a set of low-level hardware drivers as a part of the system. Instead, it adopts an approach similar to FreeRTOS by treating the RTOS as a third-party library. Users can choose their preferred library for the hardware abstraction layer (HAL).

Tenok also integrates the MAVLink communication protocol and provides several utilities for robotics, including a debug visualization tool and a facility tool for supporting software-in-the-loop simulation with the Gazebo simulator.

Key Features

  • POSIX compliant RTOS
  • Linux-like designs: Wait queue, kthread, tasklet, kfifo, printk, and more
  • Task and Thread (Task resembles UNIX process as a group of threads)
  • Synchronization: Mutex (supports priority inheritance), Semaphore, and Spinlock
  • Inter-Process Communication (IPC): FIFO (Named pipe), Message Queue, and Signals
  • Kernel-space memory allocation: Buddy system and Slab allocator
  • User-space memory allocation: Dynamic allocation (First-Fit Free List) and Memory pool
  • Software timer and clock
  • Built-in Shell with command completion and history saving
  • Root and ROM file systems
  • Real-time plotting and customizable debug messaging with a metalanguage
  • Integrated with MAVLink communication protocol
  • Software-in-the-loop (SIL) simulation with the Gazebo simulator

Tools

  • mkromfs: Import files to the firmware binary with Tenok's romfs format
  • msggen: Convert user-defined metalanguage messages into C codes and YAML files
  • rtplot: For on-board data real-time plotting, where the message definitions are loaded from the auto-generated YAML files
  • gazebo_bridge: Message forwarding between Tenok (serial) and Gazebo simulator (TCP/IP)

Benchmarking

Tenok currently supports Dhrystone and CoreMark for basic benchmarking. Please refer to benchmarks.mk for details.

Getting Started

Resources

License

Tenok is released under the BSD 2-Clause License. For detailed information please read the LICENSE.

Related Projects

Tenok is heavily influenced by the following projects during its development:

  1. rtenv / rtenv+
  2. mini-arm-os
  3. Piko/RT
  4. linenoise