一、准备
- Ubuntu电脑 or 虚拟机(Ubuntu系统)
- 能够进行数据传输的Micro-USB数据线
- 显示屏 、HDMI转接线、键鼠
二、进行烧录(参考瑞泰教程)
2.1 系统软件包的下载
2.1.1 烧录所需文件集中在这两个文件夹中,在本部分我选择安装LT4 R32.7.1版本
![image-20230311205757974](/images/Jetson/image-20230311205757974.png)
2.1.2根据Jetson类型进行选择
![image-20230311205921697](/images/Jetson/image-20230311205921697.png)
2.1.3根据载板型号进行选择
![image-20230311210038630](/images/Jetson/image-20230311210038630.png)
2.1.4随便选择一个版本
![image-20230311210058553](/images/Jetson/image-20230311210058553.png)
2.1.5下载对应文件,其中rtso-6002对应位置即为载板型号
![image-20230311210118374](/images/Jetson/image-20230311210118374.png)
2.1.6选择对应版本的L4T文件
![image-20230311210156444](/images/Jetson/image-20230311210156444.png)
2.1.7下载相应文件
![image-20230311210216935](/images/Jetson/image-20230311210216935.png)
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 设置根文件系统
-
进入Linux Driver Package 的根文件系统目录
$ cd <your_L4T_root>/Linux_for_Tegra/roofs
-
解压 the Root File System :
$ sudo tar -jxpf ../../Tegra_Linux_Sample-Root-Filesystem_R32.7.1_aarch64.tbz2
2.2.4 安装 BSP 支持包
-
将 Realtimes-L4T-
.tar 包解压到与 Linux_for_Tegra 文件夹同级目录下面,使用命令: $ tar -xvf Realtimes-L4T-<version>.tar
-
进入到 Realtimes-L4T 文件夹,运行:
$ sudo ./install.sh
安装成功会有 success 提示! -
运行 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-
$ sudo ./flash.sh rtso-6002e-1.2v mmcblk0p1
3.3.2 可能遇到的问题
-
板子型号查看,一般来说板子上会带有型号,若找不到可以咨询卖方
-
关于输入选项,如下,可以发现红框圈中的有很多型号的选项,其中rtso-6002e表示rtso-6002-emmc板,rtso-6002则是另一种类型的板子,并且6002-emmc下还有v1.2、v1.3等型号,根据板子进行选择。(一定不要弄错,这些文件是与主板相配的)
3.3.3 报错一
如上报错需考虑两个原因:
- 主机与板子进行数据传输的Micro-USB数据线是否具有传输数据的作用,可以使用lsusb查看是否含有Nvidia Crop;
- 板子是否进入了recovery模式。
3.3.4 报错二
仔细观察可以发现问题在于一个.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](/images/Jetson/image-20230311225106076.png)
3.2.4 进入到rootOnNVMe/data
目录下,修改其中的脚本文件:setssdroot.sh
与setssdroot.service
,将其中的/dev/nvme0n1p1
修改为/dev/mmcblk1
,方法同上。
3.2.5 回到rootOnNVMe目录下,执行以下命令:
sudo ./setup-service.sh
成功后如下图:
![image-20230311225311334](/images/Jetson/image-20230311225311334.png)
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、2,进行选择Jetson类型以及与LT4相对应的Jetpack版本,3取消勾选。如果2中未发现与其对应的Jetpack版本,则运行sdkmanager的命令改为:
$ sdkmanager --archivedversions
,其它操作不变。 -
由于以及安装过系统,圈中的1取消勾选,圈中的2可以选择合适的位置(默认不变),圈中的3注意取消勾选Download now.Install later.点击continue。
-
输入PC端Ubuntu主机密码
-
圈中的1,实际上应是显示有设备连接的;圈中的2填写板子Ubuntu系统的Username和Password;随后点击Install。
-
接着进入以下界面,这些指标都是板子的指标,如内存是否足够、网络是否连接等。
7.最后出现接下来画面即成功
4.2 问题及解决
4.2.1 如上图,如果出现Internet connection问题,按照其指示可以采取如下方法解决:
- 在jetson板上终端输入:
$ ping -c 3 www.nvidia.com
-
将出现的Ip地址放到jetson板子的/etc/hosts文件中
-
使用命令:
$ sudo gedit /etc/hosts
在文件中添加一行:23.48.214.59 nvidia.com
- 保存后点击Retry即可。
如果上述方法行不通,则可能是sdkmanager版本不是最新造成的。
4.2.2 若出现第三个Accept to APT……错误,则可能是jetson板上的源未更新造成的。
- 可以在jetson板上依次输入命令:
$ sudo apt-get update
&$ sudo apt-get upgrade
-
更新完后Retry即可。
-
有时光多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版本
- 安装python3.7
sudo apt-get update # 更新(可跳过)
sudo apt-get install python3.7
python3.7 -V #查看是否安装成功
- 创建软连接,使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 # 测试是否安装成功
- 切换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来创建虚拟环境
- 安装与配置
- 使用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 #重新载入
- 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 基本操作
- 创建虚拟环境
[^声明]: 以创建虚拟环境名位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
- 安装pytorch
- 首先下载pytorch pip wheels(对应自己装的Jatpack的版本)
[下载网址]:https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 - 下载完后,输入命令:
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可加可不加
- 验证是否安装成功
- 上述操作完成后,输入命令:
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、当前路径含有同名文件导致报错
- 在import torchvision过程中遇到有关PIL库的提示报错
解决方法:尝试卸载当前的pillow,安装较低版本的pillow
输入命令:pip uninstall pillow pip install pillow==6.1 # 一般来说安装此版本即可解决问题
- 由于当前在torchvision文件夹下安装的torchvision,若不退出此路径也会导致import torchvision报错,报错提示路径问题
解决方法:退出当前文件夹路径,输入以下命令:
cd .. # 返回上级路径,然后再次尝试import torchvision
七、安装opencv
7.1 情形一
^具体阐述: 在新创建的python虚拟环境中,无法import cv2,且pip install opencv-python始终无法完成,故需要安装opencv,但是一般来说,安装jetpack后,自动安装的有opencv,若此opencv版本不影响你的代码,那么就可以进行以下操作便捷使用opencv库了
- 首先在终端执行以下指令查找编译好的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文件要求一致
- 随后进入虚拟环境的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
- 安装完成后,在虚拟环境中执行下列指令以确保python能正确调用cv2。
python //进入python
import cv2
cv2.__version__ //若安装成功且能正常调用,此处能输出安装的从v版本
quit() //退出python
7.2 情形二
-
查看已预安装Opencv版本
pkg-config --modversion opencv
-
卸载原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
-
下载Opencv3.4.5.zip文件
-
安装一些相关库和包
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必须要安装成功,不过丢包概率不大,都能装上的
-
CUDA部分源码的修改
先找到cuda_gl_interop.h
文件,一般都是在/usr/local/cuda/include
里
然后在命令框输入
sudo gedit /usr/local/cuda/include/cuda_gl_interop.h
这时会弹出一个文件如下图
找到红框内代码,并按照图中代码更改为以上内容,然后点save保存,退出。 -
开始编译安装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
- 配置opencv环境:
sudo gedit /etc/ld.so.conf.d/opencv.conf # 创建并打开该文件,输入以下内容
执行下面的命令,使得刚才配置的路径生效
sudo ldconfig
然后打开bash.bashrc文件
sudo gedit /etc/bash.bashrc
在打开文件的最后加入如下命令
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
如图:
然后保存文件,使其生效
source /etc/bash.bashrc
- 检查是否成功安装opencv
可以先在jtop查看opencv的安装版本,正确安装后会显示:
- 之后连接一个摄像头,在终端输入,测试opencv是否能正常使用:
cd /opencv-3.4.5/samples/cpp/example_cmake
cmake .
make
# 成功make后,执行
./opencv_example
- 上述
./opencv_example
命令如果失败,原因可能是摄像头的索引错误,
输入ls usb
查看摄像头,发现video1
换一个usb接口插入即可,再执行上述命令,可以发现摄像头成功打开。