andorno
September 20, 2023, 11:05am
1
我已经完成了从R32.6.1至R35.4.1基于image的OTA升级,也成功完成了自定义的APP分区118G的rootfs的OTA升级,但是我安装了nvidia-jetpack之后根文件系统rootfs有16G,用这个rootfs替换BSP包中的rootfs之后在执行生成otapayload包的命令时会提示错误,我附上了一些操作步骤在下面ota_payload.log中,如下:
ota_payload.log (7.0 MB)
我安装完nvidia-jetpack之后按照Flashing Support — Jetson Linux Developer Guide documentation
里的1-4步骤完成rootfs的克隆
,然后用 $ sudo -t ext4 -o loop system.img.raw /自己的OTA BSP路径/rootfs/,然后执行生成ota_payload包的命令,执行过程中会报错
挂载的/home/uii/NX/OTA_35.4.1/Linux_for_Tegra/bootloader/mnt最大只能14G吗?这个大小是固定的吗?或者这个问题有什么解决方法吗?
是否方便提供你在第2步驟時所使用的完整command?
andorno
September 21, 2023, 5:41am
4
第二步执行的命令是
$ cd Linux_for_Tegra
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --initrd jetson-xavier-nx-devkit-emmc nvme0n1p1
麻煩改為使用mmcblk0p1 for <rootdev>,因為你要用dd command來clone NVMe上的partition,複製當前正在使用的partition會造成clone不完整的問題,所以在這個步驟你要用mmcblk0p1來load initrd
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --initrd jetson-xavier-nx-devkit-emmc mmcblk0p1
andorno
September 21, 2023, 7:53am
6
第4步用dd if=/dev/nvme0n1p1 of=/mnt/system.img.raw 来备份NVME分区是吗?
對,這邊讓我提供下我們驗證過的流程(clone rootfs from NVMe)給你參考,看你最後是否可以將system.img.raw mount起來
1. Set the board to force-recovery mode
2. Follow the instructions
[Host]
$ cd Linux_for_Tegra
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --initrd jetson-xavier-nx-devkit-emmc mmcblk0p1
[Board]
(plug USB drive)
$ mount /dev/sda1 /mnt
$ dd if=/dev/nvme0n1p1 of=/mnt/system.img.raw
$ sync
$ umount /mnt
3. Test
[Host]
(plug USB drive and copy system.img.raw to PC)
$ sudo mount -t ext4 -o loop system.img.raw /mnt
andorno
September 22, 2023, 9:15am
8
我根据您给的步骤做的,还是出现一样的问题,备份的NVME根文件系统rootfs可以在主机上正常加载,只不过会有15G的大小。
在执行了$ sudo -E ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh --external-device nvme0n1 -S 118GiB jetson-xavier-nx-devkit-emmc R32-6这条命令后还是会报Faild. Your APPSIZE might be too small.
在执行生成otapayload包的这条命令过程中加载的bootloader/mnt会用完14G 用了100% 而过程还没结束,还需要更多的存储,感觉问题好像出在了这里在这里,如果这里没有用完14G应该不会失败。
麻煩先幫忙檢查下生成出來的system.img.raw的大小為何?
重新看了下你的流程,如果要用自己的rootfs來生成OTA package,並不是把它先mount到<Linux_for_Tegra>/rootfs/底下,而是將它複製到<Linux_for_Tegra>/bootloader/system.img.raw .
詳細流程你可以參考Linux_for_Tegra/tools/ota_tools/version_upgrade/Image_based_OTA_Examples.txt 文件的2. Using golden image in OTA update.
這看起來和你換了system.img.raw無關,還是和你環境的設定比較有關,確認是否因為有用sudo而造成它抓不到這個變數(BASE_BSP).
另外,請提供下目前產生出來system.img.raw的大小是多少? 它必須和你-S
後面給的大小相等
沒問題,請用它來替換掉原 BSP package 下的 <Linux_for_Tegra>/bootloader/system.img.raw .
andorno
September 26, 2023, 5:30am
14
我替换掉原 BSP package 下的 <Linux_for_Tegra>/bootloader/system.img.raw 之后在root用户权限下通过
./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 118GiB jetson-xavier-nx-devkit-emmc R32-6 成功生成了ota_payload包,然后我把ota_payload包拷贝到R32.6.1的设备上执行OTA在线升级,下面是执行的log:
ota_20230925-211532.log (9.5 KB)。
执行结束后设备重启的log如下:
putty20230925.log (2.7 MB)
提示设备存储空间不足。
Do write APP action
eval ROOTFS_PARTITION=/dev/mmcblk0p1
rootfs_disk=/dev/mmcblk0 rootfs_part=/dev/mmcblk0p1
...
Failed to decompress rootfs image into /dev/mmcblk0p1
從你的fail log看起來他想把rootfs放到mmcblk0p1而不是nvme0n1p1
請對照之前可以成功更新(未換system.img.raw)時的command和log
Hi,KevinFFF,我试了还是同样的错误。有一点想不通,为啥刷了基础系统之后不安装nvidia-jetpack可以正常生成otapayload包,安装了nvidia-jetpack之后再生产otapayload包就会出问题呢?
目前能想到的只有size問題,是否可能安裝nvidia-jetpack後的size超出rootfs的partition大小
因你之前有成功更新的log, 建議還是比對下log看是哪邊出錯了
andorno
October 12, 2023, 9:43am
18
好像rootfs默认的大小不能超过14G,在生成otapayload包时会挂载/home/uii/NX/OTA_35.4.1/Linux_for_Tegra/bootloader/mnt,这个挂载最大只能14G吗?超过就会报错:Failed.Your APPSIZE might be too small. 可是已经给了APPSIZE 118GiB了,"-S 118GiB"不就是给APPSIZE设置大小吗?还需要修改什么配置文件吗?
andorno:
-S 118GiB
除了這之外,你也有改flash時所使用XML裡的num_sectors嗎?
感覺像是XML裡給的大小不夠
另外請問這步驟是可以成功mount起來的嗎?
andorno
October 13, 2023, 3:59am
20
xml中的num_sectors修改了。
sudo mount -t ext4 -o loop system.img.raw /mnt 是可以mount成功的。
你那边有做过测试验证吗?安装了nvidia-jetpack之后可以正常生成otapayload包吗?
請問你現在的問題是產生OTA package就失敗?
還是更新過程中的失敗?
照你這邊的說法,應該加完-s
參數後就能成功產生出 ota_payload吧!?
若你現在可以成功產生OTA package但是Fail在OTA更新過程
原因是R32到R35的image-based OTA會同時更新 eMMC和NVMe,且它會用同一個rootfs (bootloader/system.img.raw)因此造成eMMC的空間不足
以下有個workaround可以解決這個狀況
在R35的BSP package內的
<Linux_for_Tegra>/tools/ota_tools/version_upgrade/upgradetasklist.txt.jetson-xavier-nx-devkit-emmc.R32x_to_R35-ToT_emmc
裡面移除下面這行
Update_B2:Write_APP:sdmmc_user:APP :R35-ToT/flash.idx
再產生OTA package (記得加-s
參數):
$ sudo -E ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 118GiB jetson-xavier-nx-devkit-emmc R32-6
I’ve verified this use case on the Xavier NX-eMMC devkit.
andorno
October 21, 2023, 10:47am
23
Hi, KevinFFF
把<Linux_for_Tegra>/tools/ota_tools/version_upgrade/upgradetasklist.txt.jetson-xavier-nx-devkit-emmc.R32x_to_R35-ToT_emmc里面的Update_B2:Write_APP:sdmmc_user:APP :R35-ToT/flash.idx这行注释掉之后经测试是可行的,没问题,非常感谢!