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