How can I flash JetPack 4.5.1 onto an NVMe drive?

When flashing JetPack 4.5.1 on the Xavier NX, unlike in version 4.6, there is no option to install the system on an NVMe drive. I currently have two questions:

  1. How can I flash the entire system and AI components to an NVMe drive and boot the system from the NVMe drive?
  2. Is it possible to flash U-Boot, kernel, and drivers to eMMC, while installing the file system and AI components on the NVMe drive? Thank you.

Hi,

請問有什麼理由你一定要用這麼舊的版本嗎?
那個版本的flashing script應該還沒有支援直接燒NVMe drive,你要在host上自己處理
https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3251/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.html#wwpID0E06K0HA

第二個問題你可以參考一些third-party的方案,比方說

Because the client specified this version, I have a plan I’d like to confirm with you to see if it’s feasible. I’m thinking of flashing the Linux system into the eMMC, then mounting the NVMe hard drive to the /usr directory and installing the AI library in /usr.
Is this approach viable? If it is, how can I install the AI library into the specified directory?

Hi,

理論上是可行的,但是我們沒有驗證過,你可能要自己嘗試
而且flash的時候你是沒辦法指定哪個目錄要燒進哪一個partition的,你只能開機完之後自己手動搬
https://www.reddit.com/r/linuxquestions/comments/12e37tz/do_people_actually_put_usr_on_a_separate_partition/
至於JetPack SDK要裝在哪裡,原本預設就是在/usr/

I did the following: Wrote the system to the eMMC, then copied the files from the /usr directory to the NVMe hard drive, mounted the NVMe hard drive to the /usr directory, and used the apt command to install JetPack. After the installation, the SDK could run normally. Then, I modified the fstab file to mount the NVMe hard drive at boot. However, after restarting, the HDMI couldn’t display the desktop and showed the error: Reserved SVD Code 0. How can I resolve this issue and display the Ubuntu desktop correctly?

其實你可以說中文就好,這樣應該會比較有效率

首先可以請問你是把/usr/整個移動到NVMe drive上,還是只是複製,原檔還留在eMMC上?
eMMC還有的話把/etc/fstab改回去還能開機嗎?

另外,請問你在開機狀態下是怎麼重新mount /usr的?很多library的檔案都存在/usr/下,所以在runtime移動這個目錄很可能會出問題(比方說某個library被其他process佔住,沒辦法移動) 我猜應該是複製的過程中少了什麼檔案,所以你在重開機前還能正常使用,但是重開機以後就掛了

正確的作法應該是在不會影響到rootfs的環境下操作,例如PC上可能是Live USB、Jetson上你可以用initrd之類的

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --initrd <board-name> <rootdev>

我是先把nvme硬盘mount到mnt目录,然后把/usr目录打成tar包,再解包到/mnt/目录,然后重新把nvme硬盘挂载到/usr目录下;emmc的/usr目录还在;fstab去掉mount nvme后启动,也进入不了ubuntu桌面

这句没有看懂,我想把/usr目录挂载到nvme硬盘上,本质上是为了扩充emmc的空间,因为jetson SDK是安装在usr目录,使用initrd可以实现这样嘛?谢谢

那可能要建議你重新flash之後再重來一遍整個操作流程,我現在也沒辦法確定你到底是哪一步有問題

我的意思是你不應該在會使用到/usr/的環境下移動或是重新mount這個目錄,這樣很可能會有問題
讓你用initrd操作的意思是指你開進initrd之後,eMMC上的東西就不再是系統檔案、這樣複製比較安全

我明白了,我现在刚刚重新刷了一遍,怎么使用initrd,

使用这条指令吗?我试一下

是的(記得指定<board-name>和<rootdev>),但是initrd裡的功能比較少,如果有你需要用到的binary不在裡面的話你可以mount rootfs、copy過來之後再unmount就好

我使用的指令是:sudo ./tools/kernel_flash/l4t_initrd_flash.sh jetson-xavier-nx-devkit-emmc mmcblk0p1
这条指令会更改我已经刷到emmc的文件系统吗?
因为我已经把r32.5.1烧写到emmc里面了,但是32.5.1的tools/kernel_flash下面是没有l4t_initrd_flash.sh文件的,我只能执行r32.6.1的tools/kernel_flash/l4t_initrd_flash.sh脚本。
执行完脚本不会更改我已经烧写进emmc的r32.5.1的系统吧?

不會,但是你要加上--initrd才是開機進initrd,不然會變成直接燒整台裝置

感谢提醒,是这里的问题;我已经执行了,看来我要再刷一遍了

进入initrd后,只能用串口终端交互吗?HDMI有信息输出吗?我现在连接不了串口……

是,本來就不會有畫面,你只能用serial console

拷贝好了,将nvme硬盘mount到/usr目录后,使用sudo指令提示:sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
请问应该怎么配置mount后的/usr目录权限和属主,还是在mount的时候就需要设置?

你現在用ls -l /看到的/usr/的owner是誰?

重新開進initrd之後用chown -R root:root /usr應該可以改回來
/usr/要改成你自己在initrd裡mount的路徑)

ls -l /
drwxr-xr-x  12 root   root         4096 1月   1  2000 usr

我可不可以su 切换到root用户后,再输入:chown -R root:root /usr

應該是可以,你試試看
但是看起來你只有/usr/bin/sudo的權限跑掉了?