Embedded Linux Boot Time Optimization (Short Practical Guide)

If your product boots slowly, start with the basics: remove what you do not need, initialize only what is required, and free resources early.

1) Remove unnecessary drivers from kernel config

Every unused built-in driver adds probe time.

  • Disable hardware you do not have (extra buses, NICs, audio, camera, GPU blocks).
  • Build rarely used features as modules only if needed.
  • Keep critical boot-path storage and filesystem support built-in.

Practical flow:

  • Start from your board defconfig.
  • Trim with menuconfig.
  • Measure boot delta after each batch.

2) Avoid loading useless modules

If modules are enabled, stop auto-loading ones you do not use.

  • Review loaded modules with lsmod.
  • Blacklist unnecessary modules.
  • Remove unnecessary module packages from rootfs.

Tip: Fewer modules means less I/O and fewer dependency checks during startup.

3) Optimize init system startup order

Most delays are in userspace services.

  • Run systemd-analyze and systemd-analyze blame.
  • Disable services not needed at boot.
  • Convert non-critical services to start after network/GUI or on-demand.
  • Use socket activation when suitable.

Target: Fast path to product readiness, not “everything started immediately.”

4) Reduce filesystem and mount overhead

  • Remove unused mount points and fsck steps where safe.
  • Use mount options that reduce startup work.
  • Keep writable partitions minimal.

For read-mostly products, immutable root approaches can simplify and speed boot.

5) Free resources aggressively after init

Some boot helpers are needed only once.

  • Stop one-shot setup services after completion.
  • Unload optional debug modules in production.
  • Release temporary buffers/files created by early scripts.

Small memory wins reduce pressure and improve runtime stability.

6) Measure every change

Do not guess.

  • Kernel timestamps: add initcall_debug and loglevel tuning.
  • Userspace timing: systemd-analyze critical-chain.
  • Keep a simple before/after table per change.

Quick checklist

  • Remove unused kernel drivers.
  • Blacklist or remove unused modules.
  • Disable non-essential boot services.
  • Simplify mounts and filesystem checks.
  • Free one-time init resources.
  • Measure, commit, repeat.

Boot optimization is usually many small wins, not one magic switch.