cover

一、准备

  1. Ubuntu电脑 or 虚拟机(Ubuntu系统)
  2. 能够进行数据传输的Micro-USB数据线
  3. 显示屏 、HDMI转接线、键鼠

二、进行烧录(参考瑞泰教程)

2.1 系统软件包的下载

2.1.1 烧录所需文件集中在这两个文件夹中,在本部分我选择安装LT4 R32.7.1版本

image-20230311205757974

2.1.2根据Jetson类型进行选择

image-20230311205921697

2.1.3根据载板型号进行选择

image-20230311210038630

2.1.4随便选择一个版本

image-20230311210058553

2.1.5下载对应文件,其中rtso-6002对应位置即为载板型号

image-20230311210118374

2.1.6选择对应版本的L4T文件

image-20230311210156444

2.1.7下载相应文件

image-20230311210216935

2.2 在PC端Ubuntu系统进行烧录环境准备

2.2.1 将上述文件拷贝至烧录主机同一目录下

2.2.2 解压 Linux Driver Package

$ tar -vxf Jetson_Linux_R32.7.1_aarch64.tbz2

2.2.3 设置根文件系统

  1. 进入Linux Driver Package 的根文件系统目录

    $ cd <your_L4T_root>/Linux_for_Tegra/roofs

  2. 解压 the Root File System :

    $ sudo tar -jxpf ../../Tegra_Linux_Sample-Root-Filesystem_R32.7.1_aarch64.tbz2

2.2.4 安装 BSP 支持包

  1. 将 Realtimes-L4T-.tar 包解压到与 Linux_for_Tegra 文件夹同级目录下面,使用命令:

    $ tar -xvf Realtimes-L4T-<version>.tar

  2. 进入到 Realtimes-L4T 文件夹,运行:

    $ sudo ./install.sh
    安装成功会有 success 提示!

  3. 运行 apply_binaries.sh 脚本拷贝 NVIDIA 用户空间库进入目标文件系统
    $ cd ../Linux_for_Tegra/
    $ sudo ./apply_binaries.sh

3.1 系统烧录

3.3.1先c将板子进入recovery模式,然后将板子与主机通过Micro-USB数据线连接,在PC端的Linux_for_Tegra目录下进行如下操作:
$ sudo ./flash.sh realtimes/rtso-<model> mmcblk0p1
注意:rtso-指的是板子型号,例如我使用的板子是rtso-6002E-v1.2,则命令为:
$ sudo ./flash.sh rtso-6002e-1.2v mmcblk0p1

3.3.2 可能遇到的问题

  1. 板子型号查看,一般来说板子上会带有型号,若找不到可以咨询卖方

    image-20230311213021400
  2. 关于输入选项,如下,可以发现红框圈中的有很多型号的选项,其中rtso-6002e表示rtso-6002-emmc板,rtso-6002则是另一种类型的板子,并且6002-emmc下还有v1.2、v1.3等型号,根据板子进行选择。(一定不要弄错,这些文件是与主板相配的)

image-20230311214628664

3.3.3 报错一

image-20230311214653624

如上报错需考虑两个原因:

  1. 主机与板子进行数据传输的Micro-USB数据线是否具有传输数据的作用,可以使用lsusb查看是否含有Nvidia Crop;
  2. 板子是否进入了recovery模式。

3.3.4 报错二

image-20230319005550878

仔细观察可以发现问题在于一个.py文件执行错误,可以使用命令$ sudo apt install python2.7 python3 python安装python,然后重新烧录解决。

3.4 配置板子系统

由于瑞泰板子是上电自启动的,将板子和显示屏以及键鼠连接,进入类似Ubuntu系统开机配置界面,除了地区选择上海外,其余保持默认即可。能够正常开机,则表明烧录成功。随后可以发现,其图形化界面和Ubuntu几乎没有什么区别。

三、进行系统迁移(视情况选择)

3.1 方法一

3.1.1 查看SSD设备名称
系统启动前,将SSD插入到板子的内存接口处(由于瑞泰板子自身装有一个120GB的内存卡,因此可以直接使用其自身的SSD卡即可)。系统启动后,使用$ sudo fdisk -l命令查看SSD设备名称,例如:nvme0n1、mmcblk1,本文使用mmcblk1为例。
3.1.2 对SSD进行格式化
如果SSD之前没有进行格式化,需要把SSD格式化后再使用。对于已挂载的SSD卡,需要使用umount卸载SSD卡,再格式化。卸载命令:sudo umount /dev/mmcblk1;格式化命令:$ sudo mkfs.ext4 /dev/mmcblk1
3.1.3 创建一个新的GPT分区
$ sudo parted /dev/mmcblk1 mklabel gpt
3.1.4 添加分区
$ sudo parted /dev/mmcblk1 mkpart primary 0GB <Size>
Size是分区的大小,最小8GB,建议可以将SSD卡内存全部添入
例如:准备分区的大小是50GB,则命令是:
$ sudo parted /dev/mmcblk1 mkpart primary 0GB 50GB
添加完分区后,使用$ sudo fdisk -l可以看到mmcblk1下新增一个分区,名为:mmcblk1p1

3.1.5 格式化分区
$ sudo mkfs.ext4 /dev/mmcblk1p1
把分区格式化为ext4 格式
3.1.6 拷贝roofs到SSD
$ sudo dd if=/dev/mmcblk0p1 of=/dev/mmcblk1p1 bs=1M
其中mmcblk0p1是系统原先所在位置,mmcblk1p1则是我们的转移目标区域
3.1.7 修复分区
$ sudo -s
$ fsck.ext4 /dev/mmcblk1p1
若遇到输入yes or no,请全部输入yes

3.1.8 调整系统分区大小
$ sudo resize2fs /dev/mmcblk1p1

3.1.9 烧写从SD卡启动系统
$ sudo ./flash.sh realtimes/rtso-<model> mmcblk1p1
这一步骤和烧录步骤一摸一样,需要注意的是目录位置、烧录系统文件与最开始烧录时是一样的,且目标位置名称变化了
重新烧录完后,进入系统后,输入$ df -h可以看到mmcblk1p1成为根目录,系统已从SD卡启动。

3.2 方法二

[^参考博客]: http://t.csdn.cn/Ne0Bk http://t.csdn.cn/ZrDlI

3.2.1 将SD卡进行格式化操作并挂载到系统下,操作如下:
系统迁移的前提是将SD卡挂载到系统下,先需要使用如下命令将SD卡格式化为EXT4格式:
$ sudo mke2fs -t ext4 /dev/mmcblk1p1
然后将SD卡挂载到/mnt下:
$ sudo mount /dev/mmcblk1p1 /mnt

3.2.2 克隆所需文件:

$ git clone https://github.com/jetsonhacks/rootOnNVMe.git

3.2.3 进入下载的文件夹中,编辑脚本文件copy-rootfs-ssd.sh,然后运行该脚本,将系统复制到SSD中。
cd ./rootOnNVMe
sudo gedit ./copy-rootfs-ssd.sh
将文件中的/dev/nvme0n1p1 修改为/dev/mmcblk1
sudo ./copy-rootfs-ssd.sh

image-20230311225106076

3.2.4 进入到rootOnNVMe/data目录下,修改其中的脚本文件:setssdroot.shsetssdroot.service,将其中的/dev/nvme0n1p1修改为/dev/mmcblk1,方法同上。

image-20230311225229373

3.2.5 回到rootOnNVMe目录下,执行以下命令:
sudo ./setup-service.sh

成功后如下图:

image-20230311225311334

3.2.6 重新启动jetson板后,使用命令$ df -h查看,可以发现系统已经完成迁移

四、安装Jepack

4.1、基本步骤

4.1.1 安装前信息确认以及更新软件源(在板子上进行)
给Xavier NX安装软件之前需先确定jetson设备系统l4t版本,因为NVDIA jetpack跟该版本号具有一定的对应关系,如果版本号不对应会导致出现一些异常。具体的对应关系可以参考Jetpack的说明:

在Xavier NX设备上使用以下命令可以查看系统的L4T版本号:
$ head–n 1 /etc/nv_tegra_release

4.1.2 进入载板系统,打开SysteamSettings–>Software&Updates>Ubuntu Software

4.1.3 下载安装Jetpack/sdkmanager并运行(在PC端Ubuntu系统上进行)
[sdkmanager下载网址]: https://developer.nvidia.com/drive/sdk-manager

选择安装最新版本的sdkmanager下载安装
安装命令:$ sudo dpkg -i sdkmage<……>.deb or $ sudo apt install ./sdkmanger-<……>.deb
运行命令:$ sdkmanager

运行界面和操作如下:

  1. 登录界面(低版本可能无法登录)

    image-20230311232026679
  2. 点击圈中的1、2,进行选择Jetson类型以及与LT4相对应的Jetpack版本,3取消勾选。如果2中未发现与其对应的Jetpack版本,则运行sdkmanager的命令改为:$ sdkmanager --archivedversions,其它操作不变。

    image-20230311232300525
  3. 由于以及安装过系统,圈中的1取消勾选,圈中的2可以选择合适的位置(默认不变),圈中的3注意取消勾选Download now.Install later.点击continue

    image-20230311232542687
  4. 输入PC端Ubuntu主机密码

    image-20230311232559144
  5. 圈中的1,实际上应是显示有设备连接的;圈中的2填写板子Ubuntu系统的Username和Password;随后点击Install。

    image-20230311233500272
  6. 接着进入以下界面,这些指标都是板子的指标,如内存是否足够、网络是否连接等。

    image-20230311234633908

    7.最后出现接下来画面即成功

    image-20230319113455316

4.2 问题及解决

4.2.1 如上图,如果出现Internet connection问题,按照其指示可以采取如下方法解决:

  1. 在jetson板上终端输入:$ ping -c 3 www.nvidia.com

image-20230311234239264

  1. 将出现的Ip地址放到jetson板子的/etc/hosts文件中

  2. 使用命令:$ sudo gedit /etc/hosts

​ 在文件中添加一行:23.48.214.59 nvidia.com

  1. 保存后点击Retry即可。

如果上述方法行不通,则可能是sdkmanager版本不是最新造成的。

4.2.2 若出现第三个Accept to APT……错误,则可能是jetson板上的源未更新造成的。

  1. 可以在jetson板上依次输入命令:

$ sudo apt-get update &$ sudo apt-get upgrade

  1. 更新完后Retry即可。

  2. 有时光多Retry几次可能就会成功。

若上述操作失效,则可以替换Jetson板上的Ubuntu源(注意是Jetson源),重新更新尝试一下;或者退出sdkmanager重新弄一遍。

五、安装系统所需的包

5.1 配置cuda环境变量

vi ~/.bashrc # 打开/.bashrc文件
将以下内容输入该文件中(末尾即可)

export PATH=/usr/local/cuda10.2/bin:$PATH # cuda后跟的是cuda版本
export LD_LIBRARY_PATH=/usr/local/cuda10.2/lib64:$LD_LIBRARY_PATH
export CUDA_ROOT=/usr/local/cuda10.2  # 这一项不是很确定是否有用

5.2 配置系统级安装包

输入以下命令即可

sudo apt-get install build-essential make cmake cmake-curses-gui
sudo apt-get install git g++ pkg-config curl  zip zlib1g-dev libopenblas-base libopenmpi-dev 
sudo apt-get install libatlas-base-dev gfortran libcanberra-gtk-module libcanberra-gtk3-module
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev
sudo apt-get install nano locate screen
#scipy 依赖和 cython
sudo apt-get install libfreetype6-dev 
sudo apt-get install protobuf-compiler libprotobuf-dev openssl
sudo apt-get install libssl-dev libcurl4-openssl-dev
sudo apt-get install cython3
sudo apt-get install libxml2-dev libxslt1-dev
#opencv 依赖
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libxvidcore-dev libavresample-dev
sudo apt-get install libtiff-dev libjpeg-dev libpng-dev

5.3 安装配置Python

5.3.1 默认安装python3.6版本

sudo apt-get install -y python3-dev python3-testresources python3-setuptools
wget https://bootstrap.pypa.io/pip/3.6/get-pip.py
sudo python3 get-pip.py # 该命令可能会失败,显示python3使用的python3.6版本较低,导致不成功,只要下载对应版本的pip就行,使用以下命令进行替换:wget https://bootstrap.pypa.io/pip/3.6/get-pip.py
rm get-pip.py # 然后换pip源
mkdir ~/.pip
vim ~/.pip/pip.conf # 换清华源

粘贴以下内容到该文件
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple

5.3.2 解决sudo python3 get-pip.py失败,这里我选择使用python3.7版本

  1. 安装python3.7
sudo apt-get update  # 更新(可跳过)
sudo apt-get install python3.7
python3.7 -V  #查看是否安装成功
  1. 创建软连接,使python3默认指向python3.7
  • 首先把之前的软连接删除:
sudo rm -rf /usr/bin/python3 
which python3.7  # 查看python3.7 安装路径.这里输出/usr/bin/python3.7
  • 创建新的软连接:
sudo ln -s /usr/bin/python3.7 /usr/bin/python3  # 添加python3的软链接。 /usr/bin/python3.7 即 which python3.7输出的安装路径
python3 -V  # 测试是否安装成功
  1. 切换python版本,
    ^解释: 对于不同版本的jetpack,其cuda对应的python版本有所不同,使用该方法便于配合cuda的使用
  • 首先查看python文件
    ls /usr/bin/python* # 查看python文件,会出现python2.7、python3.6、python3.7三个版本
  • 首先看看系统是否配置过python相关的管理信息
    update-alternatives --list python # 如果显示:no alternatives for python,表示没有配置过。
  • 使用以下命令进行配置:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 3
  • 配置成功,会提示你 in auto mode.这个时候我们再次查看配置
    update-alternatives --list python
  • 会看到我们的三个版本已经成功进行了配置。如果需要切换版本,输入命令
    sudo update-alternatives --config python # 然后输入相应的版本序号即可
  • 最后使用:python --version查看版本号,可以发现配置成功

5.4 安装jtop管理GPU

输入命令安装jtop:
sudo -H pip install jetson-stats
安装成功后,输入sudo jtop即可查看硬件相关信息

5.5 安装virtualenv来创建虚拟环境

  1. 安装与配置
  • 使用pip下载virtualenv
sudo pip install virtualenv virtualenvwrapper
vim ~/.bashrc
  • 将以下内容输入其中:
#virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs #指定所有的需拟环境的安装位置
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.6 #指定解释器,改为cuda对应的python版本
  • 终端输入指令激活virtualenv
sudo mkdir $HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh #进行激活生效
source ~/.bashrc #重新载入
  1. virtualenv的使用相关操作
mkvirtualenv name # 创建一个环境
mkvirtualenv -p /python目录/python.exe name # 不使用默认python版本、使用指定python版本创建环境
workon name # 激活环境
deactivate # 退出
rmvirtualenv name # 删除
lsvirtualenv # 所有环境
cpvirtualenv source_name dest_name # 复制虚拟环境

六、安装pytorch以及torchvision

6.1 基本操作

  1. 创建虚拟环境
    [^声明]: 以创建虚拟环境名位torchli,安装1.10.0版本的pytorch和对应版本0.11.1的torchvision为例
  • 使用以下命令创建虚拟环境
Mkvirtualenv -p /usr/bin/python3.6 torchli # -p 后面跟着的是制定python的版本,因为有的pytorch对python版本有要求,所以要指定版本
workon torchli # 进入虚拟环境
  • 如果遇见workon command not find,则使用以下命令
    Source virtualenvwrapper.sh
  • 然后再workon torchli
  1. 安装pytorch
pip install torch-1.10.0-cp36-cp36m-linux_aarch64.whl # 安装pytorch
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision # 下载0.11.1版本
cd torchvision
export BUILD_VERSION=0.11.1
python setup.py install --user # --user可加可不加
  1. 验证是否安装成功
  • 上述操作完成后,输入命令:
python # 进入python:
import torch # 导入torch库
torch.cuda.is_available()  # 验证cuda是否能使用,输出应为True,则pytorch安装成功
import torchvision # 导入torchvision库
print(Torchvision.__version__) # 打印版本号,未报错即成功

6.2 问题及解决

6.2.1. 激活环境失败,报错输出:workon command not find
输入命令source virtualenvwrapper.sh # 输入之后再尝试激活即可
6.2.2. import torch时报错,Illegal instruction (core dumped)

# 修改环境变量
sudo gedit /etc/profile 
export OPENBLAS_CORETYPE=ARMV8 # 将其加入最后面一行,然后保存
# 更新环境变量
source /etc/profile

6.2.3. import torchvision报错
[该报错大致可以分为两个问题]: 1、pillow和torchvision版本不对应出错;2、当前路径含有同名文件导致报错

  1. 在import torchvision过程中遇到有关PIL库的提示报错
    解决方法:尝试卸载当前的pillow,安装较低版本的pillow
    输入命令:
    pip uninstall pillow
    pip install pillow==6.1 # 一般来说安装此版本即可解决问题
    
  2. 由于当前在torchvision文件夹下安装的torchvision,若不退出此路径也会导致import torchvision报错,报错提示路径问题
    解决方法:退出当前文件夹路径,输入以下命令:
    cd .. # 返回上级路径,然后再次尝试import torchvision

七、安装opencv

7.1 情形一

^具体阐述: 在新创建的python虚拟环境中,无法import cv2,且pip install opencv-python始终无法完成,故需要安装opencv,但是一般来说,安装jetpack后,自动安装的有opencv,若此opencv版本不影响你的代码,那么就可以进行以下操作便捷使用opencv库了

  1. 首先在终端执行以下指令查找编译好的cv2库文件的路径
sudo find / -iname "*cv2*" # 得到类似路径/usr/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cython-36m-aarch64-linux-gnu.so,重点是cv2.cython-36m-aarch64-linux-gnu.so文件要求一致
  1. 随后进入虚拟环境的site-packages文件夹下,并链接到查找到的cv2库文件路径即可
cd /home/nx407/.virtualenv/torchli/lib/python3.6/site-packages # 其中nx407是用户名、torchli是我建立的虚拟环境名
ln -s /usr/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cython-36m-aarch64-linux-gnu.so cv2.so  # 注意ln,link的意思,不是大写i
  1. 安装完成后,在虚拟环境中执行下列指令以确保python能正确调用cv2。
python               //进入python
import cv2
cv2.__version__    //若安装成功且能正常调用,此处能输出安装的从v版本
quit()               //退出python

7.2 情形二

  1. 查看已预安装Opencv版本
    pkg-config --modversion opencv

  2. 卸载原Opencv

  • 如果是自己之前安装的话,就找到当初安装Opencv的build文件夹路径,然后进入该build目录执行卸载操作:
cd .../opencv-4.x.x/build
sudo make uninstall
cd .../opencv-4.x.x
sudo rm -r build
  • 若不是则执行以下操作:
sudo apt-get purge libopencv*
sudo apt-get purge python-numpy
sudo apt autoremove // 删除其他未使用的apt包,可有可无
sudo apt-get update
sudo apt-get dist-upgrade
  1. 下载Opencv3.4.5.zip文件

  2. 安装一些相关库和包

sudo apt-get installbuild-essential 
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install --only-upgrade g++-5 cpp-5 gcc-5

如果上述指令失败的话,可以尝试网上换源,如下
更新后再安装Qt5
sudo apt-get install qt5-default # qt5必须要安装成功,不过丢包概率不大,都能装上的

  1. CUDA部分源码的修改
    先找到cuda_gl_interop.h文件,一般都是在/usr/local/cuda/include
    然后在命令框输入
    sudo gedit /usr/local/cuda/include/cuda_gl_interop.h
    这时会弹出一个文件如下图
    image-20230322013045837
    找到红框内代码,并按照图中代码更改为以上内容,然后点save保存,退出。

  2. 开始编译安装opencv-3.4.5
    找到opencv-3.4.5所在文件夹(即前文解压后的文件夹),然后cd到build文件夹里面。
    控制台输入:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_CUDA=ON -D CUDA_ARCH_BIN="6.2" -D CUDA_ARCH_PTX="" \
      -D WITH_CUBLAS=ON -D ENABLE_FAST_MATH=ON -D CUDA_FAST_MATH=ON \
      -D ENABLE_NEON=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF \
      -D WITH_QT=ON -D WITH_OPENGL=ON

接着输入:

sudo make
sudo make install
  1. 配置opencv环境:
    sudo gedit /etc/ld.so.conf.d/opencv.conf # 创建并打开该文件,输入以下内容
    image-20230322013134812
    执行下面的命令,使得刚才配置的路径生效
    sudo ldconfig
    然后打开bash.bashrc文件
    sudo gedit /etc/bash.bashrc
    在打开文件的最后加入如下命令
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

如图:
img1
然后保存文件,使其生效
source /etc/bash.bashrc

  1. 检查是否成功安装opencv
    可以先在jtop查看opencv的安装版本,正确安装后会显示:
    image-20230322013148567
  2. 之后连接一个摄像头,在终端输入,测试opencv是否能正常使用:
cd /opencv-3.4.5/samples/cpp/example_cmake
cmake .
make
# 成功make后,执行
./opencv_example
  1. 上述./opencv_example命令如果失败,原因可能是摄像头的索引错误,
    输入ls usb
    查看摄像头,发现video1
    换一个usb接口插入即可,再执行上述命令,可以发现摄像头成功打开。