Using the initrd tool to flash the image extracted from backup_restore

Hi Dave:

  1. Initrd燒錄回去的時候有顯示Flash is successful,但是我們還沒試過restore的部分

  2. 因為我們的USB Type C接口有進行修改,在Device Tree內將其從OTG改為Host。這樣的改動會導致Flash的時候出現Config Error,進而導致後續的問題出現。
    目前我們的解法,如你所見,是繞過USB的部分,改用Ethernet的方式。如果USB Cable是用來Mount NFS的話,Ethernet應該也能夠做到相同的事情。還是USB也有用在其他的部分?

我們會先把USB Type C的部分移除掉,再次進行驗證

謝謝

抱歉 我現在才發現你們是不同人
請問你和上面的karee002eg這位是同事嗎?

你可以在燒的階段和開進kernel之後用不同份device tree
board config裡有分TBCDTB_FILEDTB_FILE
前者是UEFI bootloader和initrd flash用的 後者是進kernel之後用的
你可以在後面那一份改USB功能就好 前面的保持正常

Hi Dave:
對,我們是同事,上面一直希望能盡快打包Image。而且現在看起來,NVMe & eMMC是兩套完全不同的做法,才會多安排我過來處理

Device Tree的部分,我們這邊會再好好處理的,謝謝!

Hi DaveYYY,

感謝您的幫助

在修改完isext4()後,燒錄時間確實有所減少,具體的燒錄時間大約在40分鐘左右

但修改完isext4()後,雖然initrd顯示燒錄成功,裝置卻沒有辦法開機

我的測試結果與jameskuo一樣,都卡在以下錯誤

mount: /mnt: wrong fs type, bad option, bad superblock on /dev/mmcblk0, missing codepage or helper program, or other error.

而沒有修改isext4()之前,是可以正常開機的

我有確認可以使用backup_restore將image重新燒至NVME,所以取出的image應該是沒問題的

因此想請問在isext4()修改後,是否需要修改其他地方,例如 :

在開機掛載系統時,需要指定硬體的格式為ext4

附件中有serial console log,希望能派上用場

serial console log_3.txt (34.6 KB)

期待您的回信

Evan

[ 4.588823] Mount initrd as rootfs and enter recovery mode

你這是已經開機失敗太多次所以跑進recovery boot了
麻煩照這篇的方法改回正常開機模式才能知道原本的問題在哪裡

不用
那個差別就是原本ext4的partition因為資料量最大 應該用tar備份
但是因為讀錯blkid的flag所以變成也用dd備份 速度才會那麼慢
兩者結果應該要是一樣的(dd可能還更容易出錯)

Hi DaveYYY,

我有根據您提供的方法,將裝置改回正常開機的模式

以下是最後的serial console log

mount: /mnt: wrong fs type, bad option, bad superblock on /dev/mmcblk0, missing codepage or helper program, or other error.
/mnt/ is not a mountpoint
[   34.436987] ERROR: PARTUUID=99b85c08-2c9c-435c-b57c-9c052ef3590f mount fail...

完成的紀錄請參考下列附件

serial console log_4.txt (38.4 KB)

另外我有在/Linux_for_Tegra/tools/ota_tools/version_upgrade/init中找到類似的腳本

if [[ "${rootdev}" == PARTUUID* ]]; then
	count=0;
	while [ ${count} -lt 50 ]; do
		sleep 0.2;
		count="$(expr ${count} + 1)"

		mount "${rootdev}" /mnt/;
		if [ $? -eq 0 ]; then
			break;
		fi
	done
	mountpoint /mnt/;
	if [ $? -ne 0 ]; then
		echo "ERROR: ${rootdev} mount fail..." > /dev/kmsg;
		exec /bin/bash;
	fi;
	...
fi

如果我找的沒錯的話,這樣的錯誤是由下列指令執行失敗導致

mountpoint /mnt/;

希望您能提供關於該錯誤的看法

期待您的回覆

Evan

看起來就是你的partition在restore完之後整個壞掉了
能不能請你試一下完整重燒之後備份再還原到底能不能用?

sudo ./flash.sh jetson-agx-orin-devkit internal
sudo ./tools/backup_restore/l4t_backup_restore.sh -e mmcblk0 -b jetson-agx-orin-devkit internal
sudo ./tools/backup_restore/l4t_backup_restore.sh -e mmcblk0 -r jetson-agx-orin-devkit internal

你看的這個是recovery kernel的init script 跟正常kernel boot沒有關係
正常kernel boot用的init script包在/boot/initrd

Hi DaveYYY,

我有試過完整重燒之後備份再還原,結果是可行的

燒錄方式與您下方提供的指令相同

sudo ./flash.sh jetson-agx-orin-devkit internal
sudo ./tools/backup_restore/l4t_backup_restore.sh -e mmcblk0 -b jetson-agx-orin-devkit internal
sudo ./tools/backup_restore/l4t_backup_restore.sh -e mmcblk0 -r jetson-agx-orin-devkit internal

但只要使用initrd燒錄後就會遇到上述的錯誤

sudo ./flash.sh jetson-agx-orin-devkit internal
sudo ./tools/backup_restore/l4t_backup_restore.sh -e nvme0n1 -b -c jetson-agx-orin-devkit
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --use-backup-image --no-flash --external-device nvme0n1p1 -c tools/kernel_flash/flash_l4t_external.xml -p "-c bootloader/generic/cfg/flash_t234_qspi.xml --no-systemimg" --showlogs --network usb0 jetson-agx-orin-devkit external
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/mmcblk0, missing codepage or helper program, or other error.

備註 : 上述指令的情況都是isext4()已修改完所測得的
isext4()未修改前,雖然燒錄很慢,但是不會有mount的問題

Evan

我知道了 應該是JetPack 6上initrd flash的script預設用zstd壓縮system image可以加速flash
如果從頭到尾建新的image的時候是沒問題的 但是改的時候沒有考慮到要支援backup/restore tool

現在的情況應該是image經過convert_backup_image_to_initrd_flash()處理之後會從tar+gzip壓縮變成單純的tar打包檔案(沒有壓縮)
但是initrd flash現在沒有支援燒這樣的格式 所以會變成用dd把tar檔案寫回去 這樣當然會出錯

你可以研究一下Linux_for_Tegra/tools/kernel_flash/l4t_flash_from_kernel.sh這個script裡的do_write_APP()這個function 讓它可以燒單純的tar打包檔案(其實跟JetPack 5那版原理差不多)
或者不要改isext4() 用dd備份是正常的 只是很慢 不然就等我們新版修好這個問題

1 Like

Hi DaveYYY,

謝謝您對問題的成因及原理進行說明

這很好的幫助我們釐清問題並訂定研究方向 ( 至少對上面有交代 )

雖然還不確定是否會計劃修復do_write_APP()

但無論如何都感謝您的協助,幫了大忙

祝您一切順利

Evan

另外還有一點要提醒的是你要改這個script的話要重新建一包image
或是改Linux_for_Tegra/tools/kernel_flash/images/這個路徑下的copy
這個檔案燒的時候會優先使用
不然你在已經建好image的情況下再怎麼改Linux_for_Tegra/tools/kernel_flash/l4t_flash_from_kernel.sh都是不會有用的

1 Like