1.. _introducing_zephyr: 2 3Introduction 4############ 5 6The Zephyr OS is based on a small-footprint kernel designed for use on 7resource-constrained and embedded systems: from simple embedded environmental 8sensors and LED wearables to sophisticated embedded controllers, smart 9watches, and IoT wireless applications. 10 11The Zephyr kernel supports multiple architectures, including: 12 13 - ARCv2 (EM and HS) and ARCv3 (HS6X) 14 - ARMv6-M, ARMv7-M, and ARMv8-M (Cortex-M) 15 - ARMv7-A and ARMv8-A (Cortex-A, 32- and 64-bit) 16 - ARMv7-R, ARMv8-R (Cortex-R, 32- and 64-bit) 17 - Intel x86 (32- and 64-bit) 18 - MIPS (MIPS32 Release 1 specification) 19 - NIOS II Gen 2 20 - RISC-V (32- and 64-bit) 21 - SPARC V8 22 - Tensilica Xtensa 23 24The full list of supported boards based on these architectures can be found :ref:`here <boards>`. 25 26Licensing 27********* 28 29Zephyr is permissively licensed using the `Apache 2.0 license`_ 30(as found in the ``LICENSE`` file in the 31project's `GitHub repo`_). There are some 32imported or reused components of the Zephyr project that use other licensing, 33as described in :ref:`Zephyr_Licensing`. 34 35.. _Apache 2.0 license: 36 https://github.com/zephyrproject-rtos/zephyr/blob/main/LICENSE 37 38.. _GitHub repo: https://github.com/zephyrproject-rtos/zephyr 39 40 41Distinguishing Features 42*********************** 43 44Zephyr offers a large and ever growing number of features including: 45 46**Extensive suite of Kernel services** 47 Zephyr offers a number of familiar services for development: 48 49 * *Multi-threading Services* for cooperative, priority-based, 50 non-preemptive, and preemptive threads with optional round robin 51 time-slicing. Includes POSIX pthreads compatible API support. 52 53 * *Interrupt Services* for compile-time registration of interrupt handlers. 54 55 * *Memory Allocation Services* for dynamic allocation and freeing of 56 fixed-size or variable-size memory blocks. 57 58 * *Inter-thread Synchronization Services* for binary semaphores, 59 counting semaphores, and mutex semaphores. 60 61 * *Inter-thread Data Passing Services* for basic message queues, enhanced 62 message queues, and byte streams. 63 64 * *Power Management Services* such as overarching, application or 65 policy-defined, System Power Management and fine-grained, driver-defined, 66 Device Power Management. 67 68**Multiple Scheduling Algorithms** 69 Zephyr provides a comprehensive set of thread scheduling choices: 70 71 * Cooperative and Preemptive Scheduling 72 * Earliest Deadline First (EDF) 73 * Meta IRQ scheduling implementing "interrupt bottom half" or "tasklet" 74 behavior 75 * Timeslicing: Enables time slicing between preemptible threads of equal 76 priority 77 * Multiple queuing strategies: 78 79 * Simple linked-list ready queue 80 * Red/black tree ready queue 81 * Traditional multi-queue ready queue 82 83.. _zephyr_intro_configurability: 84 85**Highly configurable / Modular for flexibility** 86 Allows an application to incorporate *only* the capabilities it needs as it 87 needs them, and to specify their quantity and size. 88 89**Cross Architecture** 90 Supports a wide variety of :ref:`supported boards<boards>` with different CPU 91 architectures and developer tools. Contributions have added support 92 for an increasing number of SoCs, platforms, and drivers. 93 94**Memory Protection** 95 Implements configurable architecture-specific stack-overflow protection, 96 kernel object and device driver permission tracking, and thread isolation 97 with thread-level memory protection on x86, ARC, and ARM architectures, 98 userspace, and memory domains. 99 100 For platforms without MMU/MPU and memory constrained devices, supports 101 combining application-specific code with a custom kernel to create a 102 monolithic image that gets loaded and executed on a system's hardware. Both 103 the application code and kernel code execute in a single shared address 104 space. 105 106**Compile-time resource definition** 107 Allows system resources to be defined at compile-time, which reduces code 108 size and increases performance for resource-limited systems. 109 110**Optimized Device Driver Model** 111 Provides a consistent device model for configuring the drivers that are part 112 of the platform/system and a consistent model for initializing all the 113 drivers configured into the system and allows the reuse of drivers across 114 platforms that have common devices/IP blocks. 115 116**Devicetree Support** 117 Use of :ref:`devicetree <dt-guide>` to describe hardware. 118 Information from devicetree is used to create the application image. 119 120**Native Networking Stack supporting multiple protocols** 121 Networking support is fully featured and optimized, including LwM2M and BSD 122 sockets compatible support. OpenThread support (on Nordic chipsets) is also 123 provided - a mesh network designed to securely and reliably connect hundreds 124 of products around the home. 125 126**Bluetooth Low Energy 5.0 support** 127 Bluetooth 5.0 compliant (ESR10) and Bluetooth Low Energy Controller support 128 (LE Link Layer). Includes Bluetooth Mesh and a Bluetooth qualification-ready 129 Bluetooth controller. 130 131 * Generic Access Profile (GAP) with all possible LE roles 132 * Generic Attribute Profile (GATT) 133 * Pairing support, including the Secure Connections feature from Bluetooth 134 4.2 135 * Clean HCI driver abstraction 136 * Raw HCI interface to run Zephyr as a Controller instead of a full Host 137 stack 138 * Verified with multiple popular controllers 139 * Highly configurable 140 141 Mesh Support: 142 143 * Relay, Friend Node, Low-Power Node (LPN) and GATT Proxy features 144 * Both Provisioning bearers supported (PB-ADV & PB-GATT) 145 * Highly configurable, fitting in devices with at least 16k RAM 146 147**Native Linux, macOS, and Windows Development** 148 A command-line CMake build environment runs on popular developer OS 149 systems. A native port (:ref:`native_sim <native_sim>`) lets you build and run Zephyr as a native 150 application on Linux, aiding development and testing. 151 152**Virtual File System Interface with ext2, FatFs, and LittleFS Support** 153 ext2, LittleFS and FatFS support; FCB (Flash Circular Buffer) for memory constrained 154 applications. 155 156**Powerful multi-backend logging Framework** 157 Support for log filtering, object dumping, panic mode, multiple backends 158 (memory, networking, filesystem, console, ...) and integration with the shell 159 subsystem. 160 161**User friendly and full-featured Shell interface** 162 A multi-instance shell subsystem with user-friendly features such as 163 autocompletion, wildcards, coloring, metakeys (arrows, backspace, ctrl+u, 164 etc.) and history. Support for static commands and dynamic sub-commands. 165 166**Settings on non-volatile storage** 167 The settings subsystem gives modules a way to store persistent per-device 168 configuration and runtime state. Settings items are stored as key-value pair 169 strings. 170 171**Non-volatile storage (NVS)** 172 NVS allows storage of binary blobs, strings, integers, longs, and any 173 combination of these. 174 175**Native port** 176 :ref:`Native sim <native_sim>` allows running Zephyr as a Linux application with support 177 for various subsystems and networking. 178 179 180.. include:: ../../README.rst 181 :start-after: start_include_here 182 183 184Fundamental Terms and Concepts 185****************************** 186 187See :ref:`glossary` 188