目录
- 一、前言
- 二、外部组装及供电
- 三、刷机过程
- 3.1准备
- 3.2开刷
- 3.2.1sdkmanager下载
- 3.2.2 注册账号
- 3.2.3选择适合的版本并进行烧录
- 3.2.4烧录成功
- 3.3 安装TF卡驱动并挂载
- 3.3.1向客服明确需要的固件版本是多少
- 3.3.2挂载TF卡
- 3.4修改挂载的TF卡权限
- 3.5重定向`apt-get install`安装的包的位置
- 3.6安装pip和pip3,并重定向`pip install `
- 3.7 安装pytorch
- 四、结语
一、前言
最近做课设无人驾驶小车项目的时候需要用到一个小的嵌入式设备来进行目标识别,本来选择的TX2,但是有看到网上对NX的测评,感觉性能比TX2更强,遂转为选购NX。选购的时候考虑以下因素。
想直接用一个XT30头做供电,不需要自己在做一个XT30转PC电源口的线
直接拥有CAN线接口
然后尽可能便宜点,板子尽可能要小一点
看到有一些参加robomater的队伍采购了冬虫电子的这块载板,于是自己也买了一个一块NX的emmc+他家的载板,以下是采用mirco_USB用sdkmanager刷机记录。踩坑太多,前前后后断断续续搞了快一个月才弄好。
在内存方面需要挂载TF卡特别的麻烦
pytorch的配置也很折磨人
二、外部组装及供电
踩坑:
- 一、拿到EMMC和散热风扇还有载板的时候,发现载板的风扇接口和散热风扇的供电口不在一个方向,吓了一跳,以为买错了。仔细检查了一下,发现NX的散热风扇是可以改变线的方向的,拿螺丝刀拧开风扇重新装即可。
- 二、其板子可以支持2S-6S的电池供电,但是记住千万不要拿DJI的TB47D电池对其直接进行供电!TB47D属于一款动力电池,其瞬间释放的电压可以比其标出来的电压高特别多!并且用示波器看其电压波动发现也波动的比较明显。我一开始直接拿TB47D供电,导致这个载板直接冒烟,就是因为一瞬间的电压太高了。在TB47D后面一定要接一个降压之类的。
- 三、也可以采用店家送的PC电源头转XT30头利用一些电脑的19V输出电源适配器对其进行稳定供电。这也是可以的!
- 四、在正常供电,并且用USB线将其连接到电脑上。在直接拔掉电源之后,如果重新上电,有可能会出现无法开机的情况。这个问题弄了很久,之后发现是USB连到电脑的这跟线分掉了部分电压,拔掉这根连接的线再开电源就能开机成功。
三、刷机过程
3.1准备
- 一台剩余容量还有至少26个G的ubuntu16.04或18.04系统(剩余储存空间非常重要!)
- micro_USB线
- 一个显示器,作为NX的显示器
3.2开刷
tips:建议用sdkmanger刷机的大伙准备一下科学上网的工具,不然下载的速度属实是搞人心态。
3.2.1sdkmanager下载
SDK Manager官网下载地址
根据自己的需要下载符合自己的版本的即可。我用的Ubuntu18.04,所以直接下载18.04的即可
3.2.2 注册账号
进去的界面大概如下,如果没有上网,进去的速度会非常的慢。首先要注册一个自己的Nidia的账号才可以进去噢
3.2.3选择适合的版本并进行烧录
首先,需要让板子进入到Recover模式,根据冬虫电子的手册,他说是需要长按Rec键,长按的同时短按一下Rst,过2s再松开Rec键,即可进入到Recoer模式。
注意:我买的载板按键虚焊了,这就导致我怎么按这两个按键都没有用。折磨了很久,最后用导线模拟按键的功能才解决。
判断的方法:
按一下Rst之后,整个板子都会重启。载板上的红灯会灭一下再亮
进入Recover模式的时候,NX的散热风扇会突然转起来,并且保持旋转。如果你是重新刷机,你的ubuntu界面也会直接消失。
然后开始刷机,选择适合你需要的NX的版本。这里我选用了JetPack4.5.1的版本。
我在当时刷机的时候,网上也有说不要把Host Machine打勾,下面的图片里面是我第一次刷机的时候我打勾了,第二次我重刷机的时候没有打勾*(我刷了不止10遍,属于是刷吐了),这个只会影响后面多装几个包,但是具体的原因我也没有弄清楚,期待hxd评论区解惑。
Target Hardware他会根据你连接的板子自动判断,选择自己的型号即可
点击continue之后,就会进入到这个界面,仔细看整个包解压之后一共有25个G,这也是前期准备里面,需要至少26个G的原因。他整个流程是先下载,再把包通过usb线flash到NX里面,所以你可以选择先下载,后flash,也可以直接下载和flash,区别都不大。我这里直接选择了下载烧录。
注意:如果没有科学上网,这里的下载速度会慢到怀疑人生,也可以选择多等等。
按continue之后,输入user的密码即可。
然后他就会开始下载和flash,他整个过程是这样的,他会先把适合NX的linux系统先刷进去。再和你的NX的linux连接,flash剩余的软件包。
所以刷完系统之后,你的NX就会开始启动,然后你的NX连接的显示屏就会开始出现linux的装机界面,这个时候,准备键盘鼠标,在NX上进行一步一步往下装机,在NX上需要设置你的用户名和密码,这个要记住,和后面的连接有关。
当NX上的linux装好了之后,就需要返回你刷机的PC上进行下一步操作。
其实在你的NX还没有装完Linux的时候,SDK manager就会弹出这个界面,你先不能着急,等NX上的系统装好了之后,返回PC,输入你给NX设置的Username和password,然后就可以进行install了。
输入完之后,他会开始进行一个检测安装环境。这个时候一定要确保你的NX联网,但是怎么让NX联网呢:
1.可以用商家送的网口直接连网
2.<推荐>把手机用USB和NX连接,然后进入手机设置,在手机设置的USB共享网络里面,打开通过USB共享,这个时候你的NX就可以开始联网了
有可能出现的错误:
我在检测NX的安装环境的时候,出现过以下两个问题
- 第二个检测过不去,显示我无Internet连接,按照上面的方法把NX联网即可
- 第三个检测过不去出现了以下的错误提示
Your system is not ready for install, see specific errors below. Once fixed, click ‘Retry’ to verify system readiness again.
他原本的界面下方,有一连串给的方法建议,就是apt-get update这一些我按照SDK Manager里面给尝试,发现没有用。我也尝试了给NX里面与换源,也没有用。之后搜到应该是在下载完成之后,我可能误删了一些组件。于是我把下载的包全部删除,重新进SDK Manager,重复前面的过程,这个检测就通过了。
3.2.4烧录成功
3.3 安装TF卡驱动并挂载
刷机完了之后,NX的emmc自带的内存只剩下不足100M了,真的是太头疼了。根本就没办法佩环境。然后就开始琢磨怎么利用上冬虫电子的TF卡卡槽。跟商家联系之后,才知道这个卡槽不能用来装系统,而且要装完系统之后,装驱动才可以用。
3.3.1向客服明确需要的固件版本是多少
明确你的JetPack版本是多少,然后找客服要固件驱动。
给完驱动之后,还会有一个readme文件,内容如下:
### NCB00 USB-OTG and TF socket driver setup
注意:这里面的cp指令对应的文件夹必须是你自己下载的Nidia里面对应的文件夹,不要盲目copy指令
## FOR EMMC NX module 针对EMMC
// ON PC
1, cp tegra194-p3668-all-p3509-0000-ncb.dtb ~/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_XAVIER_NX/Linux_for_Tegra/kernel/dtb/tegra194-p3668-all-p3509-0000.dtb
2, Let NX/NANO enter recovery mode and connect to PC via micro-USB
3, cd ~/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_XAVIER_NX/Linux_for_Tegra
4, sudo ./flash.sh -r -k kernel-dtb p3449-0000+p3668-0001-qspi-emmc mmcblk0p1
5, wait NX/NANO booting up.
// On NX
1, cp extlinux.conf /boot/extlinux/
2, reboot //important!!!
## FOR TF card NX module
// On NX
1, cp extlinux-tf.conf /boot/extlinux/extlinux.conf
2, cp tegra194-p3668-all-p3509-0000-ncb-tf.dtb /boot/
3, reboot //important!!!
这个是烧录驱动成功之后的标志
3.3.2挂载TF卡
一、首先进行TF卡的分区并格式化为/ext4
经过上面的一系列操作之后,应该就可以看到你的TF卡了,如果没看到,通过下列指令进行查看是否有读取到你的TF卡
通过如下指令,查看分区。
sudo fdisk -lu
如果有出现disk /dev/mmcblk1p1 则代表你的驱动装好了
(ps:有可能这里面的设备号不是这个,但是只要他是你的TF卡大小就可以了)
自我学习与理解
其实fdisk就类似和windows里面对硬盘进行管理的操作,可以理解成一个文字版的windows硬盘管理软件
在查看的分区里面,检查一下自己的TF卡的分区名字是什么,然后根据这个分区名字
sudo fdisk /dev/mmcblk1p1
输入这个指令之后,他就会出现一个文字版的界面,这个时候就代表你要开始对硬盘分区了。
这部分借鉴了这一篇博客『Nvidia Jetson AGX Xavier笔记』Xavier(arrch64架构)挂载SD卡!
对分区的操作指令如下
- 在Command (m for help)提示符后面输入m,可以查看支持的命令。
- 在Command (m for help)提示符后面输入n,执行 add a new partition 指令给硬盘增加新分区。
- Partition type: Select 根据自己的情况 我选择了 primary 主分区。
- 出现Partition number(1-4)时,输入1表示只分一个区。
- 后续指定起启柱面(First sector),默认起始地址为 2048,结束地址为:****,不输入数字按ENTER,将填入默认值。
- 在Command (m for help)提示符后面输入p,打印分区情况,可以看到已正确完成分区。
- 在Command (m for help)提示符后面输入w,保存分区表。退出。再次输入指令:
sudo fdisk -lu
,如果显示下面界面表示分区好了,显示Device设备里面有/dev/mmcblk1p1则表示分区完成。
然后对其格式化为/ext4,ext4是ubuntu系统的一种文件系统类型,装ubuntu的时候我们都知道,其存在多种文件系统,包括swap等等,ext4是一种比较先进的一种文件系统类型,所以格式化为这个会有较好的使用效果。其实格式化成别的文件系统类型也是可以的。这个问答里面也说了EXT4会更好存储数据
sudo mkfs -t ext4 /dev/mmcblk1p1
二、分区完了之后,就要对其进行挂载
自我理解
我理解的挂载就是这个原理,因为TF卡和NX自带的储存空间是不一样的,而这两片内存是物理上不连在一起的。而挂载就是把TF卡的内存挂到NX自带的储存空间的某一个文件里面,这样,你往这个储存空间存东西的时候,实际上就储存到了TF卡的储存空间上面了。
mkdir /你自己需要的挂载文件夹名字
sudo mount /dev/mmcblk1p1 /你创建的文件夹名字
df -h 查看
当你设置成功之后,你可以在df -h
所显示的列表里面查看到你TF卡设备。
三、设置开机自动挂载并且更改挂载权限
!!!这里一定要注意,我设置的时候,因为填写的序号不对,导致整个系统直接崩溃,开机进不了系统,只能重装!!
前面参考TF卡里面的文章里面说设计开机挂载的时候按照如下操作
sudo gedit /etc/fstab
在末尾增加一行
/dev/mmcblk1p1 /data ext4 defaults 1 2
在执行这一步的时候,最后面的两个数字会导致我系统崩溃。抱着学习的原则,我有查阅了一下资料,学了一下关于fstab文件的相关信息。
(悄悄吐槽一句,年代只要较早的文章,都是好文章,但最近几年太多复制粘贴的垃圾文章了并且还有很多没有查证清楚的不负责的文章。导致每次百度都是搜到的文章都是一模一样,还解决不了问题,属于是浪费时间又影响心态。)
在文章的最后一段
第五、六列:dump和fsck选项
Dump和fsck?这是什么东西?恩,dump是一个备份工具,而fsck是一个文件系统扫描检查工具。我不会在这里详细介绍它们,因为用man或者google都可以获得更加详细的信息。
fstab的第五列是表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上,大多数的dump设置都是0。而第六列是fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若文件系统无需在启动时扫描检查,则设置该字段为0。
我们可以学到了第一个数字代表了文件系统是否需要备份,第六个就是文件系统应该第几个被扫描,我设置过一次,最后一个为0,系统直接就崩溃了。所以按照1 1设置其实应该就可以了。
遇到的问题:
我之前进行到这一步之后,我就直接开始配置环境了。然后发现挂载的TF卡里面必须要root权限才能够装东西。而我也是这两天才学到的,sudo pip和pip可能存放的位置是不同的,加上anaconda的虚拟环境里面的pip可能就更晕了,那次把我整崩溃之后,我又重装了一遍系统,要把权限改过来。
3.4修改挂载的TF卡权限
如果你的NX没有多余的键盘。我们可以利用ssh远程连接你的NX
ssh 192.168.55.1@user_name
这里指你自己设置的nx的名字
chmod 777 -R /挂载的文件名字
这样使用的TF卡的权限就改了,但其实注意,在利用ll
指令看他的所有者其实还是root,但是前面的rwx已经改变为所有人都可以了。
3.5重定向apt-get install
安装的包的位置
在做完了以上的所有内容的时候,NX的基础环境基本上配完,但是可以发现NX的内部环境只有70M了,所以我们先重定向apt-get install来给他腾一点空间出来。即把apt-get install所安装的软件包换一个地方。
首先要知道的是,在linux里面,pip install
安装的软件包的位置在/var/cache/apt/archives里面
#首先清除软件包
sudo apt-get clean
#再之前挂载TF卡的文件夹下建立文件,并建立软连接
mkdir -p "/软连接所在目录/debs/partial"
sudo rm -rf /var/cache/apt/archives
sudo ln -s "/软连接所在目录/debs/partial" /var/cache/apt/archives
3.6安装pip和pip3,并重定向pip install
当更改了软连接之后,我们就可以放心大胆的使用apt进行下载了
sudo apt-get install python2-pip
sudo apt-get install python3-pip
由于我们的NX的内存空间实在是太小了,我之前尝试过把apt-get install
里面所有的包拿出来,再装pytorch,发现1个多G的内存还是不够,而要装NX的pytorch需要使用NX的架构的Pytorch的包,这个包的安装又必须要用pip3。所以我们需要给torch包腾空间出来。
下面是重定向pip和pip3的方法
首先我们需要查看我们目前python中pip会把包安装到哪一个位置(即默认安装位置)
python -m site #针对pip
python3 -m site #针对pip3
(ps:下面的图是我修改完安装包的安装位置之后的图)
根据我搜到的资料来看,USER_SITE和USER_BASE其实是决定了其安装的位置,我又继续搜索了一下这两个变量的不同的作用,原文如下:
- USER BASE
- site.USER_BASE , path to the base directory for the user site-packages
Default value is ~/.local for UNIX - USER SITE
- site.USER_SITE, path to the user site-packages for the running Python.
Default value is ~/.local/lib/pythonX.Y/site-pacakges for UNIX
由于我没有搞懂这个USER_BASE的作用,于是我只修改了USER_SITE的地址。
修改方法如下:
首先需要打开设置这个地址的文件
sudo vi /usr/lib/python3.6/site.py
注意:这个里面的site.py和你自己电脑中的python所在的位置有关,注意自己查找一下
然后找到USER BASE的位置
修改为你有多余空间的地方,我在挂载的TF卡下面创建了一个文件夹,然后把USER_BASE后面的地址改成了新文件夹的地址。
pip的修改方法同上。
3.7 安装pytorch
由于NX的架构和普通的电脑架构不一样,所以我们要使用特定的torch安装包
在下面网址中找到我们需要的包
pytorch的TX,TX2,NX/AGX官方pytorch包 我用的是4.5.1的JetPack,所以使用的是1.10的pytorch包
将下载的包放到你挂载的TF卡中,然后利用pip3 install 下载包
即可以安装成功pytorch的包
但是还不够,我们还需要安装pytorch相关的依赖库
sudo apt-get install libopenblas-base libopenmpi-dev
sudo pip3 install mpi4py
sudo pip3 install Cython
参考博客
NVIDIA Jetson NX配置深度学习环境(Pytorch、torchvision)超级详细,torchvision安装避坑总结 如果下载太慢,可以给pip换个源噢
方法就按照下面博客即可
更换pip源到国内镜像
安装完了库之后,我们在使用python,进入之后import torch
,如果没有报错,就说明安装成功。
而由于我们在一开始SDKManager的时候就安装了cuda,所以直接查看cuda是否可以用torch.cuda.is_available()
如果为Ture代表安装成功!
四、结语
前前后后,我配了一个多月,属于是对linux这部分还是不熟悉,太多东西都是在配环境的时候学会的,写下这一篇博客,便于以后自己重装环境的时候可以更快的装环境,如果有错误的地方,也希望大家指出。