# [Deploy firmware on hybrid edge systems using containers](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/cloud-native-deployment-on-hybrid-edge-systems/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/cloud-native-deployment-on-hybrid-edge-systems/)
- [Motivation](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/cloud-native-deployment-on-hybrid-edge-systems/motivation/)
- [Hybrid container runtime](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/cloud-native-deployment-on-hybrid-edge-systems/runtime-overview/)
- [AVH device setup](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/cloud-native-deployment-on-hybrid-edge-systems/avh-setup/)
- [Deploy firmware container using `containerd`](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/cloud-native-deployment-on-hybrid-edge-systems/containerd/)
- [Deploy SMARTER Demo using K3s](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/cloud-native-deployment-on-hybrid-edge-systems/k3s/)
- [Building the hybrid-runtime and container image (optional)](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/cloud-native-deployment-on-hybrid-edge-systems/build-runtime/)
- [Next Steps](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/cloud-native-deployment-on-hybrid-edge-systems/_next-steps/)

## About this Learning Path

| Skill level: | Introductory |
|--------------|--------------|
| Reading time: | 20 min |
| Last updated: | 08 Jul 2026 |

| Author: | Basma El Gaabouri, Arm |
|----------|-------------------------|
| Arm IP: | [Cortex-M](https://support.arm.com/?tab=compute-ip&Product%20Type=Microcontrollers), [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) |
| Tags: | [Containers and Virtualization](https://learn.arm.com/tag/containers-and-virtualization), [Linux](https://learn.arm.com/tag/linux), [Docker](https://learn.arm.com/tag/docker), [Arm Virtual Hardware](https://learn.arm.com/tag/arm-virtual-hardware), [K3s](https://learn.arm.com/tag/k3s), [Containerd](https://learn.arm.com/tag/containerd) |

### Who is this for?
This learning path is for developers interested in learning how to deploy software (embedded applications and firmware) onto other processors in the system, using Linux running on the application core.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Deploy a containerized embedded application onto an Arm Cortex-M core from an Arm Cortex-A core using containerd and K3s.
- Build a firmware container image.
- Build the hybrid-runtime components.

### Prerequisites
Before starting, you will need the following:
- A valid account with [Arm Virtual Hardware](https://app.avh.arm.com/login)
- An Arm Linux host machine (if you want to build your own runtime and container image)

### Summary
You’ll use a hybrid container runtime to deploy containerized firmware and embedded applications onto a Cortex-M target from a Linux-based Cortex-A host on Arm Virtual Hardware. First, you’ll set up the i.MX 8M Plus model, then run a sample workload with `containerd` using the `io.containerd.hybrid` runtime and confirm container state with `containerd` tooling. You’ll also learn about the `hybrid-runtime` OCI-compatible interface and install a single-node K3s configured to use `containerd`. By the end, you’ll have executed a Hello World firmware container and prepared K3s to deploy the SMARTER demo on an Arm-based hybrid edge system.

### Frequently asked questions
#### Which Arm Virtual Hardware device should I create to follow the steps?
Create a device in the **Default Project** and select the **i.MX 8M Plus** model as shown in the setup step.

#### How do I confirm the Hello World container ran with the hybrid runtime?
After running the example with containerd, list containers with `ctr c ls` and check that the RUNTIME column shows `io.containerd.hybrid` and the test container is present.

#### What container image is used for the example workload?
The example uses `ghcr.io/smarter-project/hybrid-runtime/hello_world_imx8mp:latest`. The steps pull the image before running it with containerd.

#### Which container runtime does K3s use in this setup?
K3s is configured to use `containerd` via the `container-runtime-endpoint` flag set to `unix://var/run/containerd/containerd.sock` in the provided install command.

#### How long should the K3s installation take, and what should I do next?
The installation can take a few minutes. When the script completes without errors, continue with deploying the SMARTER demo as described.
