NVIDIA Jetson Orin nano开发套件启动时间太久?

2023-05-29 14:45:32 浏览数 (2)

有人在NVIDIA官方论坛上反应NVIDIA Jetson Orin NANO开发套件启动时间太久?如何缩短这个时间呢?

实际上NVIDIA® Jetson™ Linux 提供了一个通用的启动内核,您可以根据产品的要求进行自定义开发。为了减少内核启动时间,可以根据产品的需求自定义提供的内核。

内核包括一个默认配置,启用了所有支持的硬件功能,并搜索所有可用设备的启动脚本。这为各种控制器、功能、存储设备和启动配置提供了开箱即用的支持。

这种灵活性是有代价的:

  • 某些硬件支持功能需要时间进行初始化。
  • 启用所有软件功能,尤其是通过高级外设总线(APB)的功能,需要时间。
  • 扫描所有连接的存储和网络设备需要时间。

在受限或预配置的系统中,这种灵活性可能并不必要;系统设计师可能事先知道哪个存储设备包含所需的文件,或者某些设备不需要内核进行初始化。为了减少系统启动时间,可以配置内核以遵守这些约束条件。

对于以默认配置运行 Jetson Linux 的 NVIDIA® Jetson™ 系统,从冷启动到登录提示平均需要 12 秒。应用以下优化技术后,启动时间可以缩短到约 3 秒左右。

设备树节点

如果您没有使用 Jetson SoC 中的任何控制器,请禁用那些设备树条目的设备树节点。设备树目录位于:

代码语言:javascript复制
<top>/hardware/nvidia/platform/t23x/
<top>/hardware nvidia/soc/t23x

刷写的设备树二进制文件(DTB)位于:

代码语言:javascript复制
<top>/hardware/nvidia/platform/t23x/concord/kernel-dts/tegra234-p3701-0000-p3737-0000.dts

环境配置

您可以通过修改根文件系统中的环境配置来优化启动时间。

通过 UART 禁用控制台打印

通过 UART 进行控制台打印是内核启动时间的主要瓶颈。要减少瓶颈,您可以通过从平台配置文件中删除控制台设置来减少 UART 上的控制台打印量。此文件位于以下位置之一:

-对于 NVIDIA® Jetson AGX Orin™ 系列设备:

编辑 p3701.conf.common 并删除 console=ttyTCU0,115200。

-对于 NVIDIA® Jetson AGX Xavier™ 系列:

编辑 p2972-0000.conf.common 并删除 console=ttyTCU0。

-对于 NVIDIA® Jetson Xavier™ NX 系列:

编辑 p3668.conf.common 并删除 ``console=ttyTCU0。

执行此操作后,您仍可以通过帧缓冲区控制台查看控制台日志。

编译时配置

为了减少编译时间的配置,检查生成的配置文件以确定所需的配置。在定义所需的配置之后,确定哪些配置可以异步启动。对于这些配置,驱动程序探测在单独的线程中异步执行,而不是在主要的初始线程中执行。

此外,检查所需的配置并验证它们是否可以作为模块编程,以便在需要时加载驱动程序。当驱动程序在启动时不加载时,内核镜像减少,可以腾出更多的RAM空间。

将驱动程序移动到另一个线程

在您的驱动程序中添加 probe_type 属性,如下所示在您的驱动程序中添加 probe_type 属性

代码语言:javascript复制
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,
};

减少文件系统初始化时间

为了减少初始化文件系统所需的时间,修改以下配置将它们设置为模块:

代码语言:javascript复制
CONFIG_FUSE_FS=m
CONFIG_VFAT_FS=m
CONFIG_NTFS_FS=m

禁用音频配置

要消除音频编解码器的初始化时间,请通过禁用音频配置来禁用声音:

代码语言:javascript复制
# 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

模块化内核驱动程序

模块化内核驱动程序,以便在引导期间仅加载所需的部分。启动期间不需要的驱动程序包括 HID、NET、QSPI 和 USB。

禁用debugging

在生产配置中禁用调试内核 hack(FTRACE、TRACER、KMEMLEAK 等)

0 人点赞