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

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

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


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

文章目录

  • Jetson AGX Orin内核、设备树更新指南
    • 一、下载工具包和内核源码
    • 二、准备编译环境
    • 三、编译内核
      • 3.1 修改内核参数
      • 3.2 修改设备树文件
      • 3.3 编译内核及外部模块
      • 3.4 安装内核及外部模块
      • 3.5 切换实时内核
    • 四、编译NVIDIA驱动
    • 五、更新内核和设备树文件
      • 5.1 使用官方flash.sh脚本刷新系统
      • 5.2 只更新内核和设备树(非刷机方式)



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. 执行./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-platformcp 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#adddtb-y += tegra234-p3737-0000+p3701-0005-csrs.dtb

之后不需要我们手动编译,在编译内核的时候会自动编译,编译后的文件就在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-

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

export kernel_output=$HOME/kernel_output

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

cd path/to/Linux_for_Tegra/source./nvbuild -o ${kernel_output}

3.4 安装内核及外部模块

       首先需要定义安装路径,

export INSTALL_MOD_PATH=$HOME/jetson_update

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

cd path/to/Linux_for_Tegra/source./nvbuild -i -o ${kernel_output}

3.5 切换实时内核

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

cd path/to/Linux_for_Tegra/source./nvbuild -r -o ${kernel_output}

四、编译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 primaryMENU TITLE L4T boot optionsLABEL primaryMENU LABEL primary kernelLINUX /boot/ImageFDT /boot/dtb/tegra234-p3737-0000+p3701-0005-csrs.dtbINITRD /boot/initrdAPPEND ${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 backupMENU LABEL primary kernelLINUX /boot/Image.backupFDT /boot/dtb/kernel_tegra234-p3737-0000+p3701-0005-csrs-nv.dtbINITRD /boot/initrdAPPEND ${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 
  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
    

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



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/692026.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux-IMX6ULL-DDR3简介测试-RGBLCD控制原理】

目录 1. DDR3 简介1.1 前要基本概念RAM & ROM 2. DDR3测试及初始化3. RGBLCD简介及控制原理3.1 RGBLCD简介3.2.1 RGB LCD时序3.2.2 像素时钟&#xff08;800*400分辨率&#xff09;3.2.2 显存&#xff08;800*400分辨率&#xff09; 3.3 RGBLCD的控制3.3.1 DOTCLK 硬件接口…

关于Hash表,你不得不知道的知识点

定义&#xff1a; 哈希表是根据关键码值(Key value)而直接进行访问的数据结构。也就是说&#xff0c;它通过把关键码值映射到表中一个位置来访问记录&#xff0c;以加快查找的速度。这个映射函数叫做散列函数&#xff0c;也称为hash函数&#xff0c;存放记录的数组叫做散列表。…

按键的短按、长按和连续的划分

在实际生活中&#xff0c;我们使用到的按键在短按、长按和按键松开时都会触发不同的功能。按键短按后松开和长按后松开的应用比短按和长按的应用较少&#xff0c;我了解的按键短按后松开和长按后松开的应用是在点动控制和长动控制中。这里主要讨论按键的短按、长按和连续这三种…

类型注解-Python

师从黑马程序员 类型注解的语法 类型注释的限制 import json import randomvar_1 : int10 var_2 : str"itheima" var_3 : boolTrueclass Student:pass stu :StudentStudent()my_list:list [1,2,3] my_tuple:tuple(1,2,3) my_dict:dict{"itheima":666}my_l…

1060: 无向图的最大度计算

解法&#xff1a; #include<iostream> #include<vector> using namespace std; int arr[100][100]; int main() {int n, max 0;cin >> n;vector<int> sum(n, 0);for (int i 0; i < n; i) {for (int j 0; j < n; j) {cin >> arr[i][j];…

SSRF服务器端请求伪造

漏洞原理 SSRF挖掘 SSRF具体利用 SSRF具体验证 SSRF防御与绕过 漏洞原理 这个漏洞允许攻击者去利用服务端的功能&#xff0c;来请求其他网络资源 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是指攻击者能够从易受攻击的 Web应用程序发送精心设计的请求的对其他网站…

【三十一】springboot+easyExcel实现多文件导出压缩包

互相交流入口地址 整体目录&#xff1a; 【一】springboot整合swagger 【二】springboot整合自定义swagger 【三】springboot整合token 【四】springboot整合mybatis-plus 【五】springboot整合mybatis-plus 【六】springboot整合redis 【七】springboot整合AOP实现日志操作 【…

基于微信小程序的预约挂号系统(源码)

博主介绍&#xff1a;✌程序员徐师兄、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…

队列的相关操作:用队列实现栈

1.思路解析 由于C语言封装度不是很高&#xff0c;不像C可以直接用现成的&#xff0c;所以我们要自己做一个“轮子”&#xff0c;即自己实现一个队列&#xff0c;这里直接放出代码&#xff0c;详解可以移步到我的另一篇关于队列的博客&#xff0c;点我移步&#xff0c;原题来源于…

【JS红宝书学习笔记】第1、2章 初识JS

第1章 什么是JavaScript JavaScript 是一门用来与网页交互的脚本语言&#xff0c;包含以下三个组成部分。 ECMAScript&#xff1a;由 ECMA-262 定义并提供核心功能。文档对象模型&#xff08;DOM&#xff09;&#xff1a;提供与网页内容交互的方法和接口。浏览器对象模型&…

微信公众号接入chatGPT自动回复(2)

微信公众平台 配置自动回复的服务器 application.properties中的配置 验证服务器接口配置 其实就两个接口(相同的url地址,只不过请求方式不一样) 1.验证接口(get请求) 2.自动回复接口(post请求) 完整代码 这个地址就是上面URL配置的地址 如果使用Nginx的话自动配置 将该代…

从0开始学python(七)

目录 前言 1 break、continue和pass函数 1.1 break 1.2 continue 1.3 pass 2、序列的索引及切片操作 2.1字符串的索引和切片 2.1.1 字符串索引 2.1.2 字符串切片 总结 前言 上一篇文章我们介绍了python中的循环结构&#xff0c;包括for和while的使用。本章接着往下讲。…