有人在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 等)