公司同事给了两台Xavier,让把其中一台的内容系统完全的克隆到另一台Xavier上。他也具体的跟我讲了该怎么操作,教我怎么刷系统。他有一篇博客就是将装有固态硬盘的Jetson AGX Xavier的镜像拷贝并安装到其他Xavier上:https://blog.csdn.net/qq_42741525/article/details/116232639本文就是基于他的这篇博客进行操作,并添加一些自己的体会和可能出现的问题,还有一些报错的解决方法。
所需材料:两台要进行操作的Xavier 以下称为X1(配好环境的机子)、X2(刚买的机子)、一个显示屏、一台电脑(host)。
电脑上要安装有ubuntu18.04或者ubuntu16.04,至于ubuntu20.04则不行,后面要用到的SDK Manager目前最新版还不支持ubuntu20.04,同事用的是16.04刷成功过,我则是用18.04刷成功的。有物理机条件的话,不建议用虚拟机。电脑内存要够大,主要看你的镜象有多大,我的镜像是30G,预留了70G的空间去操作,内存大点遇到问题可以有空间去折腾,不然只能干瞪眼。
host下载安装SDK Manager:
下载地址 https://developer.nvidia.com/zh-cn/embedded/jetpack ,进去就是最新版的SDK Manager 下载,下载需要进注册账号,可用qq邮箱,安装完使用也需要邮箱登录。
下载完之后进入下载目录下打开终端,输入命令:
sudo dpkg -i sdkmanager_1.6.0-8170_amd64.deb
启动,打开一个终端直接输入:
sdkmanager
一个对硬件要求的提示,选择yes进入就行了。
这个提示就是一个通知消息提示,选择哪个都行,没啥影响。
用邮箱登陆成功后就是这个界面,因为是外国的网站,所以有点慢,不要着急慢慢来。第二个选项中的Host Machine不用勾选,用不到。点continue继续。
在I accept the terms and.......这项打勾,Download now .install later .个人建议不选,直接一步到位结束算了。这步确是有点麻烦,下载的时候可能会出现各种问题,但是沉住气,慢慢解决。这个时候把你的X2连接上,用原装线连接,USB端连接电脑,type-c端连接Xavier(连接电源指示灯旁边的那个插口,注意不要搞错),显示屏也可以稍带手连接上,虽然此时没啥用。进入recovery 模式(Xavier一共三个键开关、recovery、reset,按着中间的recovery键不松手,再按开关键,最后一起松手就可以了)
报错的时候点击这个TERMINAL看看具体的报错信息,对症下药
TERMINAL里面的Message Type还可以切换类型,可以帮助你更好的发现筛选问题。如遇到time out的问题,就是网络问题,点击下面的RETRY重试。依赖问题就仔细阅读,看看自己缺少什么依赖,以我为例,我是专门安装的ubuntu18.04来克隆Xavier,ubuntu18.04默认安装使用python3,但是我在下载的时候发现它失败的原因是要python2.7的依赖,就又重新安装了python2.7.15。错误读不出来的就先重试,要是多次都是这个报错就上网搜索。也可以放在评论区大家一起讨论,避坑。
下载完成就是这个界面,安装方式就选手动,自动没成功过,手动也不是很麻烦。
然后按照提示安装就行了,安装完成之后你会发现显示屏亮了。没错,此时你完成了给这台Xavier的刷机工作,给他安装了一个ubuntu18.04的系统。刷机的小伙伴可以离开去接着安装你的系统了。克隆系统的小伙伴还得看下去。
有的小伙伴可能说,giao,博主欺骗我感情,浪费我时间,是真的。
请听我解释哈,我们的目的是克隆X1,而做到这步的目的是我怕少下载文件或者目录导致克隆失败,如果可以成功安装说明到此为止没啥问题,此时我们只需拔掉X2的电源,拿出X1进入下一步操作即可。
注意:在SDK Manager下载的过程中你的/home会出现Nvidia文件夹。
注意红线圈起来的路径,不一样版本的SDK Manager可能稍有差别,但是肯定要有Linux_for_Tegra、bootloader目录,后面要用到。
一、拿出x1,连接显示屏,连接host,把x1通过网线与host连接,并配置到同一个局域网内。然后host通过ssh连接X1,可以把X1的镜像克隆到host电脑上.
在host电脑上操作:
ssh [email protected]
sudo echo "u" | sudo dd of=/proc/sysrq-trigger
sudo dd if=/dev/mmcblk0p1 | ssh [email protected] dd of=/home/host/xavier-image.raw
二、将host中的raw文件转化成img文件,进入nvidia目录下的bootloader目录,右键选择在终端打开,输入命令:
mv system.img system.img.bk
ln -s /home/host/xavier-image.raw system.img
命令解释:mv system.img system.ing.bk是给文件system.img改名字,这里的system.img是官方自带的镜像源。第二句就是将raw 文件转化成img文件并放在当前目录下。
三、 现在就可以用Xavier的原装USB线连接host和X2用来刷机了,但是一定要注意,type-c端一定要插入P2电源灯亮一侧的type-c口,而不是电源线插口一侧,然后接着就可以让X2进入recovery模式了,进入方式:先按下中间的recovery键不松开,然后再按下电源键,过个一两秒后同时松开,就进入了该模式了 。
四 、进入Linux_for_Tegra目录下,host上输入命令:
sudo ./flash.sh -r jetson-xavier mmcblk0p1
然后就坐等完成就行了,完成之后显示屏上会显示登陆界面。
这步加载比较缓慢是正常情况,也可能输入指令后在这一步失败报错退出,不用着急,失败了让X2再次进入recovery模式,重试第四步。
完成时host上终端输出
到此结束。这个克隆系统真的是太顶了,顺利的话一边就成,我花了三四天才搞成,特别是最后一步,总是搞不成,老是加载失败,报错退出,我也尝试了不同版本的SDK Manager去寻找问题,尝试解决,但是最后还是最新版克隆成功的,所以建议用最新版SDK Manager。第四步如果加载不成功,摸摸自己的Xavier,热的就先拔出电源,让它凉一下,我发现这样它在加载效果会好一点。实在不行就把目录下的system.img.bk,就是那个官方的纯净镜像源按照第四步操作一下,看能不能成功,测试一下。最后祝大家一次成功。