{"id":13754575,"url":"https://github.com/embox/embox","last_synced_at":"2025-05-14T07:09:23.007Z","repository":{"id":29539154,"uuid":"33078138","full_name":"embox/embox","owner":"embox","description":"Modular and configurable OS for embedded applications","archived":false,"fork":false,"pushed_at":"2025-05-06T20:26:09.000Z","size":50172,"stargazers_count":1376,"open_issues_count":221,"forks_count":300,"subscribers_count":54,"default_branch":"master","last_synced_at":"2025-05-06T21:32:19.257Z","etag":null,"topics":["c","embedded","kernel","mcu","microcontroller","os","posix"],"latest_commit_sha":null,"homepage":"http://embox.github.io","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/embox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-03-29T15:27:48.000Z","updated_at":"2025-05-06T07:51:27.000Z","dependencies_parsed_at":"2024-05-02T17:48:26.076Z","dependency_job_id":"33403c0b-62c3-4212-89a8-e6edf29db22d","html_url":"https://github.com/embox/embox","commit_stats":null,"previous_names":[],"tags_count":67,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embox%2Fembox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embox%2Fembox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embox%2Fembox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embox%2Fembox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/embox","download_url":"https://codeload.github.com/embox/embox/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254092786,"owners_count":22013290,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","embedded","kernel","mcu","microcontroller","os","posix"],"created_at":"2024-08-03T10:00:29.470Z","updated_at":"2025-05-14T07:09:17.996Z","avatar_url":"https://github.com/embox.png","language":"C","readme":"Embox [![Coverity Scan Build Status](https://scan.coverity.com/projects/700/badge.svg)](https://scan.coverity.com/projects/700)\n=====\n\nEmbox is a configurable RTOS designed for resource constrained and embedded systems. Embox's main idea is to use Linux software without Linux.\n\nAchievements\n-------------\n* [VoIP phone on STM32F7Discovery based on PJSIP project](https://github.com/embox/embox/wiki/PJSIP-on-STM32)\n* [Qt on STM32F7Discovery](https://github.com/embox/embox/wiki/Qt-on-STM32)\n* [OpenCV on STM32F769i board](https://github.com/embox/embox/wiki/OpenCV-on-STM32)\n* A lot of programming languages are available: Python, Lisp, Java (phoneme), TCL, Ruby, Lua, JS, Scheme\n* SSHD based on Dropbear project\n* Mesa3d\n* Quake3\n* zeromq, qpid\n* ...\n\nKey features\n---------------\n* POSIX-compliant\n* C++ support\n* File systems: FAT, ext2/3/4, ...\n* TCP/IP: BSD sockets; supported protocols: UDP, HTTP, ARP, NTP, ICMP, ...\n* Cross-platform: ARM, MIPS, x86, RISC-V, Microblaze, SPARC, PowerPC, E2K\n* Popular platforms: STM32, i.MX6, RaPi, ...\n* Provides popular desktop software on MCU (e.g. STM32): Qt, OpenCV, PJSIP, dropbear, ...\n* Unix-like shell utilities: ls, cat, mount, ...\n* Popular programming languages: java, python, lua, tcl, lisp, ruby, js, scheme\n\nContacts\n---------------\nMailing lists:\n* main (english): embox-devel@googlegroups.com\n* russian: embox-ru@googlegroups.com\n\nTelegram chats:\n* main (english): https://t.me/embox_chat_en\n* news:  https://t.me/embox_news\n* russian: https://t.me/embox_chat\n\nDocumentation\n---------------\n* [Wiki](https://github.com/embox/embox/wiki)\n* [PDF](https://github.com/embox/embox-docs/releases)\n* [GitHub repository with source for docs](https://github.com/embox/embox-docs)\n\nGetting started\n---------------\nHere's a quick overview on how to build and run Embox.\n\nRequired environment:\n - `gcc` and `make`\n - cross compiler for the target platform\n\n### Preparing environment\nFor Debian-based systems (most packages are installed out of box though):\n```\n$ sudo apt-get install build-essential gcc-multilib curl libmpc-dev python\n```\n\nFor Arch Linux:\n```\n$ sudo pacman -S make gcc-multilib cpio qemu\n$ yay -S python2-bin\n```\n\nFor Fedora Linux:\n```\n$ sudo dnf install make gcc cpio qemu patch curl python\n```\n\nFor MAC OS X (requires [Homebrew](https://brew.sh/) installed):\n```\n$ brew install i686-elf-binutils i686-elf-gcc awk cpio qemu python\n```\n\nFor any system with Docker (more info on wiki [Emdocker](https://github.com/embox/embox/wiki/Emdocker)):\n```\n$ ./scripts/docker/docker_start.sh\n$ . ./scripts/docker/docker_rc.sh\n```\n\n### Building Embox\nFirst of all:\n```\n$ git clone https://github.com/embox/embox.git embox\n$ cd embox\n```\nSince Embox is highly configurable project, it is necessary to specify modules to be built and params for them. To build the OS `make` command is used.\nAll commands described below are called from the `embox` directory, which includes `src/`, `templates/`, ...\n\n#### Configuring the project\nFor configuring it is necessary to specify parameters and modules supposed to be included into the system. There are two ways to set up a current config:\n\n* `make confload-\u003ctemplate\u003e -` build artefacts generated in a fixed place\n* `./confset \u003ctemplate\u003e -` build artefacts maintained in project dependent working paths\n\nWhile `make confload-\u003ctemplate\u003e` is used, files from the template's folder are copied into './conf' folder. You can modify them.\nWhile `confset \u003ctemplate\u003e` is used, files from the template's folder are copied into `./work/\u003ctemplate\u003e/conf` folder and a link './conf' is created to `./work/\u003ctemplate\u003e/conf`. This usage is suited for quick switching between your templates, because full rebuilds are avoided.\nMoreover, working conf-settings are retained as well, when you switch build e.g. between real target and qemu and back again. Only downside of using the confset method: more SSD/HDD usage, dependent on number of parallel projects.\n\nEmbox has several templates prepared, to list them use the following command:\n```\n$ make confload\n```\n\nThe simplest way to load a template is to specify its name in the command:\n\n`$ ./confset \u003ctemplate\u003e`\n\nor\n```\n$ make confload-\u003ctemplate\u003e\n```\n\nFor the quick overview you can use one of `qemu` templates that exist for most architectures, that is, *`x86/qemu`* for x86:\n\n`$ ./confset x86/qemu`  \u0026nbsp; _(yet no autocomplete/-suggest when only a part is typed: to Do)_\n\nor\n```\n$ make confload-x86/qemu\n```\n\n#### Building the image\nAfter configuring the project just run `make` to build:\n```\n$ make\n```\n\n### Running on QEMU\nThe resulting image can now be run on QEMU. The simplest way is to execute `./scripts/qemu/auto_qemu` script:\n```\n$ sudo ./scripts/qemu/auto_qemu\n```\n`sudo` is requried to setup a TUN/TAP device necessary to emulate networking.\n\nAfter the system is loaded, you’ll see the `embox\u003e` prompt, now you are able to run commands.\nFor example, `help` lists all existing commands.\n\nTo test the connection:\n```\nping 10.0.2.16\n```\nIf everything's fine, you can connect to the Embox terminal via `telnet`.\n\nTo exit Qemu type \u003ckbd\u003ectrl + A\u003c/kbd\u003e and \u003ckbd\u003eX\u003c/kbd\u003e after that.\n\n### Debugging\nYou can use the same script with *-s -S -machine accel=tcg* flags for debugging:\n```\n$ sudo ./scripts/qemu/auto_qemu -s -S -machine accel=tcg\n```\nAfter running that QEMU waits for a connection from a gdb-client. Run gdb in the other terminal:\n```\n$ gdb ./build/base/bin/embox\n...\n(gdb) target extended-remote :1234\n(gdb) continue\n```\nThe system starts to load.\n\nAt any moment in gdb terminal you can type \u003ckbd\u003ectrl + C\u003c/kbd\u003e and see the stack of the current thread (`backtrace`) or set breakpoints (`break \u003cfunction name\u003e`, `break \u003cfile name\u003e:\u003cline number\u003e`).\n\n### Other architectures\nEmbox supports the following CPU architectures: x86, ARM, Microblaze, SPARC, PPC, MIPS.\n\nIn order to work with architectures other than x86 you'll need a cross compiler.\nAfter installing the cross compiler just repeat the step above, starting with configuring:\n```\nmake confload-\u003carch\u003e/qemu\nmake\nsudo ./scripts/qemu/auto_qemu\n```\nThe output is quite the same as in the case of the x86 architecture.\n\n#### Networking support\nEmbox supports networking on qemu x86, ARM, MIPS and Microblaze.\n","funding_links":[],"categories":["Операционные системы, программы и игры","OS"],"sub_categories":["Операционные системы","RTOS"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fembox%2Fembox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fembox%2Fembox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fembox%2Fembox/lists"}