MCUmgr

Overview

The management subsystem allows remote management of Zephyr-enabled devices. The following management operations are available:

The management subsystem is based on the Simple Management Protocol (SMP) provided by MCUmgr, an open source project that provides a management subsystem that is portable across multiple real-time operating systems.

The management subsystem is located in subsys/mgmt/ inside of the Zephyr tree.

Additionally, there is a sample server that provides management functionality over Bluetooth LE and serial.

Supported transports

MCUmgr supports a wide range of transports in-tree of Zephyr, additional transports can be added and submitted upstream or used out-of-tree in downstream projects without needing to fork the Zephyr repository.

The following transports are supported in Zephyr:

Name

Kconfigs

Extra details

Mode support

Transport group management support

Server

Client

Incoming

Outgoing

UART

CONFIG_MCUMGR_TRANSPORT_UART

UART SMP over console encoding

✓

✓

✓

Raw UART

CONFIG_MCUMGR_TRANSPORT_RAW_UART

✓

✓

✓

Shell

CONFIG_MCUMGR_TRANSPORT_SHELL

UART SMP over console encoding

✓

✓

✕

Bluetooth

CONFIG_MCUMGR_TRANSPORT_BT

Bluetooth Low Energy

✓

✓

✓

UDP (IPv4)

CONFIG_MCUMGR_TRANSPORT_UDP and
CONFIG_MCUMGR_TRANSPORT_UDP_IPV4

Optional DTLS support

✓

✕

✕

UDP (IPv6)

CONFIG_MCUMGR_TRANSPORT_UDP and
CONFIG_MCUMGR_TRANSPORT_UDP_IPV6

Optional DTLS support

✓

✕

✕

LoRaWAN

CONFIG_MCUMGR_TRANSPORT_LORAWAN

✓

✕

✕

SPI

CONFIG_MCUMGR_TRANSPORT_SPI

✓

✕

✕

The following are designed for usage in tests:

Dummy

CONFIG_MCUMGR_TRANSPORT_DUMMY

Virtual

✓

✓

✓

Raw Dummy

CONFIG_MCUMGR_TRANSPORT_RAW_DUMMY

UART SMP over console encoding, virtual

✓

✓

✓

Tools/libraries

There are various tools and libraries available which enable usage of MCUmgr functionality on a device which are listed below. Note that these tools are not part of or related to the Zephyr project.

Tools and Libraries for MCUmgr

Name

OS support

Transports

Groups

Type

Language

License

Windows

Linux

mac

Mobile

Embedded

Serial

Serial (raw)

Bluetooth

UDP

LoRaWAN

SPI

OS

IMG

Stat

Settings

FS

Shell

Enum

Transport

Zephyr

AuTerm

✓

✓

✓

✕

✕

✓

✓

✓

✓

✓

✕

✓

✓

✓

✓

✓

✓

✓

✕

✓

Application

C++ (Qt)

GPL-3.0

mcumgr-client

✓

✓

✓

✕

✕

✓

✕

✕

✓

✕

✕

✓

✓

✓

✓

✓

✓

✕

✕

✕

Application

Rust

Apache-2.0

mcumgr-web

✓

✓

✓

✕

✕

✕

✕

✓

✕

✕

✕

✕

✓

✕

✕

✕

✕

✕

✕

✕

Web page (chrome only)

Javascript

MIT

mcumgr-mac

✕

✕

✓

✕

✕

✕

✕

✓

✕

✕

✕

✓

✓

✕

✕

✕

✕

✕

✕

✕

Application

Rust

MIT

nRF Connect Device Manager:
Android and iOS

✕

✕

✕

✓

✕

✕

✕

✓

✕

✕

✕

✓

✓

✓

✓

✓

✓

✕

✕

✓

Library and application

Java, Kotlin, Swift

Apache-2.0

smp

✓

✓

✓

✓

✕

N/A

N/A

N/A

N/A

N/A

N/A

✓

✓

✓

✓

✓

✓

✓

✕

✓

Library

Python

Apache-2.0

smpclient

✓

✓

✓

✕

✕

✓

✕

✓

✓

✕

✕

✓

✓

✓

✓

✓

✓

✓

✕

✓

Library

Python

Apache-2.0

smpmgr

✓

✓

✓

✕

✕

✓

✕

✓

✓

✕

✕

✓

✓

✓

✕

✓

✓

✓

✕

✕

Application

Python

Apache-2.0

mcumgr-toolkit
(CLI: mcumgrctl)

✓

✓

✓

✕

✕

✓

✕

✓

✓

✕

✕

✓

✓

✓

✓

✓

✓

✓

✕

✓

Library and application

Rust, Python

Apache-2.0

Zephyr MCUmgr client (in-tree)

✕

✓

✕

✕

✓

✓

✓

✕

✕

✕

✕

✓

✓

✕

✕

✕

✕

✕

✕

✕

Library

C

Apache-2.0

Note that a tick for a particular group indicates basic support for that group in the code, it is possible that not all commands/features of a group are supported by the implementation.

Bootloader Integration

The Device Firmware Upgrade subsystem integrates the management subsystem with the bootloader, providing the ability to send and upgrade a Zephyr image to a device.

Currently only the MCUboot bootloader is supported. See MCUboot for more information.

Discord channel

Developers welcome!

API Reference

Management