Boot Time Optimization

NVIDIA® Jetson™ Linux provides a generic BSP for developing your product. To decrease boot time, customize the provided BSP components based on the requirements of your product.

For a Jetson Orin Nano Developer Kit running JetPack 5.1.2 with the default configuration, the average time from a cold power-on to the login prompt is approximately 36 seconds. By applying the following optimization techniques, the boot time can be significantly reduced to approximately 16 seconds.

Disable MB1/MB2 Logs

For an example using the Jetson Orin Nano series, modify the log_level value to 0 in Linux_for_Tegra/bootloader/tegra234-mb1-bct-misc-common.dtsi.

Modify Combined UART

For an example using the Jetson Orin Nano series, decompile Linux_for_Tegra/bootloader/t186ref/tegra234-bpmp-3767-0000-a02-3509-a02.dtb with a suitable DTB tool into DTS format. Next, delete the contents inside /serial node of the generated DTS file. Afterward, recompile tegra234-bpmp-3767-0000-a02-3509-a02.dts back into DTB format.

Modify UEFI Components

For end users, some UEFI components are not necessary.

  1. Remove networking related stacks from NVIDIA.common.dsc.inc and NVIDIA.fvmain.fdf.inc:

    NetLib|NetworkPkg/Library/DxeNetLib/DxeNetLib.inf
    DpcLib|NetworkPkg/Library/DxeDpcLib/DxeDpcLib.inf
    UdpIoLib|NetworkPkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
    IpIoLib|NetworkPkg/Library/DxeIpIoLib/DxeIpIoLib.inf
    TcpIoLib|NetworkPkg/Library/DxeTcpIoLib/DxeTcpIoLib.inf
    HttpIoLib|NetworkPkg/Library/DxeHttpIoLib/DxeHttpIoLib.inf
    HttpLib|NetworkPkg/Library/DxeHttpLib/DxeHttpLib.inf
    
    NetworkPkg/DpcDxe/DpcDxe.inf
    NetworkPkg/ArpDxe/ArpDxe.inf
    NetworkPkg/Dhcp4Dxe/Dhcp4Dxe.inf
    NetworkPkg/Ip4Dxe/Ip4Dxe.inf
    NetworkPkg/MnpDxe/MnpDxe.inf
    NetworkPkg/SnpDxe/SnpDxe.inf
    NetworkPkg/VlanConfigDxe/VlanConfigDxe.inf
    NetworkPkg/Mtftp4Dxe/Mtftp4Dxe.inf
    NetworkPkg/TcpDxe/TcpDxe.inf
    NetworkPkg/Udp4Dxe/Udp4Dxe.inf
    NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
    NetworkPkg/IScsiDxe/IScsiDxe.inf
    NetworkPkg/Ip6Dxe/Ip6Dxe.inf
    NetworkPkg/Dhcp6Dxe/Dhcp6Dxe.inf
    NetworkPkg/Udp6Dxe/Udp6Dxe.inf
    NetworkPkg/Mtftp6Dxe/Mtftp6Dxe.inf
    
    NetworkPkg/TlsDxe/TlsDxe.inf
    NetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.inf
    NetworkPkg/DnsDxe/DnsDxe.inf
    NetworkPkg/HttpDxe/HttpDxe.inf
    NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf
    NetworkPkg/HttpBootDxe/HttpBootDxe.inf
    
  2. Remove the SCSI bus stack from Jetson.fdf, NVIDIA.common.dsc.inc, and NVIDIA.fvmain.fdf.inc:

    MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
    MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
    MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
    MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
    MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
    
  3. Remove the logo stack from NVIDIA.common.dsc.inc and NVIDIA.fvmain.fdf.inc:

    MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
    Silicon/NVIDIA/Drivers/Logo/LogoDxe.inf
    
    FILE FREEFORM = gNVIDIAPlatformLogoGuid {
      SECTION RAW = Silicon/NVIDIA/Assets/nvidiagray480.bmp
      SECTION RAW = Silicon/NVIDIA/Assets/nvidiagray720.bmp
      SECTION RAW = Silicon/NVIDIA/Assets/nvidiagray1080.bmp
    }
    
  4. Remove the EQOS driver from Jetson.fdf.inc and Jetson.dsc.inc:

    Silicon/NVIDIA/Drivers/EqosDeviceDxe/EqosDeviceDxe.inf
    
  5. Remove third party drivers. For an example, remove the Ethernet driver from NVIDIA.common.dsc.inc and NVIDIA.fvmain.fdf.inc:

    Drivers/Realtek/Bus/Pcie/PcieNetworking/RtkUndiDxe.inf
    
  6. Modify the UEFI Timeout value to 0 in NVIDIA.common.dsc.inc:

    gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|0
    
  7. Remove the UEFI shell from NVIDIA.common.dsc.inc and NVIDIA.fvmain.fdf.inc:

    NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf
    NULL|ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.inf
    
    ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf {
      <PcdsFixedAtBuild>
        gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE
    }
    
    ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf
    ShellPkg/DynamicCommand/DpDynamicCommand/DpDynamicCommand.inf
    

Kernel Optimization

  • Pass quiet to the kernel command line by adding it to /boot/extlinux/extlinux.conf.

  • For strategies on reducing kernel boot time, refer to Kernel BootTime Optimzation.