Jetson nano 系统安装

Contents

  • Jetson Nano
  • 在 EMMC 上安装镜像
  • U 盘启动和 TF 卡启动
    • U 盘启动 (复制 eMMC 上系统)
    • TF 卡启动
  • 设置远程登录系统
  • SDK 安装
    • 使用 SDK Manager 安装
    • 使用指令安装
  • Linux 操作基础
  • 文件传输、系统备份
  • 风扇配置
  • AI 环境搭建
    • PIP3 安装
    • 安装机器学习领域重要的安装包
    • 设置 CUDA 环境
    • Tensorflow GPU 环境搭建
    • Pytorch 环境搭建
  • 硬件控制
    • Jetson-IO - 端口使能
    • 修改设备树使能端口
  • Camera
    • IMX219-83 Stereo Camera
    • Intel RealSense D435i (深度相机)
      • 安装 SDK 和 pyrealsense2
      • Python codes
  • 更多资料
  • References

我是直接购买的微雪 Jetson nano 开发板,它基于 Jetson Nano Module 核心板,提供与官方的 Jetson Nano Developer Kit (B01) 几乎一模一样的外设接口、大小及厚度

Jetson Nano

Jetson Nano Module 参数

Jetson nano 系统安装_第1张图片


JETSON-IO-BASE-A 底板资源

Jetson nano 系统安装_第2张图片

  • (1) 模组卡座:插入 Jetson Nano 核心板
  • (2) SD 卡扩展卡槽:可以接入 SD 卡做 SD 卡扩展,支持从 SD 卡启动系统
  • (3) M.2 Key E 接口:可接入 AC8265 无线网卡
  • (4) 1.25mm 风扇接口
  • (5) PoE 管脚:不含 PoE 模块
  • (6) 40 PIN GPIO 扩展接口:兼容树莓派引脚,方便就树莓派外设
  • (7) 2.54mm 风扇接口
  • (8) Micro USB 接口:可用于 5V 电源输入或者 USB 数据传输
  • (9) 千兆以太网端口:10/100/1000 Base-T 自适应,接入 PoE 模块可支持 PoE 供电
  • (10) 4 路 USB 3.0 接口支持从 USB 启动系统
  • (11) HDMI 高清接口
  • (12) DisplayPort 接口
  • (13) DC 电源接口:可用于 5V 电源输入
  • (14) 2 路 MIPI CSI 摄像头接口

在 EMMC 上安装镜像

如果购买的是微雪提供的带核心板的 Nano 套件,出厂的时候就已经预先烧好了 JetPack4.6 镜像在 emmc 上,且已经设置了 SD 卡识别,可以跳过这一步。如果需要修改 SD 卡启动,请查看使用手册修改启动路径即可

  • 安装过程可参考 系统环境搭建 和 在 EMMC 上安装镜像

U 盘启动和 TF 卡启动

  • 我们可以额外地烧录系统到 U 盘或者 TF 卡,然后从 U 盘或者 TF 卡启动系统 (因为 EMMC 容量较小,所以有必要把系统装在 U 盘或 TF 卡上)。U 盘启动或 TF 卡启动都是先启动核心板里的 EMMC 上的系统,再由核心板的系统引导到 U 盘上启动或 TF 卡上启动,因此在准备 U 盘启动或者 TF 卡启动时,必须先确保成功烧录 EMMC 系统。核心板里的系统可以使用虚拟机中的 SDK Manager 来烧录系统;TF 卡系统可以使用 Win32DiskImager 来烧录系统;U 盘里的系统使用虚拟机烧录

U 盘启动 (复制 eMMC 上系统)

系统安装

  • 将 U 盘接入 Jetson Nano,查看 U 盘的设备号, 例如 sda,打开 Jetson Nano 终端输入
ls /dev/sd*
  • 格式化 U 盘
sudo mkfs.ext4 dev/sda
  • 修改启动路径. 找到语句 APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0, 将 mmcblk0p1 修改为 sda 保存
sudo vi /boot/extlinux/extlinux.conf
  • 挂载 U 盘
sudo mount /dev/sda /mnt
  • 复制系统到 U 盘
sudo cp -ax / /mnt
  • 复制完成后卸载 U 盘(不是拔掉 U 盘)
sudo umount /mnt/
  • 重启系统
sudo reboot

TF 卡启动

设备树时能 SD 卡

  • 在 Ubuntu 主机安装 dtc 软件
sudo apt-get install device-tree-compiler
  • 进入 HW Imager 内核路径下,反编译 dts 源文件
# 若使用的 SDK Manager 软件请使用以下命令
cd ~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra/kernel/dtb #(针对不同jetpack,修改对应路径)
dtc -I dtb -O dts -o tegra210-p3448-0002-p3449-0000-b00.dts tegra210-p3448-0002-p3449-0000-b00.dtb
# 若使用的资源包请使用以下命令
cd sources_nano/Linux_for_Tegra/kernel/dtb
sudo dtc -I dtb -O dts -o tegra210-p3448-0002-p3449-0000-b00.dts tegra210-p3448-0002-p3449-0000-b00.dtb
  • 修改设备树
sudo gedit tegra210-p3448-0002-p3449-0000-b00.dts
  • 找到 sdhci@700b0400 部分,将 status = "disable" 改成 status = "okay",并在下面添加 TF 信息
cd-gpios = <0x5b 0xc2 0x0>;
sd-uhs-sdr104;
sd-uhs-sdr50;
sd-uhs-sdr25;
sd-uhs-sdr12;
            
no-mmc;
uhs-mask = <0xc>;

Jetson nano 系统安装_第3张图片

  • 编译 dtb 文件
sudo dtc -I dts -O dtb -o tegra210-p3448-0002-p3449-0000-b00.dtb tegra210-p3448-0002-p3449-0000-b00.dts
  • 烧录系统,Jetson Nano 需进入 recovery 模式,连接到 Ubuntu 电脑
# 若使用的 SDK Manager 软件请使用以下命令:
cd ~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra
sudo ./flash.sh jetson-nano-emmc mmcblk0p1
# 若使用的资源包请使用以下命令:
cd sources_nano/Linux_for_Tegra
sudo ./flash.sh jetson-nano-emmc mmcblk0p1
  • 断开 USB 线和跳帽,进行 Jetson Nano 开机配置
  • 检查 SD 卡是否被识别. 如果有识别到 mmcblk1p1 设备,说明 SD 卡被正常识别了
sudo ls /dev/mmcblk*

安装系统 - 直接复制 eMMC 上系统 (该操作会格式化 TF 卡 )

  • 格式化 SD 卡 (如果出现提示已有文件系统就需要先卸载 SD 卡 sudo umount /media/(这里按下 Tab 键自动补全))
sudo mkfs.ext4 /dev/mmcblk1
  • 挂载 SD 卡
sudo mount /dev/mmcblk1 /mnt
  • 复制系统到 SD 卡(该过程没有信息打印请耐心等待)
sudo cp -ax / /mnt
  • 复制完成后卸载 SD 卡(不是拔掉 SD 卡)
sudo umount /mnt/

下载其他镜像

  • 也可以直接在 Github 下载 Jetson nano 镜像进行烧录,例如 A Jetson Nano - Ubuntu 20.04 image with OpenCV, TensorFlow and Pytorch (User: jetson; Password: jetson).

修改从 SD 卡启动系统 (可选)

sudo vi /boot/extlinux/extlinux.conf
  • 找到语句 APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0, 将 mmcblk0p1 改成 mmcblk1, 保存,然后重启系统即可

扩容镜像

  • 注意,如果 SD 卡是 64G 的,在进入系统后,打开终端,输入 df -h,查看磁盘大小,若空间大小显示小于 64G,可以按如下方法扩容镜像
cd /usr/lib/nvidia/resizefs/
sudo chmod 777 nvresizefs.sh
sudo ./nvresizefs.sh
sudo reboot

设置远程登录系统

  • 先用网线确保 Jetson nano 和主机在同一局域网下,再用 MobaXterm 远程登录即可。也可以用 NoMachineVNC 登录远程桌面,可参考 NoMachine 登录 和 配置 VNC 服务器

SDK 安装

  • 前面的系统安装的时候只是安装了基本的系统,其他的 JetPack SDK 组件,比如 cuDNN, CUDA, TensorRT, Computer Vision 等都需要在系统正常启动后进一步安装,这里提供安装 SDK 组件的步骤说明。若要安装该部分,请保证是在以 TF 卡或者 U 盘为主系统的情况下,因为下载内容可能会导致 EMMC 磁盘容量告急

使用 SDK Manager 安装

  • 用 USB 数据线连接 Jetson Nano 的 Micro USB 接口到 Ubuntu 主机 (不需要设置 nano为 recovery 模式),Ubuntu 主机电脑运行 sdkmanager 指令打开 SDK Managaer
  • 类似于前面烧录系统的操作,不同的是,在步骤 2 中,不勾选 OS 选项,而是勾选 SDK 选项, 然后 continue 到安装.在下载资源之后,会弹窗提示填写用户名和密码,填写 nano 系统的用户名和密码即可

使用指令安装

sudo apt update
sudo apt install nvidia-jetpack

Linux 操作基础

  • 可参考 Linux 操作基础

文件传输、系统备份

  • 可参考 配置

风扇配置

  • 系统自带温控系统,不必要情况可以不需要手动控制
# 风扇转速调节
# 255 是最大转速,0 是停止
sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'
# 获取 CPU 温度,可以通过程序智能控制风扇
cat /sys/class/thermal/thermal_zone0/temp

AI 环境搭建

  • 下面操作基于 JetPack4.6 系统镜像,Python 版本为 Python3.6,TensorFlow 版本为 2.5.0,Pytorch 版本为 1.9.0 为例

PIP3 安装

  • Jetson Nano 中默认安装了 Python3.6 版本,这里直接安装 PIP3
sudo apt update
sudo apt-get install python3-pip python3-dev
# 默认安装的 PIP 是 9.01 版本,需要把它升级到最新版
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade --force-reinstall pip
sudo reboot
# 查看 pip3 版本
pip3 -V
  • 为了防止出现 “Illegal instruction (core dumped)” 报错,需要在 ~/.bashrc 最后添加
echo "export OPENBLAS_CORETYPE=ARMV8" >> ~/.bashrc

安装机器学习领域重要的安装包

sudo apt-get install python3-numpy
sudo apt-get install python3-scipy
sudo apt-get install python3-pandas
sudo apt-get install python3-matplotlib
sudo apt-get install python3-sklearn

设置 CUDA 环境

注意:需要先进行 SDK 安装来安装 CUDA

  • 设置环境变量
sudo vim .bashrc
export PATH=/usr/local/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.2
# 查看 CUDA 版本
nvcc -V

Tensorflow GPU 环境搭建

  • 可参考 Tensorflow GPU 环境搭建

Pytorch 环境搭建

  • 下载依赖库
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev libopenblas-base libopenmpi-dev
  • 登录英伟达官网下载 Pytorchv1.9.0 安装包 后进行安装
sudo pip3 install torch-1.9.0-cp36-cp36m-linux_aarch64.whl 
  • Torchvision 版本要与 Pytorch 版本相匹配,我们前面安装的 Pytorch 版本为 1.9.0,Torchvision 安装 v0.10.0 版本
pip3 install torchvision==0.10.0

硬件控制

  • 可参考 硬件控制

Jetson-IO - 端口使能

  • 所有 Jetson 扩展板上都会带有 40-pin GPIO 接口,我们可以按需求使能其中的 Special Function I/O (SFIO) (e.g. I2C, I2S, SPI, and so on). 这些端口的默认配置 (绝大多数端口都被默认设置为了 GPIO) 都被存储在了 Jetson 的 Flash 中,在之前我们需要经过复杂的步骤才能对这些端口功能进行重新配置,但从 JetPack 4.3 开始,我们可以使用 Jetson-IO 更轻松地进行端口配置

Warning: Jetson-io.py 无法支持 Jetson Nano B01 带 emmc 模组版本,因此用户无法通过 jetson-io.py 来直接配置 40PIN 引脚

sudo /opt/nvidia/jetson-io/jetson-io.py

Jetson nano 系统安装_第4张图片

Jetson nano 系统安装_第5张图片


使能 SPI

  • Configure Jetson 40pin Header ⇒ \Rightarrow Configure header pins manually ⇒ \Rightarrow 按回车使能 SPI1 (pins 19,21,23,24,26) ⇒ \Rightarrow Back
    Jetson nano 系统安装_第6张图片可以看到,此时 main menu 中已经显示新的端口配置了,SPI 用到的 5 个端口都已被使能
    Jetson nano 系统安装_第7张图片
  • 最后保存配置并重启即可完成配置:Save Pin changes ⇒ \Rightarrow Save and reboot to reconfigure pins

修改设备树使能端口

  • 对于无法使用 Jetson-IO 的情况,就只能直接修改设备树文件来使能端口 (下面的操作需要重装系统,请谨慎操作)

资源下载 (Jetpack 4.6.2)

  • 如果之前用 SDK Manager 安装过系统镜像,可以直接在上面修改设备树。 如果没有的话,需要参考以下资源下载部分先进行操作
  • 在 ubuntu 电脑新建一个文件夹
sudo mkdir sources_nano
cd  sources_nano
  • 下载以下两个资源包
wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t210/jetson-210_linux_r32.7.2_aarch64.tbz2
wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t210/tegra_linux_sample-root-filesystem_r32.7.2_aarch64.tbz2
  • 解压资源
sudo tar -xjvf jetson-210_linux_r32.7.2_aarch64.tbz2
cd Linux_for_Tegra/rootfs/
sudo tar -xjvf ../../tegra_linux_sample-root-filesystem_r32.7.2_aarch64.tbz2
cd ../
sudo ./apply_binaries.sh  # 若出现报错按照系统提示操作,然后再次输入该行命令

修改设备树

  • 安装 dtc 工具
sudo apt-get install -y device-tree-compiler
  • 反编译出 dts 文件
cd kernel/dtb
sudo dtc -I dtb -O dts -o tegra210-p3448-0002-p3449-0000-b00.dts tegra210-p3448-0002-p3449-0000-b00.dtb
  • 修改 dts 文件
sudo cp tegra210-p3448-0002-p3449-0000-b00.dts tegra210-p3448-0002-p3449-0000-b00-bak.dts
sudo gedit tegra210-p3448-0002-p3449-0000-b00.dts
  • 找到 spi@7000d400{} 部分,在其中的 spi@0 结构和 spi@1 结构分别添加语句 status = “okay”
    Jetson nano 系统安装_第8张图片
  • 找到 spi1 的引脚设置,将其中的 nvidia,function 改为 spi1, nvidia,tristate 改为 0x0, nvidia,enable-input 改为 0x1. 如图, 五个引脚都要操作
    Jetson nano 系统安装_第9张图片
  • 保存文件,并重新编译为 dtb. 注意,如果你还需要修改 SD 卡等操作,请一起在设备树中进行修改
sudo dtc -I dts -O dtb -o tegra210-p3448-0002-p3449-0000-b00.dtb tegra210-p3448-0002-p3449-0000-b00.dts

重新烧录系统

  • 将 nano 设置为 recovery 烧录模式,接入 ubuntu 电脑。注意,这里不支持只更新 dtb 分区,因此需要重新烧录整个系统,烧录系统后需要重新做开机配置,因此,请提前将 HDMI 屏幕和键盘连接到 nano 上
cd ../../
sudo ./flash.sh jetson-nano-emmc mmcblk0p1

加载内核模块

pip install spidev
echo "sudo modprobe spidev" >> ~/.bashrc
source ~/.bashrc

测试 SPI

  • 加载 spidev
git clone https://github.com/rm-hull/spidev-test
cd spidev-test/
gcc spidev_test.c -o spidev_test
  • 用一根排线将 nano 40PIN 的 19 和 21 号引脚短接,运行程序测试,如果中断打印信息 RX 和 TX 可以正常的发送和接受信息即可
./spidev_test -v -D /dev/spidev0.0 -p "Test"

Jetson nano 系统安装_第10张图片

Camera

IMX219-83 Stereo Camera

硬件连接

  • 将两条摄像头排线,金属面朝向散热板插入 Jetson Nano 开发套件上的摄像头接口

测试摄像头

  • 打开终端,输入以下指令查看设备是否被正常识别到,如果出现 video0 和 video1 就是正常的
ls /dev/video*

测试 video 0

DISPLAY=:0.0 nvgstcapture-1.0 --sensor-id=0

测试 video 1

DISPLAY=:0.0 nvgstcapture-1.0 --sensor-id=1

如果摄像头拍摄效果偏红的话,可以按照一下步骤操作

# 下载 camera-override.isp 文件,解压到特定文件夹
wget http://www.waveshare.net/w/upload/e/eb/Camera_overrides.tar.gz
tar zxvf Camera_overrides.tar.gz 
sudo cp camera_overrides.isp /var/nvidia/nvcam/settings/

# 安装文件
sudo chmod 664 /var/nvidia/nvcam/settings/camera_overrides.isp
sudo chown root:root /var/nvidia/nvcam/settings/camera_overrides.isp

Intel RealSense D435i (深度相机)

安装 SDK 和 pyrealsense2

  • 可以使用 pyrealsense2 包来方便地使用 Intel RealSense 深度相机,但 Intel 并没有在 arm 平台上编译 python 包,因此需要自行编译源码
git clone https://github.com/IntelRealSense/librealsense.git
# install necessary packages
sudo apt-get install libxrandr-dev
sudo apt-get install libxinerama-dev
sudo apt-get install libsdl2-dev
mkdir build
cd build
# cmake 时需要下载一个 github 仓库,因此需要确保网络可以访问 github
cmake ../ -DBUILD_PYTHON_BINDINGS:bool=true -DPYTHON_EXECUTABLE=/usr/bin/python3.6
make -j4
sudo make install
# 把下面的命令写入 ~/.bashrc
export PATH=$PATH:~/.local/bin
export PYTHONPATH=$PYTHONPATH:/usr/local/lib
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.6/pyrealsense2

Test

# First import the library
import pyrealsense2 as rs

# Create a context object. This object owns the handles to all connected realsense devices
pipeline = rs.pipeline()
pipeline.start()

Python codes

  • ref: Sample Code for Intel® RealSense™ Python Wrapper
  • 如果要获取颜色图和深度图的话,可以参考 align-depth2color.py,它将深度图和颜色图一一对应,这样可以输出颜色图上每个像素点对应的实际深度

更多资料

  • 可参考 资料

References

  • waveshare Jetson-nano-dev-kit wiki
  • A Jetson Nano - Ubuntu 20.04 image with OpenCV, TensorFlow and Pytorch
  • SPI on Jetson – Using Jetson-IO
  • jetson-io.py がすぐに終了するときの解決策
  • Ubuntu/Jetson Nano问题解决“Illegal instruction(core dumped)”
  • IMX219-83 Stereo Camera
  • librealsense - Python Wrapper
  • Ubuntu —— librealsense编译报错:The RandR headers were not found 等类似报错解决方案汇总

你可能感兴趣的:(jetson,nano,jetson,nano)