Visit us at Embedded World 2026 | 10–12.03, Nuremberg, Germany. Read more .

Cybersecurity
2026-03-12
10 minutes reading

Over The Air (OTA) Updates for Embedded Devices - Yocto Case

Adam Sowa
Adam Sowa Chief Technology Officer

Over-the-Air (OTA) updates are one of those features that sound simple “just update software remotely” until you ship a product and discover what remote really means: unstable networks, power loss at the worst moment, limited storage, strict security requirements, and devices you may not physically touch again for the next 10 years.

If you’re building an embedded product and want OTA designed right from day one, our team provides end-to-end embedded system development .

OTA Updates: The Essentials

  • What is OTA? Secure remote software delivery that installs safely on devices already in the field.

  • How Embedded Linux usually updates: Most products choose between full OS/rootfs updates and app-level updates (packages or containers).

  • Reliability rule #1: Design for failure with A/B slots or a recovery system, and only “commit” an update after health checks succeed.

  • Why Yocto matters: Yocto linux lets you bake OTA into the platform-partitioning, boot flow, artifact format, and signing - so updates stay reproducible and maintainable.

  • Security rule #1: Verify signed artifacts before installing and protect update keys and policy like critical infrastructure.

Let’s unpack what makes OTA reliable and secure in the real world, especially on Yocto-based Embedded Linux.

How OTA works

What is OTA, really?

The simplest definition is: OTA is remote software delivery plus safe installation . “Safe” is doing a lot of work here. Embedded devices can’t assume a stable power supply during update, and they often run unattended in the field. That’s why mature OTA systems are built around three core behaviors: authenticity (only trusted updates install), atomicity (the device never ends up half-updated), and recoverability (if something goes wrong, the device returns to a known working state).

If any one of those is missing, OTA becomes a liability. A remote update mechanism that can’t roll back can brick devices. A mechanism that can roll back but doesn’t validate signatures can be hijacked. And a mechanism that validates signatures but can leave the OS inconsistent after a crash becomes operationally fragile.

What do you actually update on Embedded Linux?

Embedded Linux offers multiple layers that may change over time: bootloader configuration, kernel and device tree, root filesystem, user applications, and configuration/state. Because these layers have different risk profiles, Linux OTA typically settles into one of a few update “shapes,” sometimes combined in a hybrid design.

Full system (rootfs) updates treat the OS as a single tested artifact: you build a complete image in CI, sign it, deliver it, install it, reboot. This is common in embedded products because it provides strong system consistency - devices converge to exactly what was built and tested.

Package-based updates (updating individual packages) can reduce download size for small changes, but they make rollback and system-wide consistency harder unless the entire system is designed around transactional package management and strict version control.

Transactional OS deployments (filesystem-tree models) update the OS as a versioned deployment, enabling atomic switching between versions with rollback semantics. This can combine “OS as artifact” consistency with efficient deltas, but it imposes a specific approach to filesystem layout and state handling.

Container-first approaches keep the base OS relatively stable and update applications as containers. This can dramatically improve iteration speed, but it still requires an OS update path for kernel and base security fixes, plus an operational model to manage containers safely.

A practical conclusion most teams arrive at is: update the OS in a conservative, highly reliable way, and update apps in a faster, lighter-weight way. This is where Yocto can be used to your advantage.

Why Yocto makes OTA a design decision, not an add-on

Yocto isn’t a distribution you install; it’s a build system you use to create a distribution that matches your product. That matters because the most difficult parts of OTA partitioning, boot flow, filesystem structure, and artifact generation - are things Yocto controls exceptionally well at build time.

When OTA is designed early in a Yocto project, the result is clean: the build produces the exact artifacts your updater expects, your storage layout reflects your rollback strategy, and your security model (signing, verification, key handling) becomes part of the pipeline. When OTA is bolted on late, teams often discover they must redo foundational choices: the partition table, bootloader variables, read/write split between system and data, even the way configuration is managed.

Yocto also affects developer productivity. Rebuilding full images for every small app change is slow, so a Yocto-first OTA strategy often includes a workflow decision: keep the base OS stable and reproducible, while allowing applications to evolve without forcing a full platform rebuild every time.

The backbone of reliable OTA: boot flow + storage layout

No matter what update framework you choose, reliability usually comes from the same place: the device must always have a bootable fallback . Two patterns dominate.

OTA: A/B vs Recovery partition

In an A/B design, the device has two system slots. Only one is active. The update is written to the inactive slot, then the bootloader is told to try it. If the new slot boots and passes a health check, it becomes the new active system. If not, the device rolls back automatically.

In a recovery design, there is a small independent recovery environment capable of performing repairs and updates. The recovery image boots when the main system is corrupted or an update fails. This can save storage compared to A/B, but it requires extra engineering discipline: the recovery environment must be robust and kept compatible with update formats over the product lifetime.

Here’s a compact comparison that tends to match real tradeoffs:

Approach

What you gain

What it costs

Typical fit

A/B system slots

Simple rollback logic, strong safety

More flash storage

Gateways, industrial devices, long-lived fleets

Recovery partition/initramfs

Lower storage overhead

More complexity, recovery must be maintained

Tight flash budgets, products with strong field constraints

Both approaches rely on the same missing piece many teams underestimate: a definition of “healthy boot.” Successful boot isn’t just “kernel started.” In embedded products the real definition of success might be “core services started, storage mounted, app running, watchdog satisfied, and device can perform its primary function.”

Security is not a checkbox: it’s a chain of trust

A balanced way to think about OTA security is to split it into transport trust and artifact trust.

Transport security (typically TLS) ensures the device isn’t talking to an impostor server and that downloads aren’t trivially intercepted. Artifact security ensures the device installs only what your build pipeline produced and signed - regardless of what happened on the network. Artifact verification must happen before installation and ideally the boot chain verifies what it boots ( secure boot / verified boot, depending on platform capabilities).

For products with a higher threat model, you also need a policy decision about rollback: rollback is excellent for reliability, but you may want anti-rollback rules so devices cannot be downgraded to vulnerable versions. That policy is easier to implement when versions and metadata are integrated into the same pipeline that produces Yocto images.

Key management deserves a sentence of its own: signing keys should live in controlled systems, not on developer machines, and devices should store trust anchors in a way that matches their hardware capabilities. If key rotation might be needed during the device lifetime, plan for it early, otherwise you’ll discover the “last mile” problem when you already have thousands of devices deployed.

Where Yocto meets OTA in practice

A Yocto-based OTA design usually becomes a pipeline with three distinct outputs:

  • Boot artifacts (kernel, device tree, boot scripts/config)

  • System artifact (root filesystem image or transactional deployment)

  • Application artifact(s) (containers, bundles, or strictly versioned packages)

The integration question is: do you update all of these as one “monolithic” operation, or do you separate OS updates from app updates?

In many fleets, the most robust operational model is to treat OS updates as a carefully staged event and app updates as more frequent. Yocto supports this naturally because you can lock down the base image composition and still provide a modern app delivery mechanism on top. This reduces the pressure to rebuild the whole OS for every feature change, while keeping the OS consistent and easy to audit.

At the same time, Yocto encourages discipline. When the OS is an artifact, configuration and device state must be managed cleanly. The typical approach is to keep system partitions mostly immutable and store mutable state in a dedicated data partition (logs, databases, identity, user data). This prevents updates from accidentally overwriting state and makes rollback predictable.

Cutera HMI

One example of this platform mindset in practice is our work for Cutera. We developed a modern HMI for a medical laser on top of a custom Yocto-based OS, with an emphasis on maintainability, consistency, and long-term product readiness. Although OTA was not the focus of that project, the same principle applied: the platform itself had to be designed intentionally from day one. Read the Cutera case study .

Operational reality: OTA is a fleet process

Even a perfectly engineered updater can be defeated by poor rollout practice. In production, the OTA “product” includes targeting, phasing, and observability.

A sensible rollout pattern looks like this: release to a small canary group, observe, then expand in waves. You need enough telemetry to answer: How many devices downloaded? Installed? Rebooted? Rolled back? Why did failures happen - power loss, storage constraints, health check issues, network timeouts? And you need a way to pause or stop a rollout quickly if the failure rate rises.

Yocto helps here indirectly: when system images are reproducible and versioned, diagnosing fleet issues becomes less guesswork. You can map an incident to a specific build artifact and configuration set rather than trying to reconstruct what a device “might have” after months of incremental package changes.

A practical recommendation for most Yocto products

If you want a “default” that works for a large set of embedded devices, it’s this:

Use a rollback-capable OS update mechanism (A/B or transactional deployments) and decouple application updates where it makes sense.

That combination gives you safety (you can recover from failed OS updates) and velocity (you can ship app changes more often without rebuilding the world). It also makes security tractable because signed artifacts become the center of the system, not an afterthought.

The exceptions are important: extremely small flash budgets may push you toward a recovery-based design; extremely high app churn may push you toward a container-first model; and safety-critical products may require stricter policies around versioning, anti-rollback, and update approval workflows.

Closing

OTA on Embedded Linux is a discipline: storage layout, boot logic, artifact verification, build reproducibility, and fleet operations all have to line up. Yocto makes OTA better when you embrace it early , because it lets you bake those choices into the platform from day one: deterministic images, controlled composition, and a clean integration point for whichever update mechanism you adopt.

If there’s one takeaway, it’s this: treat OTA as part of the device architecture, not a feature request. When you do, you don’t just ship updates, you ship a system that can stay secure, reliable, and maintainable for its entire lifetime.

Embedded security by design

Reliable OTA is only half the story. OTA is a powerful capability, but it’s also a high-privilege attack surface. If you want your OTA pipeline to be secure from day one, we can help.

We provide:

  • Threat modeling for embedded hardware/firmware/OS and interfaces

  • Security requirements & compliance mapping

  • Secure implementation support

Explore our Embedded security by design .

Contact us

We'll address every query and pinpoint
the ideal strategy for your project's success.

Fill out the form, and we’ll get back to you shortly.

Lukas Kosiński

Lukas Kosiński

Chief Executive Officer

The administrator of the personal data is Somco Software sp. z o.o., 13 Gen. Ottokara Brzoza-Brzeziny St., 05-220 Zielonka, KRS: 855688. The personal data are processed in order to answer the question contained in the contact form. More information, including a description of data subjects rights, is available in the information clause .