All Case Studies

BSP & Yocto Optimization

Repeatable Measurement

Reducing Cold Boot from 18.4s to 1.8s

−90% boot time · NXP i.MX8M Plus · Yocto Scarthgap 5.0

NXP i.MX8M Plus · Yocto Scarthgap 5.0 · Qt/QML HMI

18.4s → 1.8sCold Boot
−90%Boot Time
0.21sKernel Decompress
4.1 MBRootfs Binary Size
PlatformNXP i.MX8M Plus · Cortex-A53
Problem18.4s cold boot — unacceptable operational delay in the field
InterventionU-Boot Falcon Mode + LZ4 kernel + SquashFS rootfs + musl/BusyBox
Result1.8 seconds from power-on to a ready Qt interface

01Problem

Problem: Why 18.4 Seconds Was Unacceptable

On an industrial platform, the image produced by a standard Yocto distribution brought the operator interface up 18.4 seconds after power-on. In the field scenario the device is power-cycled multiple times per day; on every start the operator was blind for more than 18 seconds. For critical system startup, this delay was operationally unacceptable.

  • 01The full U-Boot flow burned seconds on environment loading, peripheral probing, and an unnecessary bootdelay
  • 02Decompressing the zlib-compressed kernel image alone consumed ~1.7 seconds
  • 03ext4 rootfs journal recovery and mount time were the unpredictable component of startup
  • 04A full glibc-based userspace inflated init time with unnecessary service startups
  • 05Boot time was not measured systematically — nobody knew which stage consumed what

02System Context

ProcessorNXP i.MX8M Plus — 4× Cortex-A53 + Cortex-M7
DistributionYocto Project Scarthgap 5.0 (custom BSP layer)
BootloaderU-Boot (before: full flow · after: Falcon Mode/SPL)
InterfaceQt/QML operator HMI
StorageeMMC
MeasurementPower-on to UI-ready GPIO signal; per-stage boot graph
Test conditionConsecutive cold boots · median and worst-case reported

03Root Cause Analysis

  1. 01The full U-Boot flow was unnecessary after SPL: environment loading, USB/network probing, and bootdelay consumed seconds on the critical path
  2. 02The kernel image was zlib-compressed — decompression on Cortex-A53 was ~8× slower than LZ4
  3. 03The rootfs was ext4: journal recovery, fsck risk, and mount cost made startup both slow and unpredictable
  4. 04Userspace was built with glibc + full coreutils — binary size and dynamic linking cost delayed init
  5. 05A significant share of boot-time services was not required for the operator UI — and parallel startup was not configured

04What We Changed

01

U-Boot Falcon Mode: SPL configured to load the kernel directly, removing full U-Boot from the critical path

Bootloader stage dropped from seconds to milliseconds

02

Kernel compression switched from zlib to LZ4

Decompress time fell to 0.21 seconds (−88%)

03

rootfs migrated from ext4 to read-only SquashFS + tmpfs overlay

Mount time became constant, journal recovery disappeared; filesystem corruption risk reduced

04

Userspace rebuilt with musl libc + BusyBox

Binary footprint shrank 65% (4.1 MB) — load and link cost dropped

05

Boot services trimmed; non-UI-critical services deferred until after the interface is up

Qt HMI ready for the operator 1.8 seconds after power-on

05Benchmark Results

MetricBeforeAfterΔ
Cold boot (power-on → UI ready)18.4s1.8s−90%
Kernel decompress~1.7s0.21s−88%
Rootfs binary size11.7 MB4.1 MB−65%
Bootloader stagefull U-Boot flowSPL → kernel (Falcon)off the critical path

06Why It Mattered

Boot time is not a comfort metric; it is time-to-operational-readiness. The 1.8-second boot made the device feel effectively 'instant-on' across power interruptions and shift cycles.

  • 01The ~18-second blind wait the operator experienced on every start was eliminated
  • 02The read-only SquashFS rootfs structurally reduced filesystem corruption risk under sudden power loss in the field
  • 03The smaller image reduced OTA update time and bandwidth cost
  • 04The boot-graph measurement setup was made permanent — future regressions are caught in the build pipeline

To evaluate your BSP & Yocto Optimization needs on your own platform, schedule an embedded architecture audit or scope your platform class with the system requirements calculator.

Methodology Note

  • Boot time was measured end-to-end from power-on to the Qt interface's 'ready' GPIO signal — based on an external signal, not software logs
  • Bootloader/kernel/init timestamps were extracted with a boot graph for per-stage analysis
  • Measurements were repeated across consecutive cold boots; median and worst-case reported together
  • Comparisons used identical hardware with image configuration as the only variable
  • Project details remain confidential under NDA — client identity is anonymized

Is your device's boot time slowing down field operations?

Free technical assessment — let's review the latency and determinism challenges in your system together.

All performance data was obtained in our own lab under repeatable conditions. Project-specific details are confidential under NDA. The methodology document is available on request.