精华内容
下载资源
问答
  • Jetson TX2原理图细节
    千次阅读
    2018-10-23 16:20:38

    Jetson TX2的原理图细节

    启动相关的配置引脚。

    Pin E2(SLEEP#)
    Pin E1(FORCE_RECOV#)
    Pin A7(CHARGING#)

     

    Pin B16(UART2_TX))
    Pin A16(UART2_RTS#)
    Pin H12(UART0_TX)
    Pin G11(UART0_RTS#)

     

     

     

    更多相关内容
  • 资源为英伟达官方文档,包含英伟达TX2载板的官方原理图和PCB工程,同时包括BOM清单,版本是cadence17.2,如果想自己制作底板的,可以下载使用
  • Jetson_Nano载板原理图
  • TensorRT优化和Jetson TX2的性能优化

    千次阅读 2019-10-24 15:01:43
    文章目录1.TensorRT优化原理1) TensorRT目前支持的Layer ... 如何最大化系统的性能(TX2) 1.TensorRT优化原理 TensorRT加速DL Inference的能力来源于优化器和运行时,其优化原理包括四个方面: Layer & T...


    1.TensorRT优化原理

    在这里插入图片描述

    TensorRT加速DL Inference的能力来源于优化器和运行时,其优化原理包括四个方面:

    • Layer & Tensor fusion: 该部分将网络中的convolution、bias和ReLU层进行融合,调用一个统一的kernel进行处理,让kernel lauch时间减少,实现加速。此外,还会消除一些output未被使用的层、聚合一些相似的参数和相同的源张量。
    • Mix precision:使用混合精度,降低数据的大小,减少计算量。例如:使用FP32、FP16、INT8精度。
    • kernel auto-tuning:基于采用的硬件平台、输入的参数(如:workspace size、segment size等)选择一些layer的最优算法,比如不同卷积的算法,另外还会根据硬件特性,自动选择GPU上的kernel或者tensor core等。
    • Dynamic tensor memory:tensorrt在运行中会申请一块memory,最大限度的重复利用此内存,让计算变得高效。

    为了使TensorRT的性能最大化,可以参考 【TensorRT性能优化指南】 来实现更快的加速。

    1) TensorRT目前支持的Layer Fusions

    下面列出了TensorRT目前支持的层融合,我们在编写网络时可以尽可能地使用下面网络层,来实现TensorRT层融合加速。

    Convolution and ReLU Activation
    卷积层可以是任何类型,并且对值没有限制。激活层必须是ReLU类型

    FullyConnected and ReLU Activation
    FullyConnected图层没有限制。激活层必须是ReLU类型。

    Scale and Activation
    如果Scale层后面是激活层,则Scale层可以融合到单个激活层中。

    Convolution And ElementWise Sum
    如果卷积层后面是ElementWise层的sum计算,则这个sum可以融合到卷积层中。

    Shuffle and Reduce
    对于没有进行reshape的Shuffle层,如果后面跟着Reduce层,则可以被融合进一个单独Reduce层。Shuffle layer可以进行permutations操作,但是不能进行任何reshape操作,Reduce层必须具有keepDimensions set.

    Shuffle and Shuffle
    每个Shuffle层由transpose, a reshape, and a second transpose这些操作组成。如果一个Shuffle layer后面还跟着一个Shuffle layer,那么这两层可以替换为单个Shuffle layer。如果两个Shuffle层都执行reshape操作,仅当第一个shuffle的second transpose是第二个shuffle的第一个transpose的倒数时才允许融合。

    Scale
    对于加0,乘以1的Scale层可以被剔除。

    Convolution and Scale
    如果一个卷积层后面跟着一个kUNIFORM or kCHANNEL的Scale层,那么可以通过调整卷积的权重来融合这两层。

    Reduce
    执行平均池化操作的Reduce层将替换为Pooling层,Reduce图层必须设置keepDimensions。

    下图为进行TensorRT层融合的网络:
    在这里插入图片描述

    2) 使用Batch和混合精度

    1)在GPU上使用较大的batch几乎总是更有效,batch的作用在于能尽可能多地并行计算。
    例如:FullyConnected图层有V个输入和 K个输出,对于一个batch的实例,可以实现为 1xV的input矩阵乘以VxK的weight矩阵。如果是N个batch的实例,这就可以实现为NxV乘以 VxK矩阵。将向量-矩阵乘法变为矩阵-矩阵乘法,效率更高。
    此外,当网络包含MatrixMultiply图层或FullyConnected图层时,如果硬件支持Tensor Core,对于FP16和INT8 Inference,将batch大小设置为32的倍数往往具有最佳性能。
    2)使用混合精度,降低数据的大小,减少计算量。例如:使用FP32、FP16、INT8精度。FP32->FP16的转换,数据大小基本会缩减一半。

    3) kernel auto-tuning

    在进行TensorRT优化的过程中,TensorRT会基于当前的GPU计算能力、GPU缓存、SM数量、硬件平台信息、以及构建engine时设置的参数(workspace size、segment size等)进行auto-tuning。这包括利用workspace空间不断尝试一些layer的最优算法,如选择最优的卷积算法。另外还会根据硬件特性,自动选择GPU上的kernel或者tensor core等。


    2. 影响TensorRT优化的因素

    在进行上一节中四个方面的TensorRT优化后,我们要考虑一下影响TensorRT优化的因素有哪些?

    1. TensorRT的版本
    2. CUDA的版本
    3. 构建engine时设置的builder参数:
    • workspaceSize
    • BatchSize
    • 数据精度
    • segment size
    1. 当前系统的性能
    • 最高GPU图形时钟速度
    • 最大GPU内存时钟速度
    • GPU内存总线宽度
    • 总GPU内存
    • GPU L2缓存大小
    • SM处理器数量
    • 异步引擎计数

    这里前三点是构建TensorRT engine的基本要素,这里先不做讲解,我们来关注下第四点,这是我们构建engine时会时常忽略的因素。
    在构建engine时,当前系统的性能会影响生成engine的推理性能。

    为了验证这个观点,在TX2做了如下测试:
    1.在TX2上使用sudo nvpmodel -m 3命令,设置默认的性能模式,然后生成engine,测量inference时间。
    2.在TX2上使用sudo nvpmodel -m 0命令,设置MAXN性能模式,然后生成engine,测量inference时间。
    3.在TX2上执行脚本jetson_clock.sh,锁定GPU、CPU为最大频率,然后生成engine,测量inference时间。

    测试结果:
    1.在默认性能模式下生成的retinanet engine,测出lantency为:30ms
    2.MAXN模式:MAX FREQ被设置为GPU能达到的最大值,并且GPU会根据使用自动调频。在此模式下生成retinanet engine,测出lantency为:26ms
    在这里插入图片描述
    3.设置CPU, GPU and EMC的clocks,锁定为最大值,在此状态下生成的retinanet engine,测出lantency为:20ms
    在这里插入图片描述

    结果分析:
    在TensorRT构建engine时,kernel auto-tuning会根据当前系统的硬件信息以及性能指标信息不断尝试一些layer的最优算法和kernel的最优选取。因此当前系统性能不佳的情况下,会对kernel auto-tuning的效果产生影响,进而影响生成engine的inference速度。从测试结果来看,当前系统性能对engine有着20%~30%的性能影响,这是我们不能忽略的一部分。
    结论:
    当我们构建engine时,最大化当前系统的性能能够使engine的inference更快,这种加速有可能达到20%~30%的性能提升。


    3. 如何最大化系统的性能(TX2)

    对于Jetson系列的板卡可以参考: 【Jetson开发指南-Clock Frequency and Power Management】

    1)Nvidia为Jetson系列的板卡提供了一套性能模式设置方案——nvpmodel。
    在TX2上,nvpmodel定义了板卡上的CPU数量及其时钟频率,GPU频率和外部存储器控制器(EMC)频率。EMC控制对外部LPDDR4内存的访问速度。TX2上提供了五种模式可供选择,这些模式定义在/etc/nvpmodel.conf文件中。
    五种mode如下,分别对应不同的性能,这些具体的freq值可以自己在/etc/nvpmodel.conf中设定。
    在这里插入图片描述

    我们来分析一下/etc/nvpmodel.conf文件:

    # Copyright (c) 2017, NVIDIA CORPORATION.  All rights reserved.
    #
    # FORMAT:
    # < PARAM TYPE=PARAM_TYPE NAME=PARAM_NAME >
    # ARG1_NAME ARG1_PATH_VAL
    # ARG2_NAME ARG2_PATH_VAL
    # ...
    # This starts a section of PARAM definitions, in which each line
    # has the syntax below:
    # ARG_NAME ARG_PATH_VAL
    # ARG_NAME is a macro name for argument value ARG_PATH_VAL.
    # PARAM_TYPE can be FILE, or CLOCK.
    #
    # < POWER_MODEL ID=id_num NAME=mode_name >
    # PARAM1_NAME ARG11_NAME ARG11_VAL
    # PARAM1_NAME ARG12_NAME ARG12_VAL
    # PARAM2_NAME ARG21_NAME ARG21_VAL
    # ...
    # This starts a section of POWER_MODEL configurations, followed by
    # lines with parameter settings as the format below:
    # PARAM_NAME ARG_NAME ARG_VAL
    # PARAM_NAME and ARG_NAME are defined in PARAM definition sections.
    # ARG_VAL is an integer for PARAM_TYPE of CLOCK, and -1 is taken
    # as INT_MAX. ARG_VAL is a string for PARAM_TYPE of FILE.
    # This file must contain at least one POWER_MODEL section.
    #
    # < PM_CONFIG DEFAULT=default_mode >
    # This is a mandatory section to specify one of the defined power
    # model as the default.
    #
    #add KNEXT path node to support current kernel and next kernel simultaneously
    #since some node may change for different kernel version
    
    ###########################
    #                         #
    # PARAM DEFINITIONS       #
    #                         #
    ###########################
    
    < PARAM TYPE=FILE NAME=CPU_ONLINE >
    CORE_0 /sys/devices/system/cpu/cpu0/online
    CORE_1 /sys/devices/system/cpu/cpu1/online
    CORE_2 /sys/devices/system/cpu/cpu2/online
    CORE_3 /sys/devices/system/cpu/cpu3/online
    CORE_4 /sys/devices/system/cpu/cpu4/online
    CORE_5 /sys/devices/system/cpu/cpu5/online
    
    < PARAM TYPE=CLOCK NAME=CPU_A57 >
    FREQ_TABLE /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
    MAX_FREQ /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
    MIN_FREQ /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
    FREQ_TABLE_KNEXT /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
    MAX_FREQ_KNEXT /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
    MIN_FREQ_KNEXT /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
    
    < PARAM TYPE=CLOCK NAME=CPU_DENVER >
    FREQ_TABLE /sys/devices/system/cpu/cpu1/cpufreq/scaling_available_frequencies
    MAX_FREQ /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
    MIN_FREQ /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
    FREQ_TABLE_KNEXT /sys/devices/system/cpu/cpu1/cpufreq/scaling_available_frequencies
    MAX_FREQ_KNEXT /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
    MIN_FREQ_KNEXT /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
    
    < PARAM TYPE=CLOCK NAME=GPU >
    FREQ_TABLE /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/available_frequencies
    MAX_FREQ /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/max_freq
    MIN_FREQ /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/min_freq
    FREQ_TABLE_KNEXT /sys/devices/17000000.gp10b/devfreq/devfreq0/available_frequencies
    MAX_FREQ_KNEXT /sys/devices/17000000.gp10b/devfreq/devfreq0/max_freq
    MIN_FREQ_KNEXT /sys/devices/17000000.gp10b/devfreq/devfreq0/min_freq
    
    
    
    < PARAM TYPE=CLOCK NAME=EMC >
    MAX_FREQ /sys/kernel/nvpmodel_emc_cap/emc_iso_cap
    MAX_FREQ_KNEXT /sys/kernel/nvpmodel_emc_cap/emc_iso_cap
    
    ###########################
    #                         #
    # POWER_MODEL DEFINITIONS #
    #                         #
    ###########################
    
    # MAXN is the NONE power model to release all constraints
    < POWER_MODEL ID=0 NAME=MAXN >
    CPU_ONLINE CORE_1 1
    CPU_ONLINE CORE_2 1
    CPU_ONLINE CORE_3 1
    CPU_ONLINE CORE_4 1
    CPU_ONLINE CORE_5 1
    CPU_A57 MIN_FREQ 0
    CPU_A57 MAX_FREQ -1
    CPU_DENVER MIN_FREQ 0
    CPU_DENVER MAX_FREQ -1
    GPU MIN_FREQ 0
    GPU MAX_FREQ -1
    EMC MAX_FREQ 0
    
    < POWER_MODEL ID=1 NAME=MAXQ >
    CPU_ONLINE CORE_1 0
    CPU_ONLINE CORE_2 0
    CPU_ONLINE CORE_3 1
    CPU_ONLINE CORE_4 1
    CPU_ONLINE CORE_5 1
    CPU_A57 MIN_FREQ 0
    CPU_A57 MAX_FREQ 1200000
    GPU MIN_FREQ 0
    GPU MAX_FREQ 850000000
    EMC MAX_FREQ 1331200000
    
    < POWER_MODEL ID=2 NAME=MAXP_CORE_ALL >
    CPU_ONLINE CORE_1 1
    CPU_ONLINE CORE_2 1
    CPU_ONLINE CORE_3 1
    CPU_ONLINE CORE_4 1
    CPU_ONLINE CORE_5 1
    CPU_A57 MIN_FREQ 0
    CPU_A57 MAX_FREQ 1400000
    CPU_DENVER MIN_FREQ 0
    CPU_DENVER MAX_FREQ 1400000
    GPU MIN_FREQ 0
    GPU MAX_FREQ 1120000000
    EMC MAX_FREQ 1600000000
    
    < POWER_MODEL ID=3 NAME=MAXP_CORE_ARM >
    CPU_ONLINE CORE_1 0
    CPU_ONLINE CORE_2 0
    CPU_ONLINE CORE_3 1
    CPU_ONLINE CORE_4 1
    CPU_ONLINE CORE_5 1
    CPU_A57 MIN_FREQ 0
    CPU_A57 MAX_FREQ 2000000
    GPU MIN_FREQ 0
    GPU MAX_FREQ 1120000000
    EMC MAX_FREQ 1600000000
    
    < POWER_MODEL ID=4 NAME=MAXP_CORE_DENVER >
    CPU_ONLINE CORE_1 1
    CPU_ONLINE CORE_2 0
    CPU_ONLINE CORE_3 0
    CPU_ONLINE CORE_4 0
    CPU_ONLINE CORE_5 0
    CPU_A57 MIN_FREQ 0
    CPU_A57 MAX_FREQ 345600
    CPU_DENVER MIN_FREQ 0
    CPU_DENVER MAX_FREQ 2035200
    GPU MAX_FREQ 1120000000
    EMC MAX_FREQ 1600000000
    
    # mandatory section to configure the default mode
    < PM_CONFIG DEFAULT=3 >
    

    该conf文件通过配置系统参数来调整GPU、CPU的MIN频率、MAX频率以及是否disable某个core。

    在Linux系统中,通常设置一些内核参数来优化系统性能。如:

    /sys/devices/system/cpu/cpu1/cpufreq/该目录有如下文件,通过这些文件来设置CPU运行时的性能:

    /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
    /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq
    /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
    /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
    /sys/devices/system/cpu/cpu1/cpufreq/scaling_available_governors
    /sys/devices/system/cpu/cpu0/cpufreq/scaling_governors
    /sys/devices/system/cpu/cpu1/cpufreq/scaling_driver
    /sys/devices/system/cpu/cpu1/cpufreq/scaling_setspeed
    /sys/devices/system/cpu/cpu1/cpufreq/affected_cpus
    /sys/devices/system/cpu/cpu1/cpufreq/related_cpus
    /sys/devices/system/cpu/cpu1/cpufreq/stats
    /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq
    /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_min_freq
    /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq
    /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_transition_latency

    查看当前CPU可获得的frequencies

    # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
    345600 499200 652800 806400 960000 1113600 1267200 1420800 1574400 1728000 1881600 2035200
    

    设置当前CPU frequencies,以及最小、最大频率

    # echo 2035200 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq
    # echo 2035200 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
    # echo 2035200 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
    

    查看当前CPU可获得的governor策略

    # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
    interactive conservative ondemand userspace powersave performance schedutil
    

    设置当前CPU的governor策略

    # echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governors
    

    GPU的相关参数设置

    /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/该目录有如下文件,通过这些文件来设置GPU运行时的性能:

    available_frequencies cur_freq
    governor
    min_freq
    power/
    target_freq
    uevent
    available_governors
    device/
    max_freq
    polling_interval
    subsystem/
    trans_stat

    查看当前GPU可获得的frequencies

    # cat /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/available_frequencies
    114750000 216750000 318750000 420750000 522750000 624750000 726750000 828750000 930750000 1032750000 1134750000 1236750000 1300500000
    

    设置当前GPU的frequencies、最小freq、最大freq

    # echo 1300500000 > /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/cur_freq
    # echo 1300500000 > /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/min_freq
    # echo 1300500000 > /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/max_freq
    

    查看当前GPU可获得的governor策略

    # cat /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/available_governors
    wmark_active wmark_simple nvhost_podgov userspace performance simple_ondemand
    

    设置当前GPU的governor策略

    echo nvhost_podgov > /sys/devices/17000000.gp10b/devfreq/17000000.gp10b/governors
    

    2)除了nvpmodel,我们可以使用jetson_clock.sh脚本,来设置性能最大化。

    # /usr/bin/jetson_clocks --help
    Maximize jetson performance by setting static max frequency to CPU, GPU and EMC clocks.
    Usage:
    jetson_clocks.sh [options]
      options,
      --show             display current settings
      --store [file]     store current settings to a file (default: ${HOME}/l4t_dfs.conf)
      --restore [file]   restore saved settings from a file (default: ${HOME}/l4t_dfs.conf)
      run jetson_clocks.sh without any option to set static max frequency to CPU, GPU and EMC clocks.
    
    

    --show参数显示当前系统的CPU、GPU、EMC、FAN的信息。

    # jetson_clocks --show
    SOC family:tegra186  Machine:quill
    Online CPUs: 0-5
    CPU Cluster Switching: Disabled
    cpu0: Online=1 Governor=performance MinFreq=345600 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c7=0
    cpu1: Online=1 Governor=performance MinFreq=345600 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c6=0 c7=0
    cpu2: Online=1 Governor=performance MinFreq=345600 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c6=0 c7=0
    cpu3: Online=1 Governor=performance MinFreq=345600 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c7=0
    cpu4: Online=1 Governor=performance MinFreq=345600 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c7=0
    cpu5: Online=1 Governor=performance MinFreq=345600 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c7=0
    GPU MinFreq=114750000 MaxFreq=1300500000 CurrentFreq=114750000
    EMC MinFreq=40800000 MaxFreq=1866000000 CurrentFreq=1866000000 FreqOverride=1
    Fan: speed=255
    NV Power Mode: MAXN
    

    从上面我们可以看出,即使使用nvpmodel -m 0设置了MAXN模式后,系统性能仍不是最大值,GPU会使用动态电压和频率调节(DFVS)调速器,这时GPU是频率是动态的,不是最大频率。

    jetson_clocks.sh可以为当前的nvpmodel模式设置最佳性能。jetson_clocks.sh将时钟值调整为最大值,并禁用动态电压和频率调节(DFVS),并且会调整风扇值使性能最好。当不指定任何参数执行jetson_clocks时,脚本会将CPU, GPU和EMC clocks设置为目前硬件支持的最大频率。

    执行jetson_clocks,再次执行jetson_clocks --show,发现GPU CurrentFreq = GPU MaxFreq。

    # jetson_clocks
    # jetson_clocks --show
    SOC family:tegra186  Machine:quill
    Online CPUs: 0-5
    CPU Cluster Switching: Disabled
    cpu0: Online=1 Governor=performance MinFreq=2035200 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c7=0
    cpu1: Online=1 Governor=performance MinFreq=2035200 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c6=0 c7=0
    cpu2: Online=1 Governor=performance MinFreq=2035200 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c6=0 c7=0
    cpu3: Online=1 Governor=performance MinFreq=2035200 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c7=0
    cpu4: Online=1 Governor=performance MinFreq=2035200 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c7=0
    cpu5: Online=1 Governor=performance MinFreq=2035200 MaxFreq=2035200 CurrentFreq=2035200 IdleStates: C1=0 c7=0
    GPU MinFreq=1300500000 MaxFreq=1300500000 CurrentFreq=1300500000
    EMC MinFreq=40800000 MaxFreq=1866000000 CurrentFreq=1866000000 FreqOverride=1
    Fan: speed=255
    NV Power Mode: MAXN
    
    

    最后,列出jetson_clock.sh代码,对今后其他系统进行性能优化时,可以将此脚本设置的参数项作为参考,来使系统性能最大化。

    #!/bin/bash
    
    CONF_FILE=${HOME}/l4t_dfs.conf
    RED='\e[0;31m'
    GREEN='\e[0;32m'
    BLUE='\e[0;34m'
    BRED='\e[1;31m'
    BGREEN='\e[1;32m'
    BBLUE='\e[1;34m'
    NC='\e[0m' # No Color
    
    usage()
    {
            if [ "$1" != "" ]; then
                    echo -e ${RED}"$1"${NC}
            fi
    
                    cat >& 2 <<EOF
    Maximize jetson performance by setting static max frequency to CPU, GPU and EMC clocks.
    Usage:
    jetson_clocks.sh [options]
      options,
      --show             display current settings
      --store [file]     store current settings to a file (default: \${HOME}/l4t_dfs.conf)
      --restore [file]   restore saved settings from a file (default: \${HOME}/l4t_dfs.conf)
      run jetson_clocks.sh without any option to set static max frequency to CPU, GPU and EMC clocks.
    EOF
    
            exit 0
    }
    
    restore()
    {
            for conf in `cat "${CONF_FILE}"`; do
                    file=`echo $conf | cut -f1 -d :`
                    data=`echo $conf | cut -f2 -d :`
                    case "${file}" in
                            /sys/devices/system/cpu/cpu*/online |\
                            /sys/kernel/debug/clk/override*/state)
                                    if [ `cat $file` -ne $data ]; then
                                            echo "${data}" > "${file}"
                                    fi
                                    ;;
                            /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq)
                                    echo "${data}" > "${file}" 2>/dev/null
                                    ;;
                            *)
                                    echo "${data}" > "${file}"
                                    ret=$?
                                    if [ ${ret} -ne 0 ]; then
                                            echo "Error: Failed to restore $file"
                                    fi
                                    ;;
                    esac
            done
    }
    
    store()
    {
            for file in $@; do
                    if [ -e "${file}" ]; then
                            echo "${file}:`cat ${file}`" >> "${CONF_FILE}"
                    fi
            done
    }
    
    do_nvpmodel()
    {
            case "${ACTION}" in
                    show)
                            NVPMODEL_BIN="/usr/sbin/nvpmodel"
                            NVPMODEL_CONF="/etc/nvpmodel.conf"
                            if [ -e "${NVPMODEL_BIN}" ]; then
                                    if [ -e "${NVPMODEL_CONF}" ]; then
                                            POWER_MODE="`nvpmodel -q | grep "NV Power Mode"`"
                                            echo "${POWER_MODE}"
                                    fi
                            fi
                            ;;
                    esac
    }
    
    do_fan()
    {
            TARGET_PWM="/sys/devices/pwm-fan/target_pwm"
            TEMP_CONTROL="/sys/devices/pwm-fan/temp_control"
            FAN_SPEED=255
    
            # Jetson-TK1 CPU fan is always ON.
            if [ "${machine}" = "jetson-tk1" ] ; then
                            return
            fi
    
            if [ ! -w "${TARGET_PWM}" ]; then
                    echo "Can't access Fan!"
                    return
            fi
    
            case "${ACTION}" in
                    show)
                            echo "Fan: speed=`cat ${TARGET_PWM}`"
                            ;;
                    store)
                            store "${TARGET_PWM}"
                            store "${TEMP_CONTROL}"
                            ;;
                    *)
                            if [ -w "${TEMP_CONTROL}" ]; then
                                    echo "0" > "${TEMP_CONTROL}"
                            fi
                            echo "${FAN_SPEED}" > "${TARGET_PWM}"
                            ;;
            esac
    }
    
    do_clusterswitch()
    {
            case "${ACTION}" in
                    show)
                            if [ -d "/sys/kernel/cluster" ]; then
                                    ACTIVE_CLUSTER=`cat /sys/kernel/cluster/active`
                                    echo "CPU Cluster Switching: Active Cluster ${ACTIVE_CLUSTER}"
                            else
                                    echo "CPU Cluster Switching: Disabled"
                            fi
                            ;;
                    store)
                            if [ -d "/sys/kernel/cluster" ]; then
                                    store "/sys/kernel/cluster/immediate"
                                    store "/sys/kernel/cluster/force"
                                    store "/sys/kernel/cluster/active"
                            fi
                            ;;
                    *)
                            if [ -d "/sys/kernel/cluster" ]; then
                                    echo 1 > /sys/kernel/cluster/immediate
                                    echo 0 > /sys/kernel/cluster/force
                                    echo G > /sys/kernel/cluster/active
                            fi
                            ;;
            esac
    }
    
    do_hotplug()
    {
            case "${ACTION}" in
                    show)
                            echo "Online CPUs: `cat /sys/devices/system/cpu/online`"
                            ;;
                    store)
                            for file in /sys/devices/system/cpu/cpu[0-9]/online; do
                                    store "${file}"
                            done
                            ;;
                    *)
                            if [ "${SOCFAMILY}" != "tegra186" -a "${SOCFAMILY}" != "tegra194" ]; then
                                    for file in /sys/devices/system/cpu/cpu*/online; do
                                            if [ `cat $file` -eq 0 ]; then
                                                    echo 1 > "${file}"
                                            fi
                                    done
                            fi
            esac
    }
    
    do_cpu()
    {
            FREQ_GOVERNOR="cpufreq/scaling_governor"
            CPU_MIN_FREQ="cpufreq/scaling_min_freq"
            CPU_MAX_FREQ="cpufreq/scaling_max_freq"
            CPU_CUR_FREQ="cpufreq/scaling_cur_freq"
            CPU_SET_SPEED="cpufreq/scaling_setspeed"
            INTERACTIVE_SETTINGS="/sys/devices/system/cpu/cpufreq/interactive"
            SCHEDUTIL_SETTINGS="/sys/devices/system/cpu/cpufreq/schedutil"
    
            case "${ACTION}" in
                    show)
                            for folder in /sys/devices/system/cpu/cpu[0-9]; do
                                    CPU=`basename ${folder}`
                                    idle_states=""
                                    for idle in ${folder}/cpuidle/state[0-9]; do
                                            idle_states+="`cat ${idle}/name`";
                                            idle_disable="`cat ${idle}/disable`"
                                            idle_states+="=$((idle_disable==0)) ";
                                    done
                                    if [ -e "${folder}/${FREQ_GOVERNOR}" ]; then
                                            echo "$CPU: Online=`cat ${folder}/online`" \
                                                    "Governor=`cat ${folder}/${FREQ_GOVERNOR}`" \
                                                    "MinFreq=`cat ${folder}/${CPU_MIN_FREQ}`" \
                                                    "MaxFreq=`cat ${folder}/${CPU_MAX_FREQ}`" \
                                                    "CurrentFreq=`cat ${folder}/${CPU_CUR_FREQ}`"\
                                                    "IdleStates: $idle_states";
                                    fi
                            done
                            ;;
                    store)
                            for file in \
                                    /sys/devices/system/cpu/cpu[0-9]/cpufreq/scaling_min_freq; do
                                    store "${file}"
                            done
    
                            for file in \
                                    /sys/devices/system/cpu/cpu[0-9]/cpuidle/state[0-9]/disable; do
                                    store "${file}"
                            done
                            ;;
                    *)
                            for folder in /sys/devices/system/cpu/cpu[0-9]; do
                                    cat "${folder}/${CPU_MAX_FREQ}" > "${folder}/${CPU_MIN_FREQ}" 2>/dev/null
                            done
    
                            for file in \
                                    /sys/devices/system/cpu/cpu[0-9]/cpuidle/state[0-9]/disable; do
                                    echo 1 > "${file}"
                            done
                            ;;
            esac
    }
    
    do_gpu()
    {
            case "${SOCFAMILY}" in
                    tegra194)
                            GPU_MIN_FREQ="/sys/devices/17000000.gv11b/devfreq/17000000.gv11b/min_freq"
                            GPU_MAX_FREQ="/sys/devices/17000000.gv11b/devfreq/17000000.gv11b/max_freq"
                            GPU_CUR_FREQ="/sys/devices/17000000.gv11b/devfreq/17000000.gv11b/cur_freq"
                            GPU_RAIL_GATE="/sys/devices/17000000.gv11b/railgate_enable"
                            ;;
                    tegra186)
                            GPU_MIN_FREQ="/sys/devices/17000000.gp10b/devfreq/17000000.gp10b/min_freq"
                            GPU_MAX_FREQ="/sys/devices/17000000.gp10b/devfreq/17000000.gp10b/max_freq"
                            GPU_CUR_FREQ="/sys/devices/17000000.gp10b/devfreq/17000000.gp10b/cur_freq"
                            GPU_RAIL_GATE="/sys/devices/17000000.gp10b/railgate_enable"
                            ;;
                    tegra210)
                            GPU_MIN_FREQ="/sys/devices/57000000.gpu/devfreq/57000000.gpu/min_freq"
                            GPU_MAX_FREQ="/sys/devices/57000000.gpu/devfreq/57000000.gpu/max_freq"
                            GPU_CUR_FREQ="/sys/devices/57000000.gpu/devfreq/57000000.gpu/cur_freq"
                            GPU_RAIL_GATE="/sys/devices/57000000.gpu/railgate_enable"
                            ;;
                    *)
                            echo "Error! unsupported SOC ${SOCFAMILY}"
                            exit 1;
                            ;;
            esac
    
            case "${ACTION}" in
                    show)
                            echo "GPU MinFreq=`cat ${GPU_MIN_FREQ}`" \
                                    "MaxFreq=`cat ${GPU_MAX_FREQ}`" \
                                    "CurrentFreq=`cat ${GPU_CUR_FREQ}`"
                            ;;
                    store)
                            store "${GPU_MIN_FREQ}"
                            store "${GPU_RAIL_GATE}"
                            ;;
                    *)
                            echo 0 > "${GPU_RAIL_GATE}"
                            cat "${GPU_MAX_FREQ}" > "${GPU_MIN_FREQ}"
                            ret=$?
                            if [ ${ret} -ne 0 ]; then
                                    echo "Error: Failed to max GPU frequency!"
                            fi
                            ;;
            esac
    }
    
    do_emc()
    {
            case "${SOCFAMILY}" in
                    tegra186 | tegra194)
                            EMC_ISO_CAP="/sys/kernel/nvpmodel_emc_cap/emc_iso_cap"
                            EMC_MIN_FREQ="/sys/kernel/debug/bpmp/debug/clk/emc/min_rate"
                            EMC_MAX_FREQ="/sys/kernel/debug/bpmp/debug/clk/emc/max_rate"
                            EMC_CUR_FREQ="/sys/kernel/debug/clk/emc/clk_rate"
                            EMC_UPDATE_FREQ="/sys/kernel/debug/bpmp/debug/clk/emc/rate"
                            EMC_FREQ_OVERRIDE="/sys/kernel/debug/bpmp/debug/clk/emc/mrq_rate_locked"
                            ;;
                    tegra210)
                            EMC_MIN_FREQ="/sys/kernel/debug/tegra_bwmgr/emc_min_rate"
                            EMC_MAX_FREQ="/sys/kernel/debug/tegra_bwmgr/emc_max_rate"
                            EMC_CUR_FREQ="/sys/kernel/debug/clk/override.emc/clk_rate"
                            EMC_UPDATE_FREQ="/sys/kernel/debug/clk/override.emc/clk_update_rate"
                            EMC_FREQ_OVERRIDE="/sys/kernel/debug/clk/override.emc/clk_state"
                            ;;
                    *)
                            echo "Error! unsupported SOC ${SOCFAMILY}"
                            exit 1;
                            ;;
    
            esac
    
            if [ "${SOCFAMILY}" = "tegra186" -o "${SOCFAMILY}" = "tegra194" ]; then
                    emc_cap=`cat "${EMC_ISO_CAP}"`
                    emc_fmax=`cat "${EMC_MAX_FREQ}"`
                    if [ "$emc_cap" -gt 0 ] && [ "$emc_cap" -lt  "$emc_fmax" ]; then
                            EMC_MAX_FREQ="${EMC_ISO_CAP}"
                    fi
            fi
    
            case "${ACTION}" in
                    show)
                            echo "EMC MinFreq=`cat ${EMC_MIN_FREQ}`" \
                                    "MaxFreq=`cat ${EMC_MAX_FREQ}`" \
                                    "CurrentFreq=`cat ${EMC_CUR_FREQ}`" \
                                    "FreqOverride=`cat ${EMC_FREQ_OVERRIDE}`"
                            ;;
                    store)
                            store "${EMC_FREQ_OVERRIDE}"
                            ;;
                    *)
                            cat "${EMC_MAX_FREQ}" > "${EMC_UPDATE_FREQ}"
                            echo 1 > "${EMC_FREQ_OVERRIDE}"
                            ;;
            esac
    }
    
    main ()
    {
            while [ -n "$1" ]; do
                    case "$1" in
                            --show)
                                    echo "SOC family:${SOCFAMILY}  Machine:${machine}"
                                    ACTION=show
                                    ;;
                            --store)
                                    [ -n "$2" ] && CONF_FILE=$2
                                    ACTION=store
                                    shift 1
                                    ;;
                            --restore)
                                    [ -n "$2" ] && CONF_FILE=$2
                                    ACTION=restore
                                    shift 1
                                    ;;
                            -h|--help)
                                    usage
                                    exit 0
                                    ;;
                            *)
                                    usage "Unknown option: $1"
                                    exit 1
                                    ;;
                    esac
                    shift 1
            done
    
            [ `whoami` != root ] && \
                    echo Error: Run this script\($0\) as a root user && exit 1
    
            case $ACTION in
                    store)
                            if [ -e "${CONF_FILE}" ]; then
                                    echo "File $CONF_FILE already exists. Can I overwrite it? Y/N:"
                                    read answer
                                    case $answer in
                                            y|Y)
                                                    rm -f $CONF_FILE
                                                    ;;
                                            *)
                                                    echo "Error: file $CONF_FILE already exists!"
                                                    exit 1
                                                    ;;
                                    esac
                            fi
                            ;;
                    restore)
                            if [ ! -e "${CONF_FILE}" ]; then
                                    echo "Error: $CONF_FILE file not found !"
                                    exit 1
                            fi
                            restore
                            exit 0
                            ;;
            esac
    
            do_hotplug
            do_clusterswitch
            do_cpu
            do_gpu
            do_emc
            do_fan
            do_nvpmodel
    }
    
    if [ -e "/sys/devices/soc0/family" ]; then
            CHIP="`cat /sys/devices/soc0/family`"
            if [[ "${CHIP}" =~ "Tegra21" ]]; then
                    SOCFAMILY="tegra210"
            fi
    
            if [ -e "/sys/devices/soc0/machine" ]; then
                    machine="`cat /sys/devices/soc0/machine`"
            fi
    elif [ -e "/proc/device-tree/compatible" ]; then
            if [ -e "/proc/device-tree/model" ]; then
                    machine="$(tr -d '\0' < /proc/device-tree/model)"
            fi
            CHIP="$(tr -d '\0' < /proc/device-tree/compatible)"
            if [[ "${CHIP}" =~ "tegra186" ]]; then
                    SOCFAMILY="tegra186"
            elif [[ "${CHIP}" =~ "tegra210" ]]; then
                    SOCFAMILY="tegra210"
            elif [[ "${CHIP}" =~ "tegra194" ]]; then
                    SOCFAMILY="tegra194"
            fi
    fi
    
    main $@
    exit 0
    
    展开全文
  • Jetson Xavier NX 开发者套件简介及系统烧录教程


    目录

    1.  Jetson Xavier NX介绍

    1.1 NX 性能

    1.2 硬件总览

    1.3 相关资料

    2. 系统烧录

    2.1 下载官方镜像

    2.2  格式化SD卡

    2.3 烧录系统

    3 测试


    1.  Jetson Xavier NX介绍

    Jetson Xavie NX开发人员套件将超级计算机的性能带到了边缘。它包括一个功能强大的紧凑型Jetson Xavier NX模块,用于AI边缘设备。它受益于新的云原生支持,可将NVIDIA软件堆栈加速至10W,其性能是其广泛采用的前身Jetson TX2的10倍以上。具有精确的多模式AI推理功能,可以开发和测试高能效,小尺寸解决方案,这为新的突破性产品打开了大门。开发人员现在可以利用云原生支持的优势,转变将AI软件开发和部署到边缘设备的经验。NVIDIA NGC提供的经过预先训练的AI模型以及NVIDIA Transfer Learning Toolkit,为经过训练和优化的AI网络提供了更快的途径。到Jetson设备的容器化部署还允许灵活,无缝的更新。整个NVIDIA软件堆栈都支持该开发人员工具包,包括加速的SDK和用于应用程序开发和优化的最新NVIDIA工具。当与紧凑型Jetson Xavier NX结合使用时,此强大的堆栈可帮助您为智慧城市,零售,制造业,物流,医疗保健,农业等领域创建创新的解决方案。


    1.1 NX 性能

    XAVIER 般的性能,NANO 般的大小。Jetson Xavier NX 只有 70 毫米 x 45 毫米,可以将 NVIDIA Xavier SoC 的强大性能封装到 Jetson Nano 大小的模块中。这个小巧的模块将卓越性能和功率优势与一组丰富的 IO(从高速 CSI 和 PCIe 到低速 I2C 和 GPIO)相结合。利用小巧体型、传感器丰富的接口和卓越性能,为您的所有嵌入式 AI 系统和边缘系统带来新功能。

    Jetson Xavier NX 在 10 瓦功率下可提供 14 TOPS,而在 15 瓦功率下可提供 21 TOPS,非常适合在大小和功率方面受限的系统。凭借 384 个 CUDA 核心、48 个 Tensor Core 和 2 个 NVDLA 引擎,它可以并行运行多个现代神经网络,并同时处理来自多个传感器的高分辨率数据。

    借助 Jetson Xavier NX,您可以使用完整的 NVIDIA 软件堆栈,通过加速库来运行现代 AI 网络和框架,从而实现深度学习以及计算机视觉、计算机图形、多媒体等。而且,它仍然能为当今嵌入式应用程序所需的传感器和外围设备留出更多功率预算。

    image.png

    Jetson Xavier NX 适用于无人机、便携式医疗设备、小型商业机器人、智能摄像头、高分辨率传感器、自动光学检测和其他 IoT 嵌入式系统等高性能 AI 系统。

    1.2 硬件总览

    具体规格参数见下图

    image.png

      Jetson可用于以高性能推理将各种流行的DNN模型和ML框架部署到边缘,以执行诸如实时分类和对象检测,姿势估计,语义分段和自然语言处理(NLP)之类的任务。 Jetson和NVIDIA离散GPU共同拥有JetPack SDK和NVIDIA CUDA-X,这意味着您可以轻松地将性能和尺寸,重量和功耗(SWaP)消耗降低至5W,而无需重新编写应用程序。图3显示了在Jetson Nano,Jetson TX2,Jetson Xavier NX和Jetson AGX Xavier以及JetPack 4.4 Developer Preview和TensorRT 7.1上流行的视觉DNN的推理基准,这些结果可以通过运行GitHub上打开jetson_benchmarks项目来重现。

    image.png

    在Jetson Xavier NX和Jetson AGX Xavier上,NVIDIA Deep Learn Accelerator(NVDLA)引擎和GPU以INT8精度同时运行,而在Jetson Nano和Jetson TX2上,GPU以FP16精度运行。Jetson Xavier NX的性能与Jetson TX2相比高出10倍,而功率却相同,占地面积却减少了25%。在这些基准测试期间,每个平台都以最高性能运行(Jetson AGX Xavier为MAX-N模式,Xavier NX和TX2为15W,Nano为10W)。这些基于视觉的任务的最大吞吐量是在批处理大小不超过15ms的延迟阈值的情况下获得的。—否则,对于平台超过此延迟阈值的网络,批处理大小为1。这种方法在实时应用程序的确定性低延迟要求与多流用例场景的最大性能之间取得了平衡。

    1.3 相关资料

    1. Jetson 下载中心https://developer.nvidia.com/zh-cn/embedded/downloads#?search=Jetson%20Xavier%20NX

    2. 开发者指南:https://developer.nvidia.com/zh-cn/embedded/downloads#?search=Jetson%20Xavier%20NX%20Developer%20Kit%20User%20Guide

    https://developer.download.nvidia.cn/assets/embedded/secure/jetson/Xavier%20NX/Jetson_Xavier_NX_Developer_Kit_User_Guide.pdf?ieKndoiO2oz-QvWcI8HmTOZYG0Mje1KJvcVur0mjfJ1myo7S_M-CQN2aBRbotzVNBR2SGqAH0T39vaNhsboiEvZLRfA7HDb6Fz7IC4xRfeqSX1oSrb-KTp-7Fg-P6TdAzzML68yN1NSDsN_DXQ4Rp-vexSsAJblHsGlSWRZx4IijNbMvdiylvktlutVcDEoO-mo3EgRK

    3. 性能对比:https://developer.nvidia.com/blog/bringing-cloud-native-agility-to-edge-ai-with-jetson-xavier-nx/

    4. Jetson FAQhttps://developer.nvidia.com/embedded/faq

    5. 维基百科https://elinux.org/Jetson_Xavier_NX

    6.Jetson开发者套件:

     https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/adaptation_and_bringup_xavier_nx.html


    2. 系统烧录

    2.1 下载官方镜像

    链接:https://developer.nvidia.com/zh-cn/embedded/downloads#?search=Jetson%20Xavier%20NX%20Developer%20Kit%20User%20Guide

    2.2  格式化SD卡


    要准备一张microSD卡,将microSD卡插入电脑或使用读卡器插入电脑,按照以下顺序进行操作。

    1.  下载,安装和启动适用于Win的sd卡格式化程序SD Formatter例如上图。
    2.  select card选择sd卡驱动器 对应的卷标
    3.  选择“快速格式”
    4.  将“卷标”留空
    5.  单击“格式”开始格式化,并在警告对话框中单击“是”
    6.  格式化以后sd卡就可以进行下一步的镜像刷写

    2.3 烧录系统

    打开Win32DiskImager,在imageFile那一栏右侧文件夹符号边上选择你SD卡对应的盘符号,然后点击蓝色小文件夹图标,打开你下载镜像的目录,镜像应该是解压完毕的名字叫sd-blob。点击打开以后再点击Win32DiskImager的Write按钮进行写入,写入完毕以后Windows会看不见,也无法读取SD卡,这是正常现象,因为系统已经刷进去了,文件系统不兼容了。此时将SD卡如下图插入NX后部卡槽待用即可。


    ———————————————

    3 测试

    SD卡装好了以后记得接好显示器的线,最后在接入官方配送的19V电源,记得手和金属物体不要碰NX的电路板以防止静电和短路导致电路损坏。这样就可以开机了,可以观察到绿色电源LED亮起,经过十几秒以后进入Ubuntu18.04的设置界面,选择好语言,时区,设置完密码以及链接WIFI以后就可以进入桌面尽情的玩耍了~~如下图所示。

    • 查看并接受NVIDIA Jetson软件EULA
    • 选择系统语言,键盘布局和时区
    • 连接到无线网络
    • 创建用户名,密码和计算机名
    • 登录

    选择系统语言时,选择“English”

    • 最后的界面如下

    展开全文
  • NVIDIA® Jetson Xavier™ NX brings AI supercomputer performance to the edge in a compact system-on-module (SOM) that’s smaller than a credit card. Jetson Xavier NX is built around a low-power version...
  • JETSON XAVIER NX系统迁移

    2022-01-14 21:19:32
    最近新入手一块EMMC版本的JETSON XAVIER NX,奈何淘宝上官方的载板太贵了,经货比三家选择了WeAct Studio工作室设计的载板,这款载板虽小但是“五脏俱全”,支持SD卡、NVME固态硬盘等。载板到手后,便着手于安装系统...


    前言

    最近新入手一块EMMC版本的JETSON XAVIER NX,奈何淘宝上官方的载板太贵了,经货比三家选择了WeAct Studio工作室设计的载板,这款载板虽小但是“五脏俱全”,支持SD卡、NVME固态硬盘等。载板到手后,便着手于安装系统,正好手边有一张128g的TF卡,便想把系统安装到TF卡上,但是使用这块载板并不能像xavier nx套件一样将镜像烧录到sd卡,插上就能开机,也不能使用nvidia sdkmanager将系统直接烧录到sd卡上,且工作室的文档也没介绍如何将镜像烧录到sd卡上,然后自己捣鼓了两天,最终通过系统迁移的方法成功把系统安装到了tf卡上,该方法虽然未测试过其他JETSON系列的产品,但是原理是一样的,应该都能适用。


    一、安装系统到板载EMMC

    工作室的安装系统的教程链接如下:WeAct Studio底板使用教程
    通过阅读使用教程可以知道,他们是通过修改官方镜像的设备树文件,使得系统能读取SD卡的。

    首先,需要安装nvidia官方的sdkmanager,下载的链接如下:SDKmanager
    下载后,安装到自己电脑上的Linux系统上,这里我的Linux系统版本是18.04。打开sdkmanager,界面如下:
    在这里插入图片描述选择相应的Target Hardware(我这里选择的是xavier nx)以及Jetpack版本(选择的最新的4.6版本),不要勾选Host Machine,然后点击continue:
    在这里插入图片描述
    勾选Jetson OS下载镜像,先不要勾选Jetson SDK Components,勾选I accep the… ,点击continue,开始下载镜像。下载完成后,可以看到Jetson OS image会显示OS image ready,同时,会在~/nvidia/nvidia_sdk/文件夹下有相应版本烧写所需要的文件,如下图所示:
    在这里插入图片描述
    接着,在WeAct Studio的github上下载相应的设备树文件:设备树
    不同设备对应不同的设备树:
    在这里插入图片描述我这里所需要的是XavierNX的设备树,因此,进入~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_XAVIER_NX_TARGETS/Linux_for_Tegra/kernel/dtb,将下载好的设备树tegra194-p3668-all-p3509-0000复制到该目录下。

    复制后,将板子按照步骤进入recover模式,并使用USB线将板子连接到电脑,若成功进入recover模式,在电脑终端中输入lsusb命令,会发现Nvidia Corp。

    通过命令进入到~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_XAVIER_NX_TARGETS/Linux_for_Tegra文件夹下,在该文件夹打开终端,输入如下命令进行刷机:

    sudo ./flash.sh jetson-xavier-nx-devkit-emmc mmcblk0p1 
    

    烧录成功:
    在这里插入图片描述对系统像安装Ubuntu系统时一样进行简单设置后,等待五分钟左右,系统就成功安装到了EMMC中了,并且成功进入了系统界面:
    在这里插入图片描述

    二、SD卡挂载

    系统迁移的前提是将SD卡挂载到系统下。
    先需要使用如下命令将SD卡格式化为EXT4格式:

    sudo mke2fs -t ext4 /dev/mmcblk1p1
    

    然后将SD卡挂载到/mnt下:

    sudo mount /dev/mmcblk1p1 /mnt
    

    使用df -h命令检查可以看到SD卡成功挂载到/mnt文件夹下:
    在这里插入图片描述

    三、系统迁移

    这里参考了github上jetson系统迁移到固态硬盘的方法:rootOnNVMe
    先通过终端命令:

    git clone https://github.com/jetsonhacks/rootOnNVMe
    

    下载脚本
    进入下载的文件夹,用文本编辑工具打开脚本copy-rootfs-ssd.sh:

    cd ~/rootOnNVMe-master
    sudo gedit copy-rootfs-ssd.sh
    

    将sudo mount /dev/nvme0n1p1 /mnt修改为刚挂载好的SD卡所在目录,我这里SD卡目录为/dev/mmcblk1p1,如下图所示:
    在这里插入图片描述在rootOnNVMe文件夹下打开终端,运行脚本copy-rootfs-ssd.sh复制系统到SD卡:

    ./copy-rootfs-ssd.sh
    

    复制完成后,运行脚本setup-service.sh配置启动项:

    ./setup-service.sh
    

    关机,让主板进入recover模式,并将数据线连接到烧录的电脑上

    在烧录的电脑上通过命令进入到~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_XAVIER_NX_TARGETS/Linux_for_Tegra文件夹下,在该文件夹打开终端,输入如下命令更新emmc内部引导(注意这里命令的最后目标是SD卡):

    sudo ./flash.sh jetson-xavier-nx-devkit-emmc mmcblk1p1 
    

    更新完成后,如下图所示:
    在这里插入图片描述重启系统,使用df -h查看磁盘情况如下:
    在这里插入图片描述可以看到系统已经成功迁移到SD卡中。

    总结

    这里的方法是我查阅很多资料重装了许多次系统并且结合了NVME迁移教程所测试出来的,虽未在其他jetson设备上测试过,但应该都能适用,大家迁移系统到U盘、NVME、SSD中只要将文中命令里我SD卡的文件夹位置替换为各自的硬盘位置即可。

    参考阅读:

    挂载教程
    迁移教程
    载板用户手册

    展开全文
  • Jetson Xavier NX下读取RTSP视频流

    千次阅读 2021-09-14 11:47:13
    现有一个网络摄像机,需要在Jetson Xavier NX平台上读取它的视频流进行图像处理,最基本的使用Opencv读取RTSP视频流代码如下: import cv2 cap = cv2.VideoCapture("rtsp://192.168.1.1:554/") while True: ret , ...
  • 一、刷机准备 烧录主机:Ubuntu16.04/... Linux Driver Package and the Root File System for TX2 and Xavier and Xavier_nx_3243.rar,这里面包含两个压缩包,Linux Driver Package和the Root File System。 1...
  • 文章目录NVIDIA Jetson Xavier NX禁用上电自启,使用按键开关机前言一、原理二、拓展 前言 NX默认上电自启,如果关机后不拔除电源,下次再启动开发板,需要先拔除电源再接入,十分麻烦。其实可以自己接一个按键...
  • 英伟达Jetson AGX参考设计,包含原理图PCB 和BOM,非常详细
  • 物理引脚与虚拟引脚的映射,要找到你要使用的IO口,通过计算公式,然后得到它的地址,才能操作。
  • Yolov-1-TX2上用YOLOv3训练自己数据集的流程(VOC2007-TX2-GPU) Yolov--2--一文全面了解深度学习性能优化加速引擎---TensorRT Yolov--3--TensorRT中yolov3性能优化加速(基于caffe) yolov-5-目标检测:YOLOv2算法...
  • 使用WiFi板与Jetson Xavier NX模块连接调试。 模块是BCM43455模块,使用的是SDIO接口。 dts定义如下: sdhci@3440000 { #address-cells = <1>; #size-cells = <0>; compatible = "nvidia,tegra...
  • 目前正在为Jetson NX定制载体板,有几个问题: (1)对输入电容似乎没有任何规定要求。 我在开发套件设计中看到输入端有3 x 330uF的tant -poly 是否只要求有>= 990uF电容? (2)计划使用Jetson Nano开发套件...
  • Jetson 基本笔录

    千次阅读 2022-01-19 20:52:07
    商业硬件路线, 2022年有64GB RAM的Xavier, 16GB RAM的Xavier NX, 32GB RAM的Orin, 12GB RAM的Orin NX. 工业硬件路线 Jetpack软件路线, 2022第一季度会发布Jetpack 5.0(Linux内核5.10, 发行版Ubuntu20.04)...
  • Nvidia Xavier GPIO 输入输出 中断 PWM

    千次阅读 2019-11-13 21:51:52
    文章目录前言Jetson.GPIO安装可用引脚点亮LEDGPIO输出示例GPIO输入示例GPIO EventGPIO InterruptPWM微信公众号 前言 Nvidia Jetson AGX Xavier 硬件相关 这篇讲到Xavier的40Pin扩展口和树莓派的40Pin扩展口类似, 本...
  • TX2安装keras+tensorflow2

    2021-09-25 23:43:30
    Jetson Xavier NX/TX2/Nano更换源(清华源/中科大源)(arm64架构) 灰溜溜把源恢复了,结果成功了???!!! 所以折腾一下午是啥。。哭辽。 请忽略以上,仅作个人记录 不换源执行命令 1、执行 sudo apt-get ...
  • 了解CV和RoboMaster视觉组(四)视觉组使用的硬件

    千次阅读 多人点赞 2021-10-06 15:40:14
    和人眼的成像原理一样,相机通过镜头汇聚光束使他们聚集在一块半导体感光元件上(相当于视网膜)从而产生可供读取的数据。随后图像随着数据线传如miniPC等运算平台(视网膜刺激视神经传到神经冲动到大脑)。时下的...
  •  Jetson TX2——适用于边缘设备 AI 应用的 Jetson TX2 嵌入式模块现在有三个版本:Jetson TX2 (8GB)、Jetson TX2i 和 Jetson TX2 4GB。 Jetson AGX Xavier——该计算机具有六个计算机主板,用于处理传感器数据和...
  • 2020年最好的机器人学仿真工具软件汇总

    千次阅读 多人点赞 2020-03-18 15:28:25
    它还支持NVIDIA Jetson AGX Xavier,Jetson TX2Jetson Nano。由于ISAAC机器人技术平台是由NVIDIA制造的,因此它提供了所有机器人模拟仿真器中最好的图形。它还对更复杂的任务(例如机器学习和数据处理)具有更好的...
  • kirin 980 CPU Jetson Nano Jetson Xavier NX Jetson TX2 Xilinx ZCU104 ncnn Xilinx ZCU104 1: Onnx-simplifier ... Just open the webpage, choose ONNX as the output format, check the onnx simplifier and then ...
  • 分以下几种,主要是针对NVIDIA平台Xavier/TX2板: 1.模拟相机视频输入方案 2.CSI MIPI相机视频输入方案 3.USB相机视频输入方案 4.车载ADAS相机视频输入方案 二. 方案对比 1.模拟相机视频输...
  • 主题:EasyDL—Jetson Nano部署方案技术解析 时间:2020年5月28日 讲师:百度AI开发平台部高级研发工程师 川峰 课程大纲: 1. EasyDL专业版技术原理介绍 2. 训练并部署模型到Jetson Nano演示 【EasyDL专业版技术原理...
  • 3.1 General principle of model scaling 在设计有效的模型缩放方法时,我们的主要原理是,当缩放比例增大/减小时,要增加/减少的定量成本越低/越高,效果越好。在本节中,我们将体现和分析各种通用的CNN模型,并...
  • 2 卸载OpenCV 忽略此步骤,参考下面 2020.10.12更新的内容 参考Jetson TX2 卸载并安装OpenCV3.4.0,使用以下命令: sudo apt-get purge libopencv* sudo apt autoremove sudo apt-get update 只删除了usr/lib/aarch...
  • Intel CPU在运行视觉导航等算法时实时性要优于Nvidia等平台,如Jetson Tx2NX。而Nvidia平台在运行深度学习算法方面具有很大优势,两种平台各有利弊。但是,Intel OpenVINO的推出允许NUC平台实时运行深度学习模型,...
  • 1km(数传一体组网链路) 无人机飞控:PX4/APM 机载计算机:Nvidia Jetson TX2(后续升级Nvidia Jeston Xavier NX) 无人机定位方式:GPS/RTK(后续升级)/UWB/Mocap(动作捕捉) 支持功能:模式控制,集群控制,...
  • 英文标题:Performance Modeling of the Sparse Matrix-vector Product via...这其实是一件很有趣的事情,假设A∈Rm×nA\in\R^{m\times n}A∈Rm×n,以及x∈Rnx\in\R^nx∈Rn,现在想要计算AxAxAx,显然我们正常来算的..

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

jetson tx2 nx原理图

友情链接: 7.rar