赞
踩
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。
博客内容主要围绕:
5G/6G协议讲解
算力网络讲解(云计算,边缘计算,端计算)
高级C语言讲解
Rust语言讲解
2024年5月4号,nvidia正式发布了Jetpack6.0版本,这个版本带来了很多功能,包括:
- 新的cude、tensorrt等库,可以大幅提升AI推理性能(亲测提升很明显,所以才考虑从Jetpack5.1升级到最新版本);
- 可以使用UpStreaming Linux内核版本,并且提供了实时内核;
- 根文件系统升级到了Ubuntu2204;
这篇文章主要介绍如何手动更新内核和设备树文件,不会再介绍如何使用sdkmanage
工具刷机,如果需要可以参考 【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南。如果不知道如何下载最新的BSP代码、内核代码和工具链也请参考上面的链接,不再赘述。
请参考 【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南
请参考 【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南
上一版本中需要手动修改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
解释一下上面的命令,
./kernel/kernel-jammy-src/scripts/config
脚本,其中--file
指定使用的内核配置文件,--enable
和disable
指定要开启或者关闭的Feature;上一版本中我们修改了默认的设备树文件,这样不太优雅。这次我们自定义一个设备树文件。
首先,我们以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
编译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
修改当前目录下的Makefile
文件,增加编译选项,
vim Makefile
#add
dtb-y += tegra234-p3737-0000+p3701-0005-csrs.dtb
之后不需要我们手动编译,在编译内核的时候会自动编译,编译后的文件就在kernel_output/nvidia-oot/device-tree/platform/generic-dts/dtbs
首先需要定义交叉编译工具链的地址,
export CROSS_COMPILE=path/to/aarch64--glibc--stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-
然后定义内核的编译输出路径
export kernel_output=$HOME/kernel_output
运行NVIDIA提供的脚本开始编译内核,
cd path/to/Linux_for_Tegra/source
./nvbuild -o ${kernel_output}
首先需要定义安装路径,
export INSTALL_MOD_PATH=$HOME/jetson_update
运行NVIDIA提供的脚本开始安装内核和模块,
cd path/to/Linux_for_Tegra/source
./nvbuild -i -o ${kernel_output}
运行下面的命令会自动打上RT Patch,并开始编译RT内核,
cd path/to/Linux_for_Tegra/source
./nvbuild -r -o ${kernel_output}
不需要手动操作了,在通过NVIDIA提供的nvbuild.sh
脚本编译内核的时候,会自动编译Out of Tree模块。然后在安装内核和模块的时候,会自动复制到正确的位置,也不需要我们手动复制了。
请参考 【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南
修改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
将生成的${jetson_update}/boot/Image
文件替换Jetson设备中的/boot/Image
文件
将生成的设备树文件${jetson_update}/boot/dtb/tegra234-p3737-0000+p3701-0005-csrs.dtb
放到Jetson设备中的/boot/dtb/
文件夹
将生成的${jetson_update}/lib/modules
下的整个文件夹,拷贝到Jetson设备的/lib/modules
文件夹下
将内核的符号表文件${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
在Jetson设备上运行sudo nv-update-initrd
,更新initrdfs
重启Jetson设备
重启后修改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
这里不需要再执行sudo depmod -a,这个bug已经修复了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。