Jetson AGX Orin使用SDK Manager刷Jetpack 5.1.1的踩坑记录
【摘要】 Jetson AGX Orin使用SDK Manager刷Jetpack 5.1.1的踩坑记录
近期张小白看到一篇 https://zhuanlan.zhihu.com/p/638273287
于是很想试一试,结果很不幸的,张小白在将Jetpack从5.0.2升级到5.1的时候失败了。这种失败是致命性的,因为启动不起来了:连上显示器后也什么信号都没有。
原来张小白在升级前,没看到前人写过的升级中的坑:https://zhuanlan.zhihu.com/p/601039205
具体就在这里:
于是,只有一个办法了:进入Recovery模式,使用SDK Manager刷机。
首先,张小白准备了一个Ubuntu 22.04的X86虚拟机环境。根据 https://blog.csdn.net/m0_54792870/article/details/129426560
文档的要求,准备一个USB-TypeC的线缆(就拿华为的手机充电用的线),并将Orin的电源线插好(但是断掉开关),并且使用DP线连接上DP显示器(虽然现在没什么用)。
登陆后下载 Ubuntu的安装包(后缀名为deb),将其传到Ubuntu 22.04的目录下:
开始安装:
apt install ./sdkmanager_1.9.2-10899_amd64.deb
貌似报了个错。这似乎是不祥之兆。
在图形化桌面上启动sdkmanager:
点击Login:
输入nvidia的账号
以及密码,点击log in,进入常规的安全挑战环节:
这个时候要到自己的邮箱里面收一下邮件:
点击Verify Email Address:
这个时候登陆就会继续:
进入SDK Manager主界面:
这个时候Target Hardware还是could not detect a board,也就是说还没侦测出Jetson设备。而且下面的Target Operation System中还有一行小字no available releases for host OS:Ubuntu 22.04,只不过张小白的心思完全不在这里,而是想把这个设备变出来。
张小白看了下前面连接中文档中说的:
于是就依葫芦画瓢:
把跳线拿了下来:
试着按照文中所说的进入Recovery模式的步骤
启动了几次,发现白色的指示灯都不亮,于是感觉到自己可能是被文章忽悠了,果断地将跳线放了回去,然后再先开机,再长按中间的Recovery键,不松手,继续按右边的Reset键,过阵子,再松开Reset键,再松开Recovery键。这时虚拟机识别出了Nvidia设备,选中让其连接虚拟机。
切换到终端,查看USB设备:lsusb
可以看到设备被识别成Nvidia Corp APX。
SDK Manager也弹出了下面的窗口:
张小白这个设备是Jetson Orin 32G的,所以选第二个:
点击OK:
但是仍然无法continue啊。。。
张小白愣住了。于是想想,也许是不能用Ubuntu 22.04吧。那么换成Ubuntu 20.04试试呢?
于是先去ubuntu官网下载了Ubuntu 20.04.6(的种子)
然后使用迅雷成功下载了4.05G的ISO文件:
开始新建虚拟机,按照以下步骤安装:
缺省选了4G内存,NAT模式,2CPU,点击完成,系统开始安装:
额,安装结束重启后报了这个错。这一定是意外。
重启了下,系统正常进入了自动配置:
skip:
于是ubuntu 20.04的安装正常完成。
查看下网络是通的:
更新下apt源:
安装网络工具包:
安装openssh-server:
sudo apt install openssh-server
这样MobaXterm就可以连接上了:
将前面下载的deb安装包传入Ubuntu 20.04,安装:
apt install ./sdkmanager_1.9.2-10899_amd64.deb
启动sdk manager:
这个。。。。看来内存小了。至少要8G内存呢!
于是关闭虚拟机,修改虚拟机参数:
再重启系统:
登陆后,重新打开sdkmanager:
点击Login:
同样的方式登陆:
点击登陆(这回是中文了。。)经过同样的安全挑战后:
弹出这个:
选择Yes或No均可,这回又进入了主界面:
不错,这回 Target Operation System 出现了Jetpack 5.1.1 ,下面还有DeepStream 6.2,都是好东西,张小白不做选择,全部要。
点击 Target Operation System 旁边的。。。,还可以看到这个:
也就是说,这里可以选择刷机的Jetpack版本。张小白还是想一步到位,直接选择了5.1.1。
当然,这个时候仍然是需要让虚拟机识别Recovery模式的Jetson设备的:
识别出来后结果如下:
一切都变绿了,点击continue:
好像需要不少空间。
点击accept:
点击continue:
空间不够。。。60G也不够啊。。。没想到没想到。
于是又把虚拟机关机,在设置中选择硬盘:
点击扩展:
将其扩大到100G,点击扩展:
再启动虚拟机,这个时候ubuntu内的系统还没有扩,于是先安装gparted软件:
sudo apt-get install gparted
sudo gparted启动分区软件:
可以看到 /dev/sda2是扩展分区,/dev/sda4是根文件系统对应的分区。还有40G未分配空间。
于是先选中 /dev/sda2,将滚动条拉满:
点击Resize/Move
再选中 /dev/sda5,将滚动条拉满:
点击Resize:
可以看到扩展分区和根文件系统都扩大到100G了。
点击上面的绿色的钩子,确认分区:
点击Apply:
更新成功,点击右上角的X关闭窗口。
由于张小白以前还给Orin加装过M2 nvme的硬盘,所以为了刷机,先关机,将硬盘取下来,让系统还是刷到EMMC内存里面。
于是虚拟机和Jetson Orin两边都重启,Orin进入Recovery模式,重新进入sdkmanager界面:
让虚拟机连接Orin设备:
于是设备又被识别出来:
选择32G版本后,点击Ok:
点击continue:
看起来一切正常,accept后点击continue:
系统提示:
点击Create创建临时目录。
输入对应的用户密码,开始下载和安装:
等下载了一阵子,张小白觉得有点不对劲。为啥要安装HOST Components啊。。
人家明明没有选Host Machine。
于是,取消安装:
不过已经下载了一部分了。
重新进入sdkmanager,取消Host Machine,其他跟前面一致,开始安装:
下载中:
开始制作Jetson Linux镜像:
在安装了一阵子之后,弹出以下菜单:
先看看最下面的Storage Device,可以选择EMMC,Nvme、USB,难道可以直接写入Nvme的SSD硬盘。。。不过这点张小白还暂时不敢尝试。反正挂接大硬盘的方法张小白以前也写过:https://zhuanlan.zhihu.com/p/507818696
将启动系统安装到EMMC里面应该没啥错。除非不停的换硬盘,每个硬盘装不同的Jetpack版本。张小白还没有那么多硬盘可以玩。
按照参考文档,选择Manual Setup以及Pre-Config,并且设置Jetpack Linux的用户名和密码。
点击Flash:
报错了。
检查Terminal的报错日志:
查找 carveout is not supported: https://forums.developer.nvidia.com/t/flashing-orin-nano-failed-carveout-is-not-supported-and-other-errors/249907
分析的方向可能是USB的问题:
于是张小白换了个笔记本的USB口进行了重试:
可以继续刷机了:
耐心等待刷机结束:
此时Orin系统会重启。
这时,Jetson Orin的名称也会发生变化:现在叫做 NVIDIA Linux for Tegra了:
lsusb可以看到名称确实变了(对比前面叫做Nvidia Corp APX)
然后进入了安装SDK Components的界面:
有时候会报:Cannot connect to the devicew via SSH的错:
也是因为USB线的问题,重新连接:
系统会自动继续安装CUDA等组件:
直到全部安装完毕:
点击Finish退出sdkmanager界面。
这时,关掉Orin电源,然后再开机。并且打开Orin DP接上的显示器:可以看到屏幕显示了大大的NVidia图标后,进入登陆界面:
登陆进去,完成一些Linux安装后的操作:
系统已经基本OK了。
这个时候,找到Wi-Fi设置,连上无线网络:
WiFi成功连接,可以从路由器终端列表中看到IP地址:192.168.199.181
配置MobaXterm成功连接:
检查下各自的软件版本情况:
gcc和g++:9.4.0
CUDA的nvcc编译器:11.4
openCV:4.5.4
Python3:3.8.10,没有装pip:
安装pip:
sudo apt install curl
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py
将缺的pip包补上:
sudo pip3 install testresources
python3 -V
pip3 -V
pip -V
安装jtop:
sudo pip3 install jetson-stats
使用jtop查看Jetson Orin的状态:
要求重启或者重新登陆,于是重新打开一个新的终端:
做个远程桌面:
apt search vnc | grep server
sudo apt install tigervnc-standalone-server
设置vnc密码 vncpasswd:
使用vi编辑 vnc配置文件 vi ~/.vnc/xstartup
增加可执行权限:
sudo chmod +x ~/.vnc/xstartup
启动vnc服务:
vncserver -geometry 1920x1080 -alwaysshared -depth 24 -dpi 96 :1 -localhost no
好像没启动起来:
ubuntu:1 is taken because of /tmp/.X11-unix/X1
vi ~/.vnc/ubuntu:2.log
_XSERVTransSocketUNIXCreateListener: ...SocketCreateListener() failed _XSERVTransMakeAllCOTSServerListeners: server already running (EE) Fatal server error: (EE) Cannot establish any listening sockets - Make sure an X server isn't already running(EE)
好像要删掉/tmp/.X11-unix/X1才行,但是这样会不会把桌面搞没了呢?张小白还不敢试。(要先确认下)
先试验这么多吧。至少Jetpack 5.1.1是搞定了。
简单总结一下:
1.需要用ubuntu 20.04 x86环境上安装sdk manager来刷机。Ubuntu的内存需要不小于8G。
2.电脑跟Orin的连接线需要选择正确的USB口。否则会出现各种情况的异常。
3.刷机的时候注意不要选择Host Machine,否则ubuntu文件系统的空间可能会不够。
续:
eMMC只有64G内存,所以把nvme硬盘接回去是必要的事情。但是以前的东西还在吗?我们来看一看。
首先现在的存储情况如下:
/dev/mmcblk0p1是eMMC卡,64G,在Linux看来是57G,这个不打紧。
我们将Orin的各类线全部拔掉,然后装上nvme的SSD硬盘:
再把线全部接回来,开机,并打开DP的显示器窗口,查看分区表:
图中/dev/nvme0n1p1就是1T的海康威视C2000 Pro的硬盘。能识别。
切换到root用户,直接mount到/home1文件系统试试:
把用户权限给/home1。
并且编辑/etc/fstab文件,使得其重启后仍然能认出ssd硬盘:
进入/home1文件系统看看:
好家伙,原来的文件都在呢,包括Anaconda.
由于旧系统的Anaconda安装在/home/zhanghui目录下,由于刷机,这部分环境已经没了。这个没办法。所以只有重新做Anaconda环境。由于Anaconda环境下面会有很多包,张小白考虑了一下,决定将Anaconda也安装到/home1/zhanghui目录下。
于是 bash ./Anaconda3-2021.11-Linux-aarch64.sh
选择安装目录为 /home1/zhanghui/anaconda3
耐心等待安装结束:
yes初始化
source ~/.bashrc使得conda环境变量生效:
还记得前面Python的版本是3.8吗?现在在conda的base环境中,已经是3.9了:
如果要安装各类应用,可以创建不同的conda环境,以适应不同应用软件的不同python版本要求。
(全文完,谢谢阅读)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)