目录
方案一、 适用JetPack4.5及以前版本(Xavier AGX/NX)
方案二、适用JetPack 4.6-L4T-R32.6.1(Xavier AGX/NX)
由于NVIDIA Jetson 系列核心模块自带的EMMC空间均有限而在实际产品应用过程中,需要存储系统、算法、采集和分析后的视频、图片、音频等内容,仅利用Jetson 模块自带的存储空间是远远不足够的,因此需要外接存储设备(相对于SATA接口,NVMe接口更小也更适合嵌入式设备采用),本案例均基于M.2 Key M(NVMe PCIe协议)。
硬件:Jetson Xavier AGX/NX
SSD: M.2 Key M(2280), NVMe
软件:JetPack 4.5、JetPack4.6
早期英伟达NVIDIA Developer Forum上提供了一个解决方案但是采用该方案存在两个问题:
1、Xavier或NX 在反复开关机后概率性出现无法Mount SSD为rootfs系统盘,即Mount rootfs识别从而导致默认成了emmc 为rootfs,重启后可能正常;
2、应用操作比较比较复杂,不适宜规模批量应用
nvidia@xavier:~$ mount
/dev/mmcblk0p1 on / type ext4 (rw,relatime,data=ordered)
proc on /proc type proc (rw,relatime)
如下提供 两个解决方案分别针对Jetpack 4.5及前版本 和 4.6 版本,已验证了Lenovo 1TB(P980),Samsung 1TB(MZ-V8V1T0BW)、铠侠Kioxia等品牌大小从128GB 至 1TB (M.2 Key-M, NVMe PCIe 协议)
方案一、 适用JetPack4.5及以前版本(Xavier AGX/NX)
步骤1、插入NVMe SSD到NX 机器的M.2 插槽并上电开机 (步骤1至2基于Xavier NX)
步骤2、登录NX 系统,采用gdisk 创建NVMe 分区表并获取PARTUUID,如下Bash 操作
$sudo gdisk /dev/nvme0 或 /dev/nvme0n1"o" -> 清除全部分区及分区数据
"n" -> 创建新分区
"1" -> 输入分区名称即 /dev/nvme0n1p1
"40M" -> 按回车
"Linux filsystem" -> 按回车默认文件系统
"c" -> 输入分区表名称"PARTLABEL"
"w" -> 写入分区信息到NVMe 并退出
$ sudo mkfs.ext4 /dev/nvme0n1p1
//如果是R32.4.4系统需获取Partition UUID (第4步需要);如果是R32.5系统则不需要Partition UUID
$ sudo blkid /dev/nvme0n1p1
执行结果类似如下:/dev/nvme0n1p1: LABEL="PARTLABEL" UUID="9dbf8e39-4f70-45a2-a95a-1df033209c42" TYPE="ext4" PARTUUID="ed722cf3-ed4e-4989-9608-861c5e67291f"
步骤3、复制rootfs文件系统 (此步骤在电脑Host PC操作,将ssd 从Xavier NX拔下来并挂载到电脑)
$ sudo mount /dev/sdx1 /mnt
$ cd Linux_for_Tegra/rootfs/ (电脑端Linux_for_Tegra/rootfs 目录)
// 复制Rootfs文件系统 到NVMe SSD
$ sudo tar -cpf - * | ( cd /mnt/ ; sudo tar -xpf - )
$ sudo umount /mnt
步骤4、将Xavier NX 设置为Recovery mode 并通过USB链接到电脑主机Host PC
步骤5、在电脑端复制步骤2获取的PARTUUID 到 Linux_for_Tegra/bootloader/l4t-rootfs-uuid.txt (R32.5 不需要此步骤)
采用如下命令刷机Xavier NX(Rootfs 到NVMe )
// L4T-R32.4.4
$ sudo ./flash.sh jetson-xavier-nx-devkit-emmc external
// L4T-R32.5
$ sudo ./flash.sh jetson-xavier-nx-devkit-emmc nvme0n1p1
步骤6、等待步骤5 刷机完成,Xavier NX会自动重启,进入Xavier NX 查看df 命令(nvme0n1p1 已默认为启动系统),继续安装相关SDK 软件即可
方案二、适用JetPack 4.6-L4T-R32.6.1(Xavier AGX/NX)
步骤1、插入空白NVMe SSD到Xavier AGX M.2 插槽并上电开机 (步骤1至4基于Xavier AGX)
步骤2、登录Xavier AGX系统,采用gdisk 创建NVMe 分区表并获取PARTUUID和Sectors扇区
$sudo gdisk /dev/nvme0 或 /dev/nvme0n1"o" -> 清除全部分区及分区数据
"n" -> 创建新分区
"1" -> 输入分区名称即 /dev/nvme0n1p1
"40M" -> 按回车
"Linux filsystem" -> 按回车默认文件系统
"c" -> 输入分区表名称"PARTLABEL"
"w" -> 写入分区信息到NVMe 并退出$sudo fdisk /dev/nvme0n1 "p" 查看分区信息并获取sector
步骤3、将NVMe SSD 格式化为ext4 文件系统(ext2/3稳定性远远不如ext4)
$ sudo mkfs.ext4 /dev/nvme0n1p1
步骤4、获取NVMe SSD 的PARTUUID
$ sudo blkid /dev/nvme0n1p1如:/dev/nvme0n1p1: LABEL="PARTLABEL" UUID="9dbf8e39-4f70-45a2-a95a-1df033209c42" TYPE="ext4" PARTUUID="ed722cf3-ed4e-4989-9608-861c5e67291f"
以下操作再电脑Host PC上执行(PC系统Ubuntu 18.04, 步骤5至8 )
步骤5、修改NVMe SSD 分区表,将步骤2中的sector_size和num_sectors 填入flash_l4t_nvme.xml (本例新建一个xml以做区分)
$vi Linux_for_Tegra/tools/kernel_flash/flash_l4t_nvme.lenovo.x800.1TiB.xml<device type="nvme" instance="0" sector_size="512" num_sectors="2000409264">
步骤6、默认系统刷机到Internal EMMC
$sudo ./tools/kernel_flash/l4t_initrd_flash.sh jetson-xavier mmcblk0p1
步骤7、将步骤2 获取uuid 填写到 Linux_for_Tegra/bootloader/l4t-rootfs-uuid.txt_ext
步骤8、运行如下命令将系统刷入NVMe SSD并等待刷机完成success:
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1 -c ./tools/kernel_flash/flash_l4t_nvme.lenovo.x800.128GiB.xml -S 100GiB --showlogs jetson-xavier nvme0n1p1
步骤9、Xavier AGX重启后验证系统是否已成功刷入NVMe SSD