当前位置:   article > 正文

【NVIDIA Jetpack6.0】Jetson AGX Orin内核、设备树更新指南_jetson xavier nx jetpack 6.0 历史版本

jetson xavier nx jetpack 6.0 历史版本

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

本人就职于国际知名终端厂商,负责modem芯片研发。
5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。


博客内容主要围绕:
       5G/6G协议讲解
       算力网络讲解(云计算,边缘计算,端计算)
       高级C语言讲解
       Rust语言讲解



2024年5月4号,nvidia正式发布了Jetpack6.0版本,这个版本带来了很多功能,包括:

  • 新的cude、tensorrt等库,可以大幅提升AI推理性能(亲测提升很明显,所以才考虑从Jetpack5.1升级到最新版本);
  • 可以使用UpStreaming Linux内核版本,并且提供了实时内核;
  • 根文件系统升级到了Ubuntu2204;

【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南

Jetson AGX Orin内核、设备树更新指南

       这篇文章主要介绍如何手动更新内核和设备树文件,不会再介绍如何使用sdkmanage工具刷机,如果需要可以参考 【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南如果不知道如何下载最新的BSP代码、内核代码和工具链也请参考上面的链接,不再赘述。

一、下载工具包和内核源码

请参考 【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南

二、准备编译环境

请参考 【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南

三、编译内核

3.1 修改内核参数

       上一版本中需要手动修改tegra_defconfig文件,新版本中不需要手动修改了,NVIDIA提供了一个脚本,可以方便的开启或者关闭某个Feature,相关命令如下所示:

cd path/to/Linux_for_Tegra/source

./kernel/kernel-jammy-src/scripts/config --file "./kernel/kernel-jammy-src/arch/arm64/config/defconfig" --enable CONFIG_NO_HZ_FULL

./kernel/kernel-jammy-src/scripts/config --file "./kernel/kernel-jammy-src/arch/arm64/config/defconfig" --disable CONFIG_NO_HZ_FULL
  • 1
  • 2
  • 3
  • 4
  • 5

解释一下上面的命令,

  1. 进入下载的内核文件夹中;
  2. 执行./kernel/kernel-jammy-src/scripts/config脚本,其中--file指定使用的内核配置文件,--enabledisable指定要开启或者关闭的Feature;

3.2 修改设备树文件

       上一版本中我们修改了默认的设备树文件,这样不太优雅。这次我们自定义一个设备树文件。

首先,我们以NVIDIA提供的设备树文件作为base,

cd path/to/Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/nv-platform

cp tegra234-p3737-0000+p3701-0005-nv.dts tegra234-p3737-0000+p3701-0005-csrs.dts
  • 1
  • 2
  • 3

编译tegra234-p3737-0000+p3701-0005-csrs.dts文件,关闭PCIe的IOMMU功能,

cat <<EOF > tegra234-p3737-0000+p3701-0005-csrs.dts

#include "tegra234-p3737-0000+p3701-0005-nv.dts"
/*C5 X8 rp*/
pcie@141a0000{
	/delete-property/ iommus;
	/delete-property/ iommu-map;
	/delete-property/ dma-coherent;
	/delete-property/ iommu-map-mask;
	/delete-property/ vpcie3v3-supply;
};

/*C5 X8 ep*/
pcie-ep@141a0000{
	/delete-property/ iommus;
	/delete-property/ iommu-map;
	/delete-property/ dma-coherent;
	/delete-property/ iommu-map-mask;
	/delete-property/ vpcie3v3-supply;
};
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

修改当前目录下的Makefile文件,增加编译选项,

vim Makefile

#add

dtb-y += tegra234-p3737-0000+p3701-0005-csrs.dtb
  • 1
  • 2
  • 3
  • 4
  • 5

之后不需要我们手动编译,在编译内核的时候会自动编译,编译后的文件就在kernel_output/nvidia-oot/device-tree/platform/generic-dts/dtbs

3.3 编译内核及外部模块

       首先需要定义交叉编译工具链的地址,

export CROSS_COMPILE=path/to/aarch64--glibc--stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-
  • 1

然后定义内核的编译输出路径

export kernel_output=$HOME/kernel_output
  • 1

运行NVIDIA提供的脚本开始编译内核,

cd path/to/Linux_for_Tegra/source

./nvbuild -o ${kernel_output}
  • 1
  • 2
  • 3

3.4 安装内核及外部模块

       首先需要定义安装路径,

export INSTALL_MOD_PATH=$HOME/jetson_update
  • 1

运行NVIDIA提供的脚本开始安装内核和模块,

cd path/to/Linux_for_Tegra/source

./nvbuild -i -o ${kernel_output}
  • 1
  • 2
  • 3

3.5 切换实时内核

       运行下面的命令会自动打上RT Patch,并开始编译RT内核,

cd path/to/Linux_for_Tegra/source

./nvbuild -r -o ${kernel_output}
  • 1
  • 2
  • 3

四、编译NVIDIA驱动

       不需要手动操作了,在通过NVIDIA提供的nvbuild.sh脚本编译内核的时候,会自动编译Out of Tree模块。然后在安装内核和模块的时候,会自动复制到正确的位置,也不需要我们手动复制了。

五、更新内核和设备树文件

5.1 使用官方flash.sh脚本刷新系统

请参考 【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南

5.2 只更新内核和设备树(非刷机方式)

  1. 修改Jetson设备中的/boot/extlinux/extlinux.conf文件

    TIMEOUT 100
    DEFAULT primary
    
    MENU TITLE L4T boot options
    
    LABEL primary
          MENU LABEL primary kernel
          LINUX /boot/Image
          FDT /boot/dtb/tegra234-p3737-0000+p3701-0005-csrs.dtb
          INITRD /boot/initrd
          APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 mminit_loglevel=4 console=ttyTCU0,115200 console=ttyAMA0,115200 firmware_class.path=/etc/firmware fbcon=map:0 net.ifnames=0 
    
    LABEL backup
          MENU LABEL primary kernel
          LINUX /boot/Image.backup
          FDT /boot/dtb/kernel_tegra234-p3737-0000+p3701-0005-csrs-nv.dtb
          INITRD /boot/initrd
          APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 mminit_loglevel=4 console=ttyTCU0,115200 console=ttyAMA0,115200 firmware_class.path=/etc/firmware fbcon=map:0 net.ifnames=0 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  2. 将生成的${jetson_update}/boot/Image文件替换Jetson设备中的/boot/Image文件

  3. 将生成的设备树文件${jetson_update}/boot/dtb/tegra234-p3737-0000+p3701-0005-csrs.dtb放到Jetson设备中的/boot/dtb/文件夹

  4. 将生成的${jetson_update}/lib/modules下的整个文件夹,拷贝到Jetson设备的/lib/modules文件夹下

  5. 将内核的符号表文件${kernel_output}/kernel/kernel-jammy-src/Module.symvers拷贝到Jetson设备的/usr/src/linux-headers-5.15.136-tegra-ubuntu22.04_aarch64/3rdparty/canonical/linux-jammy/kernel-source/Module.symvers

  6. 在Jetson设备上运行sudo nv-update-initrd,更新initrdfs

  7. 重启Jetson设备

  8. 重启后修改jetson设备中/lib/modules/`uname -r`的软链接,

    sudo ln -snf /usr/src/linux-headers-5.15.136-tegra-ubuntu22.04_aarch64/3rdparty/canonical/linux-jammy/kernel-source /lib/modules/`uname -r`/build
    
    • 1

这里不需要再执行sudo depmod -a,这个bug已经修复了



在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/663789
推荐阅读
相关标签
  

闽ICP备14008679号