Skip to main content
Qualcomm® Linux kernel boot time spans from the first kernel log message to the first responsive user-space process. Reducing it requires profiling initcall overhead, enabling asynchronous driver probe, and eliminating unused compiled-in subsystems.

Measure boot time

Establish a baseline measurement before optimizing.

Add initcall_debug

Add initcall_debug to the kernel command line. The kernel prints a timestamped entry for every initcall and its duration:
Sort the slowest initcalls:
Generate a boot timeline SVG using scripts/bootgraph.pl from the kernel source tree:

Configure printk.time

Add printk.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 setting probe_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.
To inspect pending deferred devices at runtime, use the following command:
Do not set deferred_probe_timeout to a value lower than the time required for slow firmware loads (such as modem, DSP, and WPSS subsystems). Setting it too low can cause the platform to boot with missing peripherals.

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:
Example contents of 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

Edit meta-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 during device_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:
If WLAN or audio are not required during early boot, disable the corresponding remoteproc in the board device tree overlay and start it from user space after the critical path completes:
Start it from user space when ready:
For remoteproc driver configuration details, see Configure the RemoteProcessor (remoteproc) subsystems.

Kernel command line quick reference

The following parameters have a measurable impact on boot time: Table: Boot-time kernel command line parameters