Measure boot time
Establish a baseline measurement before optimizing.Add initcall_debug
Addinitcall_debug to the kernel command line. The kernel prints a timestamped entry for every initcall and its duration:
scripts/bootgraph.pl from the kernel source tree:
Configure printk.time
Addprintk.time=1 loglevel=4 to the kernel command line. This attaches microsecond timestamps to every printk message while suppressing informational output. On slow UARTs, this can reduce serial console overhead by 200–500 ms.
Run systemd-analyze
On systems running systemd, run after boot to see time spent in kernel, initrd, and user-space phases:Enable asynchronous probe
By default, the kernel probes platform devices sequentially. On Qualcomm SoCs, the probe chain for a single subsystem such as camera or display may involve dozens of dependent drivers running in series. Asynchronous probe allows independent drivers to probe in parallel across kernel threads.Enable Kconfig
Enable per driver
Drivers enable this feature by settingprobe_type in the driver structure:
Enable via kernel command line
Force any driver to use asynchronous probing without modifying the source code by using the driver_async_probe parameter. Separate multiple driver names with commas.Configure deferred probe timeout
When a driver returns -EPROBE_DEFER because a dependency is not yet available, the kernel retries the probe. Set deferred_probe_timeout (in seconds) to emit a warning and continue booting if the device never resolves.Disable unused subsystems
Unused compiled-in drivers add initcall overhead, even when the hardware is not present. Review the following Kconfig symbols for your target board and disable any drivers not listed in the bill of materials (BOM). Table: Kconfig symbols to review for boot time
Use a board-specific configuration fragment rather than editing
defconfig directly. In the Yocto workflow, add a .cfg fragment to the kernel bbappend:
disable-unused.cfg:
Optimize initramfs
The initramfs is decompressed and executed before the root file system mounts. A large initramfs adds both decompression time and storage I/O overhead.Select a fast compression algorithm
On Cortex-A55 and Cortex-A78 cores, LZ4 decompresses much faster than gzip, but it produces a slightly larger image size:Reduce the package set
Editmeta-qcom/recipes-kernel/images/initramfs-qcom-image.bb to remove packages not required during early boot. Remove initramfs-module-copy-modules if all required drivers are compiled in (set to =y rather than =m).
Ensure all initramfs binaries are stripped by setting the following in the Yocto configuration:
Optimize Qualcomm remoteproc firmware loading
On QCS6490, IQ-9075, and related SoCs, the aDSP, cDSP, and WPSS subsystems load their firmware duringdevice_initcall via the qcom_q6v5_pas driver. Each image is authenticated by TrustZone before the subsystem starts. The combined load time for all subsystems can exceed two seconds.
If any firmware file is missing from /lib/firmware, the request_firmware() call times out after 60 seconds per subsystem, stalling boot entirely. Verify the firmware is staged correctly:

