.. _SD.Kernel.BootTimeOptimization: .. include:: /content/swdocs.rsts .. spelling:: fi linux tegra Boot Time Optimization !!!!!!!!!!!!!!!!!!!!!! |NVIDIA(r)| |Jetson(tm)| Linux provides a generic boot kernel for with which you can develop your product. To decrease kernel boot time, customize the provided kernel based on the requirements of your product. The kernel includes a default configuration that enables all supported hardware features and searches all available devices for boot scripts. This provides out-of-the box support for the widest possible variety of controllers, features, storage devices, and boot configurations. This flexibility comes at a cost: - Some hardware support features take time to initialize. - Enabling all software features, mostly over Advanced Peripheral Bus (APB), takes time. - Scanning all attached storage and network devices takes time. In constrained or preconfigured systems, this flexibility may not be necessary; the system designer may know ahead of time which storage device contains the required files, or that certain devices do not need to be initialized by the kernel. To reduce system boot time, you can configure the kernel to respect these constraints. For an NVIDIA\ :sup:`®` Jetson™ systems running Jetson Linux in the default configuration, it takes on an average 12 seconds from cold power-on to the log-in prompt. When the following optimization techniques are applied, boot time can be reduced to approximately three seconds. Device Tree Nodes @@@@@@@@@@@@@@@@@ If you are not using any controller from the Jetson SoC, disable the Device Tree nodes for those device tree entries. The device tree directories are at:: /hardware/nvidia/platform/t23x/ /hardware nvidia/soc/t23x The DTB that is flashed is at:: /hardware/nvidia/platform/t23x/concord/kernel-dts/tegra234-p3701-0000-p3737-0000.dts Environment Configuration @@@@@@@@@@@@@@@@@@@@@@@@@ You can optimize boot time by modifying the environment configuration in the root file system. Disable Console Printing over UART ################################## Console printing over the UART is a major bottleneck in kernel boot time. To reduce the bottleneck, you can reduce the volume of console printing over the UART by removing the ``console`` setting from the platform configuration file. This file is at one of the following locations: - For |NVIDIA(r)| |Jetson AGX Orin(tm)| series devices: Edit ``p3701.conf.common`` and remove ``console=ttyTCU0,115200``. - For |NVIDIA(r)| |Jetson AGX Xavier(tm)| series: Edit ``p2972-0000.conf.common`` and remove ``console=ttyTCU0``. - For |NVIDIA(r)| |Jetson Xavier(tm) NX| series: Edit ``p3668.conf.common and remove ``console=ttyTCU0``. After you do this you may still review the console logs over the frame buffer console. Compile-Time Configuration @@@@@@@@@@@@@@@@@@@@@@@@@@ To reduce compile-time configuration, examine the generated configuration file to identify which configurations are required. After the required configurations are defined, identify which ones to boot asynchronously. For those configurations, the driver probe is executed asynchronously in a separate thread instead of the main initial thread. Additionally, examine the required configurations and verify that they can be programmed as modules so that the drivers are loaded when they are needed. When the drivers are not loaded at boot time the kernel image is reduced, and more RAM space is available. The following topics provide examples of each of these conditions. Asynchronous Probe @@@@@@@@@@@@@@@@@@ This release includes Kernel 5.10 and the asynchronous probe feature is available by default from `kernel version 3.18 `__. To move the driver to another thread #################################### - Add the ``probe_type`` property in your driver as follows:: static struct platform_driver sdhci_tegra_driver = { .driver = { .name = "sdhci-tegra", .of_match_table = sdhci_tegra_dt_match, .pm = SDHCI_PLTFM_PMOPS, .probe_type = PROBE_PREFER_ASYNCHRONOUS, }, .probe = sdhci_tegra_probe, .remove = sdhci_tegra_remove, .shutdown = sdhci_tegra_shutdown, }; To reduce file system initialization time @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ To reduce the time required to initialize the file system, modify the following configurations to set them as modules:: CONFIG_FUSE_FS=m CONFIG_VFAT_FS=m CONFIG_NTFS_FS=m To disable audio configurations @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ To eliminate the audio codec's initialization time, disable sound by disabling the audio configurations:: # CONFIG_SND_SOC_TEGRA_ALT is not set # CONFIG_SND_SOC_TEGRA_ALT_FORCE_CARD_REG is not set # CONFIG_SND_SOC_TEGRA_T186REF_ALT is not set # CONFIG_SND_SOC_TEGRA_T186REF_MOBILE_ALT is not set To modularize the kernel drivers @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Modularize the kernel drivers so that only the required parts are loaded during boot. Drivers that are not required during boot include HID, NET, QSPI, and USB. To disable debugging @@@@@@@@@@@@@@@@@@@@ Disable the debugging kernel hacks (FTRACE, TRACER, KMEMLEAK, etc.) in production configurations.