题图:摄于武大凌波门

作为一名每天对着各种裸板的系统工程师,对Jetson Nano会踩到各种坑是做好了充分准备的,本着踩坑填坑的精神,在这里记录一下踩坑经历,供大家一乐。如何避开这些坑?想多了,因为以后你们即使绕开了这些坑,也会有其它的坑等着你:) 重要的是要做到人挡杀人、佛挡杀佛,遇到坑直接趟过去。

安装软件遇到锁

使用apt-get install命令安装软件包,遇到如下提示:

alex@alex-jetson-nano:~$ sudo apt-get install xrdp

[sudo] password for alex:

E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)

E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

复制代码

重启后什么操作也不做,安装软件包,提示依旧。

填坑指南:

首先查看一下是否有apt进程在工作:

alex@alex-jetson-nano:~$ ps aux | grep -i apt

root 6569 0.0 0.0 1912 496 ? Ss 10:37 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily update

root 6582 0.0 0.0 1912 1272 ? S 10:37 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held update

_apt 7736 5.4 0.1 19552 8036 ? S 10:41 0:20 /usr/lib/apt/methods/http

alex 7883 0.0 0.0 7416 640 pts/0 R+ 10:47 0:00 grep --color=auto -i apt

复制代码

可以看到系统在做每日检查更新,解决的方法很简单,关闭每日更新检查:

System Settings | Software & Updates,在Updates页,Automatically check for updates,选择Never

远程连接

没有为Jetson Nano单独配显示器,和开发机共用,但两者都是用的HDMI接口,这样每次切换显示都必须插拔HDMI线,很是麻烦,这个时候就需要远程连接。

有两种使用远程登录Jetson Nano的方法,一种是通过SSH协议登录,这种方法时延小,占用资源少,但只支持命令行。另一种就是通过RDP(Remote Desktop Protocol)协议,支持GUI,熟悉Windows的朋友可能知道Windows支持远程登录,在Ubuntu系统上,也能达到同样的效果。

Jetson Nano采用的是Ubuntu桌面系统,要支持远程桌面协议很简单:

sudo apt-get update

sudo apt-get install xrdp

复制代码

然而在我的开发机上使用 Remmina Remote Desktop Client 软件,配置好各种参数进行连接,总是一闪而过,退出应用。开始怀疑是 Remmina Remote Desktop Client 兼容性存在问题,后来换Windows下的远程登录,依然如此。查看$HOME/.xorgxrdp.10.log日志,可以看到Server端主动退出。

填坑指南:

和普通Ubuntu桌面系统不同的是,Jetson Nano并不支持两个客户端同时登录。安装时为了省事,选择了自动登录系统,这样每次Jetson Nano每次启动,就会有一个用户登录进去,这个时候我再远程登录就会被拒绝。解决方法是,编辑 /etc/gdm3/custom.conf 文件,找到 AutomaticLoginEnable 和 Automatic Login 行,注释掉:

sudo vi /etc/gdm3/custom.conf

# AutomaticLoginEnable=true

# Automatic Login=[user1]

复制代码

无法导入cv2模块

Jetson Nano系统默认 python 为2.7版本,然而安装tensorflow-gpu却需要Python3,在Python3下导入opencv模块,出现如下错误:

(tensorflow-gpu) alex@alex-jetson-nano:~$ python3

Python 3.6.7 (default, Oct 22 2018, 11:32:17)

[GCC 8.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import cv2

Traceback (most recent call last):

File "", line 1, in

ModuleNotFoundError: No module named 'cv2'

>>>

复制代码

使用默认的2.7版本python,则无此问题。

填坑指南:

系统默认为python 2.7安装了opencv模块,但python3没有,需要自己安装:

sudo apt-get install python3-opencv

复制代码

这样安装到系统python3的环境中,如果你使用了python虚拟环境,而创建虚拟环境时没有添加 --system-site-package 参数,在虚拟环境中依然会有问题,解决方法,删除掉虚拟环境中的no-global-site-packages.txt文件。假如虚拟环境名为tensorflow-gpu,命令如下:

rm ~/.virtualenvs/tensorflow-gpu/lib/python3.6/no-global-site-packages.txt

复制代码

python虚拟环境

要说到python的版本问题,python程序员绝对一把鼻涕一把泪。python 2和python 3之间不兼容的问题由来已久,到目前,python 3也没有把python 2干掉,两者尴尬的共存着。除了python本身,python第三方软件包的版本问题也是让人头大。好在我们可以借助python虚拟环境来解决这一问题。python虚拟环境和虚拟机不同,仅仅是做一个环境隔离,完全不存在性能损失,非常适用于python 程序。在开发机上,我使用的是anaconda包,然而,anaconda的 linux 版本只出了x86 32位和64位架构的包,并没有arm64的包。无奈之下,我只能选择python的virtualenv工具。

填坑指南:

virtualenv本身就已经够用,不过为了方便管理,我还是使用了一个wrapper,这实际上就是用脚本在virtualenv上封装了一层,方便使用:

sudo apt-get install virtualenvwrapper

复制代码

为了方便使用这些脚本,我在 $HOME/.profile 文件中添加了一行:

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

复制代码

创建虚拟名为tensorflow-gpu的虚拟环境:

mkvirtualenv -p /usr/bin/python3 --system-site-package tensorflow-gpu

复制代码

激活虚拟环境

workon tensorflow-gpu

复制代码

退出虚拟环境

deactivate

复制代码

安装tensorflow

Jetson Nano出厂系统并没有自带TensorFlow环境,早先甚至连官方支持都没有,所以网上有很多安装Tensorflow的指南,及其复杂,好在Nvidia意识到了这个问题,给出了官方支持。

填坑指南:

安装依赖包:

sudo apt-get install libhdf5-serial-dev hdf5-tools

sudo apt-get install python3-pip

pip3 install -U pip

sudo apt-get install zlib1g-dev zip libjpeg8-dev libhdf5-dev

sudo pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker grpcio six mock requests gast h5py astor termcolor

复制代码

注意有些步骤特别慢,以至于我以为安装包被墙了,重试了几次仍然这样,后来才弄清楚有些包是需要即时编译的,所以会比较慢,需要耐心等待。

然后安装最新的tensorflow-gpu:

pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu

复制代码

如果要安装指定版本:

pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==$TF_VERSION+nv$NV_VERSION

复制代码

其中,TF_VERSION是TensorFlow的发布版本,比如1.12.0。NV_VERSION为Tensorflow的NVIDIA容器版本,比如19.01。

小结

在使用Jetson Nano中,还碰到很多稀奇古怪的问题,这里没法一一写出,解决问题主要靠Google,当然Nvidia开发者论坛的Nano版块也值得去看一看,其地址为: devtalk.nvidia.com/default/boa… 在上面我试着用蹩脚的英文向其他开发者提问,收到了不少回应。

生命不息,折腾不止,其实Jetson nano最大的乐趣就是折腾,可以预料以后还会踩各种坑,不过相比软件的坑,硬件的坑更大,毕竟那还要投入真金白银,下一篇我将写写硬件上的坑,敬请关注。

jetson windows_生命不息,折腾不止:Jetson Nano填坑之软件篇相关推荐

  1. 生命不息,折腾不止:Jetson Nano填坑之软件篇

    [外链图片转存失败(img-xESuaLE9-1568108074549)(http://images.ilego.club/blog/2019/05/Jetson_nano_%E5%A1%AB%E5 ...

  2. 生命不息,折腾不止:Jetson Nano填坑之硬件篇

    Jetson Nano目前在中国普遍报价899元,含增值税,包邮.我在淘宝上是以不开票830元拿下,相较于Google Edge TPU开发板1680元的价格要便宜不少.但是,Jetson Nano只 ...

  3. win10引导安卓x86_生命不息折腾不止 Win10竟与安卓有一腿

    有些公司.有些产品.有些人总是生命不息折腾不止,不断地更新补丁.不断地出现新的漏洞.近日,微软又搞了几个大新闻. 微软Azure营收翻倍:月初,微软重组其销售团队,更专注于云服务的提供,而其销售工作将 ...

  4. 生命不息折腾不止 ---- 开发编辑器第二话

    为什么80%的码农都做不了架构师?>>>    几天前折腾出了一个文本编辑器,为了让这个项目看起来更正式一点,破天荒的在GIT@OS 上build了一个 项目 ,顺手起了个名字Not ...

  5. 开发工具总结(4)之Android Studio3.0填坑指南

    序言 Android Studio 3.0 上篇讲了: 全面总结Android Studio2.X的填坑指南 这篇讲一下AS3.0的坑.. 作为这个世界上走在最前沿的生物"猿",怎 ...

  6. 生命不息,折腾不止:Jetson Nano上手篇

    自从下单Jetson Nano开发套件之后,我就每天刷一刷淘宝,看看卖家是否发货.终于,昨天系统提示卖家已发货,走的顺丰快递,今天就收到货了.盒子比想象中的小: 确实有点简陋,只有一块主板和一张保修卡 ...

  7. android单手操作系统,生命不息,折腾不止:在 Android 上自制单手模式

    手机屏幕做大,在视觉体验上带来的提升是非常明显的,但也因为屏幕变大,单手操作已不再那么现实.针对这种情况,各大厂商都相继推出了相应的解决方案,Android 阵营比较有代表性的有魅族.锤子的下拉悬停和 ...

  8. 零基础入门Jetson Nano——软件篇

    Jetson Nano学习--软件篇 前言 一.General Commands-解析 二.File & Directory Commands-解析 1.绝对路径和相对路径 2.根目录 3.文 ...

  9. 《生命不息,折腾不止》

    大三的课程结束了,现在我在刘老师的实验室里写着这篇文章,以流水账的形式回顾一下,算是对我求学生涯的总结吧. 从小学开始我并不是一个好学的孩子,常常因为考试不及格,或者倒数被责怪,然而年纪小,不懂辛劳贫 ...

最新文章

  1. Python 函数初识 (1)
  2. struts.xml web.xml配置正常,访问action时出现404
  3. mysql在电脑哪里启动项_所有电脑和主板开机选择启动项的快捷键
  4. python运行不了程序代码_python怎么运行代码程序
  5. DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类神经网络的工作原理
  6. 新手小白零基础搭建个人博客(一)服务器篇
  7. 数据库索引为什么会失效
  8. I - Arbitrage(判断是否有无正环 II)
  9. ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME
  10. python语法学习第十天--类与对象相关的BIF、魔法方法
  11. Atitit 并发锁机制 艾提拉总结 目录 1. 2. 用的比较频繁锁 2 1.1. 语法锁sync api锁 2 1.2. 数据库标志位锁 2 1.3. 文件锁 2 2. 锁得类型 3 2 2.
  12. JavaWeb开发通过Socket编程实现网页访问(附源代码)
  13. 软考 信息安全工程师怎么样
  14. J2EE项目数据字典设计
  15. lpush rpush 区别_php-redis中文参考手册_list容器相关_lPush_rPush_lPushx_rPu...
  16. C#使用struct直接转换下位机数据的示例代码
  17. 让 CXK 来教你实现游戏中的帧动画(上)
  18. 刘欣《码农翻身》之动态代理读后感
  19. < span >标签的使用
  20. HEAD detached from XXX

热门文章

  1. STM32F429HAL库ADCDMA学习笔记
  2. 实例分割和语义分割使用labelme制作的数据集如何转换为voc和coco格式的数据
  3. vue3.0版本怎么修改服务器路径,@vue/cli 3.0 下通过npm命令切换不同服务器地址
  4. 坐火车卧铺,到底是上、中、下哪个好?其实简单对比一下就知道了
  5. Vue学习笔记之01-Vue的特点
  6. Android属于绑定服务特点是,android – 每个Service绑定是否需要一个ServiceConnection?...
  7. C语言涉及数组的大作业,c语言大作业_基于数组的学生信息管理系统.doc
  8. linux vi 内存,Vi Linux内存 之 Slub分配器(四)
  9. python数值类型和序列类型_Python基础(一):数值类型,序列类型
  10. 用计算机怎么算lnk,lnk格式怎么处理!我的电脑除了系统自带其他软件都变成lnk格式...