摘要: 最近实验室买了两块嵌入式NVIDIA Jetson Xavier
NX 开发板,学长拿来让我折腾下,遂有了这篇文章。
关键词: Jetson,NVIDIA,CUDA
介绍
略
制作启动盘
NVIDIA Jetson Xavie
NX镜像下载地址:https://developer.nvidia.com/embedded/downloads#?search=Jetson%20NX
板子使用的是SD卡作为引导盘和存储盘的,首先要格式化内存卡。使用SD
Card Formatter 格式化内存卡。SD Card
Formatter下载地址
格式化时注意盘符 ,随后点击Format .
烧录镜像到内存卡
使用balenaEtcher 软件烧录镜像。下载地址:https://www.balena.io/etcher/
选择下载好的jetson-nx-jp441-sd-card-image 文件,点击Flash.
刷写完以后会有一个验证数据的操作,不建议跳过。
稍后片刻,等待完成。
点亮主机
把SD卡插入卡槽,将HDMI线连接到屏幕上,插入鼠标和键盘,启动电源。
初始配置
采用M.2 Key M SSD作为启动盘
打开Ubuntu18.04自带 Disks 工具,'Ctrl+F' 或点击右上角选择‘Format
Disk' 并将其格式化为GPT 格式
格式化时必须选择“Ext4”, 等待完成后,点击下方 '三角按钮',mount
到固定目录如/media/nvidia/xxxx
执行以下命令
1 2 3 git clone https://github.com/jetsonhacks/rootOnNVMe.git cd rootOnNVMe./copy-rootfs-ssd.sh
更改apt源
感谢清华大学开源软件镜像 对开源软件的大力支持。
备份原有源文件
1 mv /etc/apt/sources.list /etc/apt/sources.list.bak
1 vim /etc/apt/sources.list
将以下内容粘贴到终端
1 2 3 4 5 6 7 8 9 10 11 12 13 # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse # 预发布软件源,不建议启用 # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
更新系统
1 sudo apt update && sudo apt upgrade -y
更改pypi源
1 2 3 sudo install python3-pip python3 -m pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip python3 -m pip install config set global .index-url https://mirrors.cloud.tencent.com/pypi/simple
风扇控制
1 2 echo 255 > /sys/devices/pwm-fan/target_pwm
重启以后风扇是不转的,所以需要设置开机运行:
创建/etc/rc.local,并添加如下内容:
(注:系统启动的时候会执行/etc/rc.local,如果已存在rc.local,则在exit 0之前加入那3句命令即可)
1 2 3 4 5 #!/bin/bash sleep 10sudo /usr/bin/jetson_clocks sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm' exit 0
添加执行权限: sudo chmod 755 /etc/rc.local
以后重启就会自动开启最大性能并启动风扇了。
远程桌面
开机以后SSH默认是开启的。这里使用Nomachine作为远程桌面软件。Nomachine的专有NX协议在高延迟低带宽的链路上提供了近乎本地速度的响应能力。
ARM64客户端下载链接
Windows客户端下载链接
设置分辨率
如果没有显示器连接,默认VNC 连接后的分辨率为640x480
,将以下内容添加到/etc/X11/xorg.conf文件,将其设置为默认VNC分辨率设置。
1 2 3 4 5 6 7 8 9 Section "Screen" Identifier "Default Screen" Monitor "Configured Monitor" Device "Tegra0" SubSection "Display" Depth 24 Virtual 1024 768 EndSubSection EndSection
快捷设置代理
在/home目录下,把一下内容加入到.bashrc.
1 2 3 4 alias proxy='export all_proxy=http://127.0.0.1:10809 export https_proxy=http://127.0.0.1:10809 export socks_proxy=socks5://127.0.0.1:10808' alias unproxy='unset all_proxy https_proxy socks_proxy'
安装Jtop
Jtop(一个系统监视实用程序,可在终端上运行,并实时查看和控制 NVIDIA
Jetson的状态 )
1 2 3 sudo apt-get install python3-pip sudo pip3 install jetson-stats sudo jtop
查看当前运行功率
1 2 3 4 5 6 7 8 sudo nvpmodel --query sudo nvpmodel -m sudo jetson_clocks --show sudo jetson=_clocks
安装Pytorch
下载地址
根据自己的Python环境下载whl文件.这里是Python
3.6.9,安装的版本是PyTorch v1.7。
安装命令
1 2 3 sudo apt-get install python3-pip libopenblas-base libopenmpi-dev python3 -m pip install Cython python3 -m pip install numpy torch-1.7.0-cp36-cp36m-linux_aarch64.whl
安装torchvision
以v0.8.1 为例.
1 2 3 4 5 6 7 sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev git clone --branch v0.8.1 https://e.coding.net/fly97/mechine-learning/torchvision.git cd torchvisionexport BUILD_VERSION=v0.8.1 python3 -m pip 'pillow<7' sudo python setup.py install cd ../
对应版本:
PyTorch v1.0 - torchvision v0.2.2
PyTorch v1.1 - torchvision v0.3.0
PyTorch v1.2 - torchvision v0.4.0
PyTorch v1.3 - torchvision v0.4.2
PyTorch v1.4 - torchvision v0.5.0
PyTorch v1.5 - torchvision v0.6.0
PyTorch v1.6 - torchvision v0.7.0
PyTorch v1.7 - torchvision v0.8.1
CUDA
官网最新镜像文件自带cuda 版本为10.2,OpenCV4
将以下命令写入~/.bashrc
1 2 3 export CUDA_HOME=/usr/local/cuda-10.2export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda-10.2/bin:$PATH
退出后保存
检查
返回的文字如下
1 2 3 4 nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2019 NVIDIA Corporation Built on Wed_Oct_23_21:14:42_PDT_2019 Cuda compilation tools, release 10.2, V10.2.89
安装ROS仓库
1 sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.bfsu.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
添加ROS密钥
1 sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
启用额外的软件库
1 2 3 sudo apt-add-repository universe sudo apt-add-repository multiverse sudo apt-add-repository restricted
添加ROS
OpenCV
1 pkg-config opencv4 --modversion
返回的文字如下
安装CUDA OpenCV
移除原有OpenCV
1 2 3 sudo apt-get purge libopencv* sudo apt autoremove #此步不建议运行, 有可能产生奇怪的依赖问题 sudo apt-get update
安装依赖
1 2 3 4 5 6 7 8 9 10 11 12 # 安装必备库,cmake,git,g++ sudo apt-get install -y build-essential checkinstall cmake pkg-config yasm git gfortran sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev sudo apt-get install -y libjpeg8-dev libjasper-dev libpng12-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libtbb-dev libatlas-base-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils # 处理图像所需的包 sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # 处理视频所需的包 sudo apt-get install libxvidcore-dev libx264-dev ffmpeg # opencv功能优化 sudo apt-get install libatlas-base-dev gfortran
下载OpenCV源代码
下载地址:https://opencv.org/releases/
此次编译使用的是opencv-4.4.0.zip版本。
额外的库:https://github.com/opencv/opencv_contrib
1 2 3 4 unzip opencv-4.4.0.zip cd opencv-4.4.0mkdir buildcd build
执行CMAKE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DOPENCV_ENABLE_NONFREE=1 \ -DBUILD_opencv_python2=1 \ -DBUILD_opencv_python3=1 \ -DWITH_FFMPEG=1 \ -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2 \ -DCUDA_ARCH_BIN=7.2 \ -DCUDA_ARCH_PTX=7.2 \ -DWITH_CUDA=1 \ -DENABLE_FAST_MATH=1 \ -DCUDA_FAST_MATH=1 \ -DWITH_CUBLAS=1 \ -DOPENCV_GENERATE_PKGCONFIG=1 \ -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.4.0/modules \ ..
注意:opencv_contrib-4.4.0是放在opencv-4.4.0中,注意文件的路径!!!
使用cuda,-DWITH_CUDA=1.
官方文档的cmake的配置情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 cmake \ -DCMAKE_BUILD_TYPE =Release \ -DCMAKE_INSTALL_PREFIX =/usr \ -DBUILD_PNG=OFF \ -DBUILD_TIFF=OFF \ -DBUILD_TBB=OFF \ -DBUILD_JPEG=OFF \ -DBUILD_JASPER=OFF \ -DBUILD_ZLIB=OFF \ -DBUILD_EXAMPLES=ON \ -DBUILD_JAVA=OFF \ -DBUILD_opencv_python2=ON \ -DBUILD_opencv_python3=OFF \ -DENABLE_NEON=ON \ -DWITH_OPENCL=OFF \ -DWITH_OPENMP=OFF \ -DWITH_FFMPEG=ON \ -DWITH_GSTREAMER=OFF \ -DWITH_GSTREAMER_0_10=OFF \ -DWITH_CUDA=ON \ -DWITH_GTK=ON \ -DWITH_VTK=OFF \ -DWITH_TBB=ON \ -DWITH_1394=OFF \ -DWITH_OPENEXR=OFF \ -DCUDA_TOOLKIT_ROOT_DIR=/usr /local/cuda -8.0 \-DCUDA_ARCH_BIN =6.2 \ -DCUDA_ARCH_PTX ="" \ -DINSTALL_C_EXAMPLES =ON \ -DINSTALL_TESTS =OFF \ -DOPENCV_TEST_DATA_PATH =../opencv_extra/testdata \ ../opencv
注意:请根据自己的的CUDA版本和实际路径修改参数!
参考链接:OpenCV:
Building OpenCV for Tegra with CUDA
编译
执行以下命令
其中1指的线程,初次编译建议使用单线程,,解决一些奇怪问题。
安装
执行以下命令
成功啦
解决各种出错问题
src/grfmt_jpeg2000.cpp.o failed
编译时关闭如下tag:-DBUILD_JASPER=OFF 即可.
fatal error: boostdesc_bgm.i: No such file or
directory
可参考:https://github.com/AastaNV/JEP/issues/20
https://github.com/opencv/opencv_contrib/issues/1301#issuecomment-618262386
将下载好的文件解压到以下文件夹:
cuDNN
1 2 3 4 cd /usr/src/cudnn_samples_v8/mnistCUDNNsudo make sudo chmod a+x mnistCUDNN ./mnistCUDNN
更改桌面
默认的桌面环境是Unity,此次更改成更轻量的ubuntu-mate.
注意:安装过程中请勿卸载现有的桌面登录管理器,以免出现无法登录进系统的尴尬。
安装更轻量的桌面登录管理器LightDM :LightDM是2010年开始的新项目,且被设计为轻量、小巧、快速。相较于GDM-GTK、KDM-Qt、LightDM实际上与界面无关,它仅支持本地图形界面获得最好兼容性。
1 sudo apt-get install lightdm
安装ubuntu-mate-destop
1 sudo apt-get install ubuntu-mate-core ubuntu-mate-desktop
lightdm设置自动登录
设置autologin-user 来设置系统启动时自动登录某个帐户。设置autologin-user-timeout 限制用户在设定秒内如果没有自动登录则不能自动登录。
编辑以下文件
1 vim /etc/lightdm/lightdm.conf
设置autologin-user 来设置系统启动时自动登录某个帐户。设置autologin-user-timeout 限制用户在设定秒内如果没有自动登录则不能自动登录。
1 2 3 [SeatDefaults] autologin-user=username autologin-user-timeout=delay
lightdm修改默认会话
默认会话设置保存在/usr/share/lightdm/lightdm.conf.d 会话包中。
1 2 [SeatDefaults] user-session=name
其中name代表/usr/share/xsessions/*.desktop 中.desktop。
转载自:https://www.cnblogs.com/EasonJim/p/7128317.html
sudo无需输入密码
切换到root用户,输入以下命令:
在最后一行输入
1 <用户名> ALL=(ALL) NOPASSWD: ALL