Skip to content

Eplankton/mos-rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Note

This project is currently under actively developing and improving, some APIs and interfaces may change as the design continues to mature.

About ๐Ÿš€

  • MOS is a Real-Time Operating System (RTOS) project built in C++/Rust, which consists of a preemptive kernel and a command-line shell with other applications (e.g., GuiLite and FatFS).

  • Renode is a virtual development tool created by Antmicro for multi-node embedded networks (both wired and wireless) and is intended to enable a scalable workflow for creating effective, tested and secure IoT systems.

Repository ๐ŸŒ

  • mos-rust - A "Vibe Coding" Chimera, check here.

  • mos-core - The Kernel and the Shell, check here.

  • mos-stm32 - Running on STM32 series, check here.

  • mos-renode - Test on Renode emulation, check here.

Boot Up โšก

Milestone ๐Ÿงพ

๐Ÿ“ฆ v0.5

โœ… Done๏ผš

  • [Experimental] Port to ESP32-C6(RISC-V), Add BLE support
  • [Experimental] Rewrite it in Rust

๐Ÿ“ฆ v0.4

โœ… Done๏ผš

  • Add Hardware FPU support
  • CMake Tools are now available for compiling the project
  • Add external library ETL, a C++ template library for embedded applications
  • Add Renode emulation platform, add stable support for Cortex-M series
  • [Experimental] Add scheduler lock Scheduler::suspend()
  • [Experimental] Add Asynchronous stackless coroutines Async::{Executor, Future_t, co_await/yield/return}

๐Ÿ“Œ Planned:

  • Shift from FatFS to LittleFS

๐Ÿ“ฆ v0.3

โœ… Done:

  • Mapping Tids to BitMap_t
  • Message queue IPC::MsgQueue_t
  • Task::create allows generic function signatures as void fn(auto argv) with type checker
  • Add ESP32-C3 as a WiFi component
  • Add Driver::Device::SD_t, SD card driver, porting FatFs file system
  • Add Shell::usr_cmds for user-registered commands
  • [Experimental] Atomic types <stdatomic.h>
  • [Experimental] Utils::IrqGuard_t, nested interrupt critical sections
  • [Experimental] Simple formal verification of Scheduler + Mutex

๐Ÿ“Œ Planned:

  • Inter-Process Communication: pipes/channels
  • FPU hardware float support
  • Performance benchmarking
  • Error handling with Result<T, E>, Option<T>
  • DMA_t DMA Driver
  • Software/hardware timers Timer
  • [Experimental] Adding POSIX support
  • [Experimental] More real-time scheduling algorithms

๐Ÿ“ฆ v0.2

โœ… Done:

  • Synchronization primitives Sync::{Sema_t, Lock_t, Mutex_t<T>, CondVar_t, Barrier_t}
  • Scheduler::Policy::PreemptPri with RoundRobin scheduling for same priority levels
  • Task::terminate implicitly called upon task exit to reclaim resources
  • Simple command-line interaction Shell::{Command, CmdCall, launch}
  • HAL::STM32F4xx::SPI_t and Driver::Device::ST7735S_t, porting the GuiLite graphics library
  • Blocking delay with Kernel::Global::os_ticks and Task::delay
  • Refactored project organization into {kernel, arch, drivers}
  • Support for GCC compilation, compatible with STM32Cube HAL
  • Real-time calendar HAL::STM32F4xx::RTC_t, CmdCall::date_cmd, App::Calendar
  • idle uses Kernel::Global::zombie_list to reclaim inactive pages
  • Three basic page allocation policies Page_t::Policy::{POOL, DYNAMIC, STATIC}

๐Ÿ“ฆ v0.1

โœ… Done:

  • Basic data structures, scheduler, and task control, memory management

๐Ÿ“Œ Planned:

  • Timers, round-robin scheduling
  • Inter-Process Communication (IPC), pipes, message queues
  • Process synchronization (Sync), semaphores, mutexes
  • Design a simple Shell
  • Variable page sizes, memory allocator
  • SPI driver, porting GuiLite/LVGL graphics libraries
  • Porting to other boards/arch, e.g., ESP32-C3 (RISC-V)

References ๐Ÿ›ธ


๐Ÿ–– Live Long and Prosper.

About

A "Vibe Coding" Chimera of MOS ๐Ÿค”

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages