ChocoOS - OS for Embedded

OpenSource Project of Operating System for embedded architectures.

Similar projects worth following
Our team is working on open source project:

It is a simple operating system designed for embedded architectures. The project is written in C, but the Tools supporting it in the development site are implemented in Qt (C++). The main purpose of the project is to systematize, facilitate and accelerate
development of the embedded projects. We hope, that someday realisation of even most complicated projects will be possible at the short time. The project is free, and will be free. It is hobby only. For more informations please look at the link.

We are looking for people willing to cooperate - this applies to all levels of knowledge - the advanced will help us by their experience, and thanks to the people, that are starting their story of programming we will know what in our system is not clear or difficult to understand.
  • Review invitation - DataPackage

    chocoos.cooperation09/15/2017 at 16:57 0 comments

    As we want to improve our quality of the code, I have a pleasure to invite all willing to review of the simple pull request. A goal of the pull request is to implement simple helper library responsible for managing data in the buffer. Please fill free to leave your comments:  

  • ELF and CBIN floating programs will be available in the next release!

    chocoos.cooperation07/20/2017 at 09:19 0 comments

    It is pleasure to announce, that in the next release (V. the system will handle ELF and CBIN files. Thanks to that it will be possible to build and run programs that are not compiled with the system - for example by placing them in SD card or samba share. 

    Here some hello world example:

  • TouchScreen (ft5336) handling in the ChocoOS!

    chocoos.cooperation05/06/2017 at 23:01 0 comments

    We are still hard working on new version of the system. It will introduce many feautres we hope you enjoy. One of them will be support of the input event drivers such as TouchScreen. As example of usage we present simple program "paint" implemented by using new ICtrl interface

  • V. - Daskylion

    chocoos.cooperation03/01/2017 at 21:06 0 comments

    Download Here!

    Version Description:

    First release with support of STM32F4 family, network (Ethernet), system debug logs, and much more!


    • Support for Ethernet according to standard IEEE_802.3
    • New network driver type
    • Netif object – sublayer of the network layer in the OSI model
    • NetifMan module – it handles netif objects and IP layer in the OSI model
    • Implementation of UDP, TCP, ARP, ICMP, DHCP protocols
    • Support for Telnet protocol (logging to chell is possible via UART and Telnet)
    • ping – program for sending echo request
    • Possibility of limitation of memory allocations for the selected allocator
    • New program getlogs that prints logs at the screen in simple way (like getallocs and geterrors)
    • New option -v (verbose) option to getallocs to provide possibility of printing full list of allocations
    • New option –real to the geterrors program – it allows for printing logs in real time
    • New option –real to the getlogs program – it allows for printing logs in real time
    • Inverting printing logs by getlogs – now logs are arranged from the oldest to the newest
    • Timestamp and function name to debuglogs
    • RevertAction feature in threads
    • Possibility of calling custom function when the thread is finished
    • Closing process when main thread is finished
    • New user program – it allows for adding/removing user and changing it’s password
    • ModuleMan module for managing system modules
    • Function name and line number is available in Errors Stack
    • External and DMA RAM heaps is available in memory manager
    • In case of error Thread list might be auto repair
    • Support of the STM32F4 family
    • FlashFs – file system for placing files from the developer PC to the target machine during compilation
    • Cat program – command for printing content of a file
    • Chell – the shell to control the OS
    • Machine independent code thanks to drivers, and LLD
    • ChocoOS RTOS kernel
    • Programs like on PCs
    • User-friendly ‘linked-list’ library
    • Users and login system
    • Safe C objects development library with expanded pointer verification
    • Library for pointer verifications, that allows to check if the pointer is in RAM or ROM section, to check if pointer was dynamically allocated, is in heap, or stack, and much more
    • Time measurement from the start of the system (timestamps)
    • Configuration of drivers can be independent of the target machine
    • Expanded Memory Manager for dynamic memory allocations (malloc,free,etc)
    • Full control of the memory – you can check where the memory was allocated
    • Smart-allocations system helps to save memory
    • A lot of task-synchronization methods, such as: Semaphores,Mutexes,Events,Signals,Queues, and Critical-Sections
    • Memory can be allocated for the current process, so when the process will be killed, it will be released. It helps in memory leaks problem
    • Stack, and heap verification functions – checking for buffers overflow, memory exhausted, memory leaks
    • Function for repairing damaged heap
    • Auto-Detecting stack size mechanism
    • Simple stack-control, and close the program, when the stack is not correct
    • Program template generated by a script
    • and much more!

    Targets supported:

    • lm4f120h5qr
    • stm32f429zit6u
    • stm32f746ngh6


    • chell – simple shell
    • cat – prints files content
    • cpu_info – shows CPU informations
    • echo – just echo the message like in unix
    • fmc_test program for performing test of FMC driver
    • getallocs – prints current memory allocations
    • geterrors – prints system errors
    • getlogs – prints system logs
    • gpio_test – performs test of GPIO or PINs module
    • http_server simple test HTTP server
    • ifconfig shows network interface configuration
    • kill – kills a process according to name or ID
    • lcdtft_test – performs simple tests of LCDTFT
    • led – configures and controls LED
    • littlenes – simple little NES emulator
    • ls – prints list of files and directories at the given path
    • memory – TGUI program for controlling memory
    • mkdir – creates a directory
    • ping – performs ping protocol
    • printf – prints formatted a message given as argument
    • ps – prints currently runned threads
    • reboot – restarts the system
    • spi_lld_test – performs tests of the SPI LLD
    • system – TGUI program for controlling and configuring...
    Read more »

  • New version is coming!

    chocoos.cooperation02/22/2017 at 16:44 0 comments

    The new version (V. of the ChocoOS will be available this month! It will include support of new architecture, new modules, ways of communication and more! We can't wait to share it with you!

View all 5 project logs

  • 1
    Step 1

    Get the latest version of the system here:

  • 2
    Step 2

    Enter to the Source directory and choose architecture by using select_arch script (for windows it is select_arch.bat and for linux)

    Important for linux environmental:

    Note, that in linux you have to load the script instead of execution by using 'dot' (source) command:

    . ./ stm32f746ngh6

    In linux it is also possible to use `` script instead of loading by ``. Just run ./ and you will see:

    Now you see a simple shell for controlling board (type `help` for list of available commands)

  • 3
    Step 3

    Run the build.bat (or script to compile the project

View all 5 instructions

Enjoy this project?



Gravis wrote 07/20/2017 at 14:47 point

You need an implementation of libc (try porting MUSL?) and at least partial POSIX support.  Without these, you are going to be fighting an uphill battle just to get people to try ChocoOS.

  Are you sure? yes | no

chocoos.cooperation wrote 07/20/2017 at 22:22 point

Thanks for your opinion! We already have partial support of POSIX :) And we still add new interface functions. And you know.. We even not try to find users for now. We do not earn money on it, and we don't have enough time to take the responsibility for professional user support. We want to develop it slowly, but reliable and exactly according our plan and view. ChocoOS is not the next unix OS. It is something more - it is our point of view for programming. We avoids using someone else's libraries - you can think it is wrong or not, but for us it is important. Thanks to that we know each part of the system, and it is all integrated with itself. And also thanks to that, we are not limited by used libraries. Simple example - does standard printf function check if pointers given by the user are correct? Usually it only checks if pointer is not NULL. It is not enough. It can store random data as well... Our implementation verifies the pointer address - checks if it is in ROM/RAM or SDRAM. We've also developed 'printf' with features such as '%R' - the quick way to print the error string, '%t' for printing time, etc. I believe that one day, when the system is ready you will appreciate these features :) 

  Are you sure? yes | no

Gravis wrote 07/21/2017 at 03:26 point

"We avoids using someone else's libraries"

I get it... but it sure sounds like NIH syndrome.

  Are you sure? yes | no

chocoos.cooperation wrote 07/21/2017 at 10:07 point

You know, we all work as programmers in huge corporations. We have to use libraries for all the time - and it is normal and of course it is needed, when you have to provide the product on time. Using libraries also gives you an opportunity to share the responsibility for the final product, but ... It gives us a lot of fun, when all lines are ours, and we don't have to learn someone else's coding style, and libraries. In our system everything has been written in the same way, so switching between the modules is not a problem. Even if the module has not been written by you, you can see it as yours. This is one of the reasons why we like our system. Without this assumption it will be just another project that consist of million of glued subprojects and it will not give us so much fun as now - it would be only a craft instead of hobby :) 

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates