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.