毕业设计做的视觉系统,需要用到TX2i,以下为本人疫情期间在家摸索了十几天,才刷机成功的全过程。
关于tx2i的注意点:首先推荐买个usb扩展器,因为只有2个usb口,我中途需要同时连笔记本、键盘、鼠标、手机,根本不够用!!!其次,tx2i和tx2有一个不同之处是tx2i没有wifi模块,网上却没有tx2i的刷机教程,一开始给我造成了误解(我想到的解决方法是用手机usb提供有线网络)最后,tx2i需要12V供电,电池电量充足时上下两层都有绿色的灯亮,电量不足只有下层灯亮(我以为只要灯亮就是有电,一开始连不上一直以为是笔记本有问题)
以下正文开始(标题是需要注意的一些关键点):
因为我的毕设题目要使用ubuntu16.04+ROS kenitic,所以下载了JetPack-L4T-3.3-linux-x64_b39.run这个文件来烧录。没有用sdkmanager并且选了这个版本的jetpack是因为我的RSTO烧录手册上说jetpack跟jetson设备系统l4t版本号具有一定的对应关系,我的是l4t-28.2.1(其实我没太搞懂版本号什么意思)
把这个文件拷贝到/home下,然后终端运行
./JetPack-L4T-3.3-linux-x64_b39.run
1.注意留够内存
要给安装位置留够空间,一开始就因为空间和进程都满了(貌似是因为之前尝试sdkmanager的遗留问题),导致所需文件下载失败。我全部弄好之后看了一下,下载的东西大概有40G了,所以要注意磁盘内存
关于这个跑偏的问题,也不想再写个博客了,就记在这里吧:
报错提示:
Warning:we notice you are running OS with non-EN locale.NVIDIA does not test nor support such configurations
检查cuda_host_9.0.log,说是磁盘满了,先把回收站清空,有多30g了,结果运行还是报错
再次查看该文档,推测可能软件源有问题,打开终端想换软件源,结果终端一打开出现这么一大堆报错信息:
Traceback (most recent call last):
File "/opt/ros/kinetic/_setup_util.py", line 297, in <module>
sys.stdout.flush()
IOError: [Errno 28] No space left on device
Failed to run '"/opt/ros/kinetic/_setup_util.py" ': return code 1
/home/ymy/.pyenv/libexec/pyenv-init: 行 131: 无法为立即文档创建临时文件: 设备上没有空间
Traceback (most recent call last):
File "/home/ymy/catkin_ws/devel/_setup_util.py", line 297, in <module>
sys.stdout.flush()
IOError: [Errno 28] No space left on device
Failed to run '"/home/ymy/catkin_ws/devel/_setup_util.py" ': return code 1
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/local/lib/python2.7/dist-packages/virtualenvwrapper/hook_loader.py", line 223, in <module>
main()
File "/usr/local/lib/python2.7/dist-packages/virtualenvwrapper/hook_loader.py", line 145, in main
output.close()
IOError: [Errno 28] No space left on device
bash: 无法为立即文档创建临时文件: 设备上没有空间
OSError: [Errno 28] No space left on device
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.5/runpy.py", line 184, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/local/lib/python3.5/dist-packages/virtualenvwrapper/hook_loader.py", line 223, in <module>
main()
File "/usr/local/lib/python3.5/dist-packages/virtualenvwrapper/hook_loader.py", line 145, in main
output.close()
OSError: [Errno 28] No space left on device
bash: 无法为立即文档创建临时文件: 设备上没有空间
Traceback (most recent call last):
File "/home/ymy/catkin_ws/devel/_setup_util.py", line 297, in <module>
sys.stdout.flush()
IOError: [Errno 28] No space left on device
Failed to run '"/home/ymy/catkin_ws/devel/_setup_util.py" ': return code 1
Traceback (most recent call last):
File "/home/ymy/my_rospy/devel/_setup_util.py", line 297, in <module>
sys.stdout.flush()
IOError: [Errno 28] No space left on device
Failed to run '"/home/ymy/my_rospy/devel/_setup_util.py" ': return code 1
bash: /home/ymy/ugvc_simulation/devel/setup.bash: 没有那个文件或目录
Traceback (most recent call last):
File "/home/ymy/roboware_ws/devel/_setup_util.py", line 297, in <module>
sys.stdout.flush()
IOError: [Errno 28] No space left on device
Failed to run '"/home/ymy/roboware_ws/devel/_setup_util.py" ': return code 1
Traceback (most recent call last):
File "/home/ymy/cv_ws/devel/_setup_util.py", line 297, in <module>
sys.stdout.flush()
IOError: [Errno 28] No space left on device
Failed to run '"/home/ymy/cv_ws/devel/_setup_util.py" ': return code 1
从网上搜说确实是磁盘满了,就看了一下:
ymy@ymy:~$ df -h
文件系统 容量 已用 可用 已用% 挂载点
udev 1.6G 0 1.6G 0% /dev
tmpfs 331M 35M 296M 11% /run
/dev/sda7 19G 18G 0 100% /
tmpfs 1.7G 104M 1.6G 7% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.7G 0 1.7G 0% /sys/fs/cgroup
/dev/sda9 1.9G 141M 1.6G 9% /boot
/dev/sda10 60G 23G 34G 41% /home
tmpfs 331M 92K 331M 1% /run/user/1000
/dev/sdb1 932G 454G 478G 49% /media/ymy/明月大人的小硬盘
/dev/sda1 99G 32G 68G 33% /media/ymy/BE7806FA7806B0E7
/dev/sda6 130G 16G 115G 12% /media/ymy/文档
有一项是100%,那就只能删东西了,主要是把.local里面nvidia的东西删了:
$ su
# du -h --max-depth=1
发现.local占了几个g,于是看.local里面有啥占内存的:
# cd .local
# du -h --max-depth=1
再这样一步一步往下找,删掉大文件…
可是删了还是100%,从网上搜说是因为进程还在,那就删进程呗
# lsof |grep delete
这样之后$ df -i 看进程,没有很满的了:
ymy@ymy:~$ df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
udev 415213 558 414655 1% /dev
tmpfs 422833 806 422027 1% /run
/dev/sda7 1220608 389912 830696 32% /
tmpfs 422833 119 422714 1% /dev/shm
tmpfs 422833 5 422828 1% /run/lock
tmpfs 422833 17 422816 1% /sys/fs/cgroup
/dev/sda9 122160 307 121853 1% /boot
/dev/sda10 3948544 324274 3624270 9% /home
tmpfs 422833 39 422794 1% /run/user/1000
/dev/sdb1 501059712 244495 500815217 1% /media/ymy/明月大人的小硬盘
/dev/sda1 70525240 141078 70384162 1% /media/ymy/BE7806FA7806B0E7
/dev/sda6 120264976 52281 120212695 1% /media/ymy/文档
发现上一步删内存没有从最顶端开始找,应该在这里开始:
root@ymy:/# du -h --max-depth=1
776M ./lib
12G ./usr
du: 无法访问'./media/ymy/明月大人的小硬盘/娱乐/Pictures/desktop.ini': 权限不够
500G ./media
139M ./boot
200K ./dev
8.0K ./snap
4.0K ./srv
du: 无法访问'./proc/28767/task/28767/fd/4': 没有那个文件或目录
du: 无法访问'./proc/28767/task/28767/fdinfo/4': 没有那个文件或目录
du: 无法访问'./proc/28767/fd/3': 没有那个文件或目录
du: 无法访问'./proc/28767/fdinfo/3': 没有那个文件或目录
0 ./proc
du: 无法访问'./run/user/1000/gvfs': 权限不够
35M ./run
4.0K ./lib64
16K ./lost+found
4.0K ./cdrom
18G ./home
116K ./tmp
13M ./sbin
248K ./root
4.0K ./mnt
0 ./sys
4.2G ./var
13M ./bin
1.4G ./opt
14M ./etc
536G .
看出usr和var和opt比较多,先弄usr吧
把/usr/local/cuda-10.0删掉之后再查看,变成/dev/sda7 19G 15G 3.3G 82% /了,有进步
把/var/cuda-repo-10-0-local-10.0.326-cross-aarch64删掉之后再查看,变成63%
问题解决!
2.关于文件下载页面的使用
第一次下载的时候要选下图右上角的full(应该没人会改这个吧)
之后的刷机有需要改Flash OS Image and OS的Action时,直接点那个install 28.2.1,然后就可以选no action了(一开始网上教程没说清楚我还不会改,所以也记录一下)
下载时间比较长,中间还出现过一个警告(忘了拍照),不要紧,大家都会出现。
之后出现连接选择,选上面一个:
说明:我的连接方式就是板子usb下层口和电脑usb口直连,板子进入recovery模式,就会把usb模拟成网卡,板子和pc通过网络传输。
我看其他tx2教程里有说把tx2和电脑都用网线连到同一个路由器的,但是tx2i上的网口是针,普通的网线也插不上,我寒假回家也没带配套的线,所以没考虑这种接法,也不知道是不是tx2有和电脑网口一样的网口。
之后是很关键的网络选择界面:
3.操作顺序不正确引起的罕见出错
经过多次尝试的经验,只有网口选择的可选项只有一个的时候(在我电脑上是enp7s0),才说明后面不会报错,否则会这样:
出现这个就没戏,网上没发现有别人出过这个错,也没有解决方法
但是我多次尝试后琢磨出来,不出现这个错误的操作是:
板子一开始是把bit7打到on,并且连一下电源的状态,然后断电,bit7打到off,短接J12,连电脑,上电,断开J12,不能在off状态下开电再断电再短接,这时即使在终端lsusb出现了NVIDIA并且弹出一个类似U盘的L4T窗口也没有用
不报错后就会在Post Installation里不断刷新代码,之后出现下面这句话就卡住动不了了:
Finished Flashing OS
Determining the IP address of target …
网上搜到的解决方法是:
结束这次安装,重新开始,在文件下载界面里,把Flash OS Image and OS的Action改成no action,继续,这时就会出现让手动输入IP地址的情况了:
要想要点击next后正常进行下一步,就到了非常关键的IP地址修改了
4.修改二者ip地址
首先,打开了L4T里面的readme文件:
说明我需要修改两边的ip地址,这样他们才能在一个局域网下,相互之间才能ping通(原谅我网络通信课学的不太好,有些术语说的不太准确,反正就是下面的这样一个操作过程)
首先,在主机这边,分别在板子没连电脑和连上电脑时终端输入ifconfig,观察区别:
上面是没连,下面是连上了,解释一下:
lo:本地回环,不用管
enp7s0:我电脑与路由器用网线连接带来的网络
剩下两个enp0开头的,是和板子连上之后多出来的,所以这两个就是主机与板子连接的网络
再在板子上ifconfig:
某位大佬和我解释:
eth0和eth1指的是rj45接口的那两个网口(就是我看到的板子上的针),在tx2i上要改的是usb0和usb1对应的网络配置
修改网络配置:
tx2i上,打开系统设置——网络:
我每次打开后显示的都不一样,但是修改的诀窍是:能点开options,点开之后connection name是eth0的才是需要修改的,需要在IPv4下面的address里输入ip地址为192.168.55.1,子网掩码是255.255.255.0(也就是24),然后下面Require…打勾,保存。如下图:
在pc上类似,要把和板子连接的那两个网口的ip地址改成192.168.55.2和192.168.55.3,子网掩码不变。如下图是打开网络后,可以看出第三个是我电脑连接的有线网,所以上面两个是要改ip地址的
之后ping一下,如果有内容说明二者连接成功:
在jetpack里点击next就可以了,之后出现下面这个界面,和之前相比,发现确实少了OS那一项:
5.在TX2i手动下载装不上的软件
接上一步,之后会出现黑色窗口跑代码:
跑了一会之后就报错卡住:
提示让我自己在板子上先把这五个东西下载好,再按enter继续。
这可苦了我了,板子没有wifi模块,和pc这样连着pc也没给它提供网络(我记得有一次到这一步时可以上网,很奇怪,也许是我记错了),那要怎么下载呢?
为了联网,只能断开和pc连接的usb线,并且bit7要拨回on才能使用下层usb口(我尝试过在recovery模式下,直接用我买的usb扩展器把上层usb连上键盘鼠标手机,这样就不用断开和电脑的连接了。可是这样一个外设都用不了,我推测可能该模式下usb口的供电或者带宽不够,或者10块钱买的扩展器质量差了?),然后手机用usb口给它提供网络(老李想出的操作,强!)。
再接上键盘鼠标显示器(接口不够用扩展器呀,所以要买扩展器),一台新电脑出现了!
之前看网上有说arm64的软件源和我们笔记本上的不一样,所以就换源:
sudo gedit /etc/apt/sources.list
换成下面两种源之一即可:
清华:
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted
科大:
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted
再更新一下:
sudo apt-get update
sudo apt-get upgrade
然后就按照提示说的下载:
sudo apt-get install cuda-toolkit-9-0
sudo apt-get install libgomp1
sudo apt-get install libfreeimage-dev
sudo apt-get install libopenmpi-dev
sudo apt-get install openmpi-bin
完成之后还得断电,和pc连上,拨bit7,短接,通电,改ip地址,ping一下确认连上了,之后在那个窗口里按enter就可以继续了
注:有时候板子刚进入recovery模式可能反应不过来,要等一会才能连上pc机和显示器鼠标键盘(连上的标志一般是pc上弹出L4T,板子上的网口显示灯亮了),等个一分钟还连不上那就直接拔电再插电,过个十几秒就能连上了
不久之后第二次报错:
乍一看挺高兴,这次不用联网,只要运行dpkg安装软件指令就可以把opencv装上了。
然而,安装时出现了依赖不满足的问题:
这时候我想到了之前看过的一个教程(Jetson TX2 手动安装cuda opencv cudnn等文件),还是需要联网(啊啊啊啊巨麻烦啊),执行这两条命令:
sudo apt --fix-broken install
sudo apt-get install libtbb2
之后再安装就可以了
最后一波报错来袭:
又是需要联网下载,这次是visionworks相关,和第一个的过程类似,就不重复了
最后,终于结束啦(★,°:.☆( ̄▽ ̄)/$:.°★。撒花!)
后记:
接下来就在tx2i上调试opencv程序啦,祝我好运!
收藏 个网页备用
https://www.elinux.org/Jetson_TX2
https://github.com/jetsonhacks?after=Y3Vyc29yOnYyOpK0MjAxOC0wNS0xMFQxNTo1MToxNFrOB-gcWA%3D%3D&tab=repositories
ps:如果在自己电脑apt-get update 失败:这是由于jetpack给原系统添加了arm的软件源,而其中有些源会下载失败。解决方法时删去arm的软件源:
sudo dpkg --remove-architecture arm64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)