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

Jetson Nano

Jetson Nano Module 参数

在这里插入图片描述


JETSON-IO-BASE-A 底板资源

在这里插入图片描述

  • (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 卡启动,请查看使用手册修改启动路径即可

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 终端输入

  1. ls /dev/sd_

  • 格式化 U 盘

  1. sudo mkfs.ext4 dev/sda

  • 修改启动路径. 找到语句 APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0, 将 mmcblk0p1 修改为 sda 保存

  1. sudo vi /boot/extlinux/extlinux.conf

  • 挂载 U 盘

  1. sudo mount /dev/sda /mnt

  • 复制系统到 U 盘

  1. sudo cp -ax / /mnt

  • 复制完成后卸载 U 盘(不是拔掉 U 盘)

  1. sudo umount /mnt/

  • 重启系统

  1. sudo reboot

TF 卡启动

设备树时能 SD 卡

  • 在 Ubuntu 主机安装 dtc 软件

  1. 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

  • 修改设备树

  1. 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>;

在这里插入图片描述

  • 编译 dtb 文件

  1. 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 卡被正常识别了

    1. sudo ls /dev/mmcblk_


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

    • 格式化 SD 卡 (如果出现提示已有文件系统就需要先卸载 SD 卡 sudo umount /media/(这里按下 Tab 键自动补全))

    1. sudo mkfs.ext4 /dev/mmcblk1

    • 挂载 SD 卡

    1. sudo mount /dev/mmcblk1 /mnt

    • 复制系统到 SD 卡(该过程没有信息打印请耐心等待)

    1. sudo cp -ax / /mnt

    • 复制完成后卸载 SD 卡(不是拔掉 SD 卡)

    1. sudo umount /mnt/


    下载其他镜像


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

    1. 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 远程登录即可。也可以用 NoMachine  VNC 登录远程桌面,可参考 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 系统的用户名和密码即可

    使用指令安装

    1. sudo apt update
      sudo apt install nvidia-jetpack

    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
    

    1. # 查看 pip3 版本
      pip3 -V

    • 为了防止出现 “Illegal instruction (core dumped)” 报错,需要在 ~/.bashrc 最后添加

    1. 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

      • 设置环境变量

      1. sudo vim .bashrc

      1. 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

      1. # 查看 CUDA 版本
        nvcc -V

      Tensorflow GPU 环境搭建

      Pytorch 环境搭建

      • 下载依赖库

      1. sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev libopenblas-base libopenmpi-dev

      1. sudo pip3 install torch-1.9.0-cp36-cp36m-linux_aarch64.whl

      • Torchvision 版本要与 Pytorch 版本相匹配,我们前面安装的 Pytorch 版本为 1.9.0,Torchvision 安装 v0.10.0 版本

      1. 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 引脚

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

      在这里插入图片描述

      在这里插入图片描述


      使能 SPI

      • Configure Jetson 40pin Header 








        \Rightarrow


         Configure header pins manually 








        \Rightarrow


         按回车使能 SPI1 (pins 19,21,23,24,26) 








        \Rightarrow


         Back
        在这里插入图片描述可以看到,此时 main menu 中已经显示新的端口配置了,SPI 用到的 5 个端口都已被使能
        在这里插入图片描述
      • 最后保存配置并重启即可完成配置:Save Pin changes 








        \Rightarrow


         Save and reboot to reconfigure pins

      修改设备树使能端口

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


      资源下载 (Jetpack 4.6.2)

      • 如果之前用 SDK Manager 安装过系统镜像,可以直接在上面修改设备树。 如果没有的话,需要参考以下资源下载部分先进行操作
      • 在 ubuntu 电脑新建一个文件夹

      1. sudo mkdir sources_nano
        cd sources_nano

      • 下载以下两个资源包

      1. 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 工具

      1. sudo apt-get install -y device-tree-compiler

      • 反编译出 dts 文件

      1. 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 文件

      1. 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”
        在这里插入图片描述
      • 找到 spi1 的引脚设置,将其中的 nvidia,function 改为 spi1, nvidia,tristate 改为 0x0, nvidia,enable-input 改为 0x1. 如图, 五个引脚都要操作
        在这里插入图片描述
      • 保存文件,并重新编译为 dtb. 注意,如果你还需要修改 SD 卡等操作,请一起在设备树中进行修改

      1. 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 上

      1. cd ../../
        sudo ./flash.sh jetson-nano-emmc mmcblk0p1


      加载内核模块

      1. pip install spidev

        1. echo sudo modprobe spidev >> ~/.bashrc
          source ~/.bashrc


          测试 SPI

          • 加载 spidev

          1. 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 可以正常的发送和接受信息即可

          1. ./spidev_test -v -D /dev/spidev0.0 -p Test

          在这里插入图片描述

          Camera

          IMX219-83 Stereo Camera

          硬件连接

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

          测试摄像头

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

          1. ls /dev/video*

          测试 video 0

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

          测试 video 1

          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 包,因此需要自行编译源码

          1. 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
          

          1. 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

          更多资料

          References