deaz
1
我在下载bsp文件后按照手册指示的进行解压
tar xpf jetson_linux_<版本>_aarch64.tbz2
sudo tar xpf tegra_linux_sample-root-filesystem_<版本>_aarch64.tbz2 -C l4t/rootfs/
sudo ./apply_binaries.sh
然后在该bsp的目录下进行ota工具的解压
同时声明了升级的信息
export BASE_BSP=/home/username/R32.7.3/Linux_for_Tegra
export TARGET_BSP=/home/username/R35.4.1/Linux_for_Tegra
然后通过 sudo./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh jetson-agx-orin-devkit R35-4执行OTA包的生成但是在生成的时候我这边并没有成功
上面 export BASE_BSP 中的版本要与 /etc/nv_tegra_release 输出的版本结果一致。
deaz
3
这些我都设置了,最后发现是python的软连接的问题,另外我想问一下如何将public里编译出来的image和device-tree跑的那个dtb进行替换然后一起打包进ota包里呢?是将rootfs目录下的image和kerne_xxx_xxx.dtb进行替换吗?
Hyan
4
把源码里编译的 ”Image“ ".dtb" 替换 $TARGET_BSP/kernel/Image $TARGET_BSP/kernel/dtb/*.dtb , 然后执行 sudo./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh jetson-agx-orin-devkit R35-4
这样就可以打包到ota payload里面。
1 个赞
deaz
5
你好,我想问下为什么生成的OTA包在板子上进行升级的时候会提示我的版本不匹配呢?
可以参考这篇文章
这里以 Orin Nano 为例,升级当前的 JetPack 5.1.3 到 6.0版本。
其思路是先生成分别生成原版本的完整系统镜像,再去生成OTA包(根据旧/新系统镜像生成增量升级包)。l4t_generate_ota_package.sh 需要知道当前,和目标版本,才能计算出差异生成包 ota_payload_package.tar.gz。
对于你的当前的Jetson 要确定是 Xavier 系列还是 Orin 系列,查看 JetPack Archive | NVIDIA Developer, 找到对应的 JetPack 版本,BASE_BSP 和要升级到的目标 JetPack版本。要确定 Jetson是否支持某个系列,如 Orin 系列不支持 JetPack 4.x (其中包含 L4T 32.x)。
deaz
7
deaz
8
另外我使用的是jetson AGX ORIN 在资料中并没有该设备的一些参数
这篇文档的步骤可以从 AGX Orin 上从 5.1.2 升级到 5.1.4;注意文档中
https://docs.nvidia.com/jetson/archives/r35.6.0/DeveloperGuide/SD/SoftwarePackagesAndTheUpdateMechanism.html#steps-performed-on-the-host-machine
R32.7.3 只是一个示例,要查看/etc/nv_tegra_release 输出,如
# R35 (release), REVISION: 4.1, GCID: 33958178, BOARD: t186ref, EABI: aarch64, DATE: Tue Aug 1 19:57:35 UTC 2023
则
export BASE_BSP=/home/username/R35.4.1/Linux_for_Tegra
export TARGET_BSP=/home/username/R35.6.0/Linux_for_Tegra #对应 JetPack 5.1.4
deaz
11
是的,我目前正在按照这个文档中的步骤进行,目前还没有构建完成,如果后续构建有问题我会向你提问,另外我想问下如果ota去升级的话能否进行AB差分升级?如果可以的话我想查看一下官方的手册或者官方给的一些技术支持,感谢你的回答
deaz
12
你好我按照这个步骤进行的ota升级从5.1.2>5.1.4的升级为什么输出的内核版本并没有发生更改
看一下这个命令的输出是否为 R35 (release), REVISION: 6.0
也可以用这个命令查看 dpkg -l | grep nvidia-l4t-kernel 是不是 35.6.x-
deaz
14
是的,输出的结果是35.6.x,但是为什么我对一些外设的更改同时打包进来的没有发生改变呢
deaz
15
经过查看我发现boot/dtb里面有两个dtb,为什么会发生这样的事情呢?
deaz
16
如果我要替换的是目标载板boot/dtb下的那个dtb应该替换那里然后进行打包进ota
你可以用 ``` 开始/结束 把输出格式化 (粘贴截图无法复制其中的文本)。这样方便我们检查。如下
代码格式化
修改的是 TARGET_BSP 里 rootfs 的 /boot/dtb/xxx.dtb
在 TARGET_BSP 中替换 dtb 的位置
-
在 PC 上解压/准备好 Linux_for_Tegra 目录,并把 target rootfs(5.1.4)同步好(即文档里的 ${TARGET_BSP} 环境)。
-
将你编译好的新 dtb 覆盖到 TARGET 根文件系统里的 /boot/dtb/ ,路径与目标板一致,例如:${TARGET_BSP}/rootfs/boot/dtb/kernel_tegra234-p3701-0004-p3737-0000.dtb 。
-
如果你也需要更新 /boot 下的同名 dtb(有的版本会从 /boot 自身再拷贝到 /boot/dtb ),可以同时在 ${TARGET_BSP}/rootfs/boot/ 下放一份同名 dtb。
这样生成 OTA 时,这个新的 dtb 就会随着 rootfs 分区一起打包进 OTA payload
生成并应用 OTA 包
在完成 dtb 替换后,按文档运行:
-
sudo -E ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh <target_board> <bsp_version> 生成 ota_payload_package.tar.gz
-
把这个包放到目标板(例如 /ota/ ),用 nv_ota_start.sh /ota/ota_payload_package.tar.gz 触发 OTA。
-
OTA 完成重启后,再次检查 /boot/dtb/ 和 /boot/extlinux/extlinux.conf,确认 FDT 指向的就是你替换后的 dtb。
deaz
18
你的意思是否是将在/home/user/public/Linux_for_Tegra/source/public/kernel_out/arch/arm64/boot/dts/nvidia里编译出来的tegra234-p3701-0004-p3737-0000.dtb和image替换为BSP下L4T/rootfs/dtb/下的kernel_tegra234-p3701-0004-p3737-0000.dtb与image呢?
是的。注意路径要和 extlinux 里的一致,如
FDT /boot/dtb/kernel_tegra234-p3701-0004-p3737-0000.dtb
拷贝到 TARGET_BSP 的 rootfs
Image 覆盖到:
${L4T}/rootfs/boot/Image
DTB 覆盖到:
${L4T}/rootfs/boot/dtb/kernel_tegra234-p3701-0004-p3737-0000.dtb
要是 /boot 目录下也有同名的 dtb 也可以更新一份
${L4T}/rootfs/boot/kernel_tegra234-p3701-0004-p3737-0000.dtb
然后用替换的 Image 和 DTB 的 ${L4T} 去生成 OTA 包,目标板 OTA 升级后 /boot 和 /boot/dtb 就会更新成这套新的 Image + dtb。
deaz
20