Jetson Nano环境配置

本周用了5天的时间去完成Jetson Nano的环境配置工作,差点就控制不了自己的情绪啦,但是好在书籍拯救了我,阅读是人生的必选项:不要用虚假的积极姿态去消极地对抗,以此来显示自己的付出和工作,积极地解决它,以更加平和的心态去面对它,时刻朝着最优项前进!“绝不让任何人或事将你变成一个残废!”

1. 系统配置

事情的起因是由于实验室需要对一个Nano(A01版本)平台进行更换,需要让原有的代码能够在新的Nano平台(B01版本)上顺利运行。

1.1. 系统配置

首先是系统配置问题,最简单的方法是将原有的系统直接备份,在新的板子上复原,这种方式是最简单的,能够直接避免相关软件和环境的配置;其次则是直接在新的板子上安装新的系统,重新配置环境和安装软件,有点繁琐。

  • 使用dd命令完成系统的备份
$ sudo dd if=/dev/mmcblk0 of=/media/nano/SATA /nano.img bs=1M status=progress

其中

  • /dev/mmcblk0NanoTF卡类型的第一个块设备;
  • /dev/mmcblk1NanoTF卡类型的第二个块设备;
  • /dev/mmcblk0p1是第一个块设备的第一个分区;
  • /dev/mmcblk0p2是第一个块设备的第二个分区;
  • /dev/sda是系统的第一个磁盘;
  • /dev/sdb是系统的第二个磁盘;
  • /dev/sda1是第一磁盘的第一个分区;
  • /dev/sda2是第一磁盘的第二个分区;
$ sudo dd if=备份区域 of=存储区域 bs=读入和输出的区块大小 status=显示写入进度
# `Nano`采用的是`TF`卡存储方式,以及外接`U盘`两种存储方式
@ `if=filename`对应的是需要备份的`TF`卡块设备
@ `of=filename`对应的是 `U盘`的存储区域和文件名
@  `bs`=区块大小,用于设置读入或输入的块大小,对备份速度有影响
@ `status`=显示写入进度,用于设置写入进度

由于TF卡的内存有限,一般直接备份,备份的镜像和TF卡的大小是相同的,所以原有的TF卡必然是装不下的,这时候就需要将备份的镜像备份到U盘中。亦或者采用下面这种方式,在创建镜像的同时对镜像进行压缩。

sudo dd if=/dev/mmcblk0 bs=1M status=progress | gzip > /media/nvidia/SATA/nano.img.gz

即便进行了压缩也压缩不到哪里去,建议用一个大一点的移动硬盘或者是U盘直接对镜像进行备份,不建议用同等大小的存储设备进行备份,时间还是挺久的,32GTF卡大概需要30分钟左右!

  • 使用dd命令完成系统的备份

借助上面的操作,已经将Nano的镜像拷贝到U盘,接下来就是将镜像直接拷贝到Ubuntu系统下,然后将镜像复原到TF上(当然也可以直接拷贝到TF存储设备上,但我没试过,不知道行不行,可以试一试),也可以通过官方的工具balenaEtcher软件工具直接将镜像刷写到TF卡中(建议采用该方法),不管哪种方法,需要耗费的时间都是巨大的,十分消磨一个人的经历和耐心!刷写完系统之后,可以先在旧的Nano板子上进行TF卡插入试验,看看系统能不能启动,然后再插入到新的板子上进行试验。存在一些特殊情况,由于系统的硬件支持不同,会导致过去的系统镜像在新的板子上无法启动。

$ sudo dd if=/path/nano.img  of=/dev/sda bs=1M status=progress
# 对于压缩镜像的方法
$ gzip -d /path/nano.img.gz | sudo dd of=/dev/sda bs=1M status=progress
  • 直接从官网下载相应的版本镜像,按照官方教程进行刷写

如果事情通过之前的步骤就已经解决了,也就不需要之后的步骤啦,很明显,过程是曲折的,由于A01版本的系统与B01的硬件支持不同,所以刷写的系统镜像能够在原有的板子上完美启动,一切正常,但是到了新的板子就卡在Nvidia开机画面上!所以还是老实地按照官方教程来吧!倒也简单,下载官方镜像和刷写工具,然后将镜像刷写到TF卡中,就是这么简单的两步,开机之后对系统进行设置!默认设置就行!

1.2. 环境配置

  • 风扇支持
cd /etc
sudo touch rc.local
sudo chmod u+x rc.local
sudo gedit rc.local
# 填入如下内容,255风速最大,0最小
#!/bin/bash
sleep 10
sudo /usr/bin/jetson_clocks
sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'

1. 自动调节风扇程序项目
2. 项目中文介绍
3. 自动控制风速

  • 增加swap空间
+ 生成swapfile文件
$ sudo fallocate -l 4G /var/swapfile
$ sudo chmod 600 /var/swapfile
$ sudo mkswap /var/swapfile
$ sudo swapon /var/swapfile
+ 设置为自动启用swapfile
$ sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'
+ 建议重启

亦或是采用如下方式:

sudo fallocate -l 4G /swapfile   # 创建swap分区,分区大小设置为4G,可自己调节
sudo chmod 600 /swapfile         # 修改swap分区使用权限,只允许root用户访问
sudo mkswap /swapfile            # 将文件标记为swap空间
sudo swapon /swapfile            # 启用swap空间,关机再开机后,需要再次利用此命令启用swap空间
free -h                          # 验证swap空间是否可用
  • 更换系统源(清华源)
+ 备份原有源
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak  
+ 修改源
sudo gedit /etc/apt/sources.list
+ 覆盖
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
+ 更新和升级
sudo apt-get update
sudo apt-get upgrade
  • 烦人的drpkg warnning提醒
    直接采用sudo apt auto remove,虽然大家都说这条指令是新手杀手,但是由于我是新装系统,所以不在乎,大不了重装,但是之后更换源,能够有效解决这一问题!

1.3. 软件配置

  • 谷歌拼音输入法
+ 安装和设置
https://blog.csdn.net/qq_33475105/article/details/106177082
+ 解决候选字符显示的问题
https://blog.csdn.net/qq_21397217/article/details/52447263
+ 最后重启Nano,就可以正常使用谷歌输入法
  • 系统资源监控Jtop
+ 安装pip3
$ sudo apt-get install python3-pip python3-dev
+ 安装jtop
$ sudo -H pip3 install -U jetson-stats
+ 重启
$ sudo jtop
$ xrandr --fb 1280x720

2. ROS安装

今天太晚了,不想再写啦!安装ROS,按照官网安装教程就行啦!关于安装可能遇到的问题,主要有几点提醒

  1. 建议设置清华的源
  2. 建议安装基础版本ROS,需要的相关包,可以后期进行安装
sudo apt install ros-melodic-ros-base
  1. 建议选择一个网络环境较好的地方
  2. 建议挂上梯子
  3. sudo rosdep initrosdep update出错的解决方案

该问题大多数是由于网络问题导致的,一般会修改一下几个文件:

  • 手动添加20-default.list
sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list

+ 添加如下内容
# os-specific listings first
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx

# generic
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte

# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
  • hosts文件
$ sudo gedit /etc/hosts
+ 在hosts文件末尾添加如下内容,这个IP地址经常变化,需要自己去查找
151.101.84.133  raw.githubusercontent.com
  • resolv.conf文件
sudo gedit /etc/resolv.conf
+ 添加如下内容,意义不大
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器

【注】如果上述方案都不行,建议找个网络好点的地方,或者是啥手机热点之类的!最终结果如下,则表明初始化成功啦

reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Add distro "crystal"
Add distro "dashing"
Add distro "eloquent"
Skip end-of-life distro "groovy"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Skip end-of-life distro "jade"
Add distro "kinetic"
Skip end-of-life distro "lunar"
Add distro "melodic"
Add distro "noetic"
updated cache in /home/eco/.ros/rosdep/sources.cache

3. OpenCV编译安装

Jetpack情况是自带OpenCV4的,为了让个板子的版本一致,安装了OpenCV,还是基本步骤,先下载OpenCV主安装源码和附加模块的源码.

# 安装依赖,有些库可能安装不上,不用管
echo "** Install requirement"
sudo apt-get update
sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install -y python2.7-dev python3.6-dev python-dev python-numpy python3-numpy
sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp
sudo apt-get install -y curl
sudo apt-get update
 
# 下载源码
echo "** Download opencv-4.0.0 source code"
https://github.com/opencv/opencv/archive/4.0.0.zip -o opencv-4.0.0.zip
https://github.com/opencv/opencv_contrib/archive/4.0.0.zip -o opencv_contrib-4.0.0.zip
# 下载之后,将两个压缩文件解压在统一目录下
cd opencv-4.0.0/
 
echo "** Building..."
mkdir build
cd build/
# 配置
cmake -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.0.0/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
# -D OPENCV_GENERATE_PKGCONFIG=ON一定要添加
# 还有几个小问题,我忘啦!
# 编译,建议采用单线程,同时建议夸大自己的SWAP空间为6G
make
sudo make install
sudo apt-get install -y python-opencv python3-opencv
 
echo "** Install opencv-4.0.0 successfully"
  • OpenCV版本配置问题
sudo gedit /etc/bash.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

编译出现的问题

参考资料

1. Jetson Nano的SD卡镜像
2. Jetson-nano 使用中的一些技巧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容