• Jetson nano 系统安装


    我是直接购买的微雪 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 终端输入
    ls /dev/sd*
    
    • 1
    • 格式化 U 盘
    sudo mkfs.ext4 dev/sda
    
    • 1
    • 修改启动路径. 找到语句 APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0, 将 mmcblk0p1 修改为 sda 保存
    sudo vi /boot/extlinux/extlinux.conf
    
    • 1
    • 挂载 U 盘
    sudo mount /dev/sda /mnt
    
    • 1
    • 复制系统到 U 盘
    sudo cp -ax / /mnt
    
    • 1
    • 复制完成后卸载 U 盘(不是拔掉 U 盘)
    sudo umount /mnt/
    
    • 1
    • 重启系统
    sudo reboot
    
    • 1

    TF 卡启动

    设备树时能 SD 卡

    • 在 Ubuntu 主机安装 dtc 软件
    sudo apt-get install device-tree-compiler
    
    • 1
    • 进入 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 修改设备树
    sudo gedit tegra210-p3448-0002-p3449-0000-b00.dts
    
    • 1
    • 找到 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>;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    • 编译 dtb 文件
    sudo dtc -I dts -O dtb -o tegra210-p3448-0002-p3449-0000-b00.dtb tegra210-p3448-0002-p3449-0000-b00.dts
    
    • 1
    • 烧录系统,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 断开 USB 线和跳帽,进行 Jetson Nano 开机配置
    • 检查 SD 卡是否被识别. 如果有识别到 mmcblk1p1 设备,说明 SD 卡被正常识别了
    sudo ls /dev/mmcblk*
    
    • 1

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

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

    下载其他镜像


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

    sudo vi /boot/extlinux/extlinux.conf
    
    • 1
    • 找到语句 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
    
    • 1
    • 2
    • 3
    • 4

    设置远程登录系统

    • 先用网线确保 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
    
    • 1
    • 2

    Linux 操作基础

    文件传输、系统备份

    风扇配置

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    # 查看 pip3 版本
    pip3 -V
    
    • 1
    • 2
    • 为了防止出现 “Illegal instruction (core dumped)” 报错,需要在 ~/.bashrc 最后添加
    echo "export OPENBLAS_CORETYPE=ARMV8" >> ~/.bashrc
    
    • 1

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    设置 CUDA 环境

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

    • 设置环境变量
    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
    • 2
    • 3
    # 查看 CUDA 版本
    nvcc -V
    
    • 1
    • 2

    Tensorflow GPU 环境搭建

    Pytorch 环境搭建

    • 下载依赖库
    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 
    
    • 1
    • Torchvision 版本要与 Pytorch 版本相匹配,我们前面安装的 Pytorch 版本为 1.9.0,Torchvision 安装 v0.10.0 版本
    pip3 install torchvision==0.10.0
    
    • 1

    硬件控制

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

    在这里插入图片描述

    在这里插入图片描述


    使能 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 电脑新建一个文件夹
    sudo mkdir sources_nano
    cd  sources_nano
    
    • 1
    • 2
    • 下载以下两个资源包
    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
    
    • 1
    • 2
    • 解压资源
    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  # 若出现报错按照系统提示操作,然后再次输入该行命令
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改设备树

    • 安装 dtc 工具
    sudo apt-get install -y device-tree-compiler
    
    • 1
    • 反编译出 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
    
    • 1
    • 2
    • 修改 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
    
    • 1
    • 2
    • 找到 spi@7000d400{} 部分,在其中的 spi@0 结构和 spi@1 结构分别添加语句 status = “okay”
      在这里插入图片描述
    • 找到 spi1 的引脚设置,将其中的 nvidia,function 改为 spi1, nvidia,tristate 改为 0x0, nvidia,enable-input 改为 0x1. 如图, 五个引脚都要操作
      在这里插入图片描述
    • 保存文件,并重新编译为 dtb. 注意,如果你还需要修改 SD 卡等操作,请一起在设备树中进行修改
    sudo dtc -I dts -O dtb -o tegra210-p3448-0002-p3449-0000-b00.dtb tegra210-p3448-0002-p3449-0000-b00.dts
    
    • 1

    重新烧录系统

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

    加载内核模块

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

    测试 SPI

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

    在这里插入图片描述

    Camera

    IMX219-83 Stereo Camera

    硬件连接

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

    测试摄像头

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

    测试 video 0

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

    测试 video 1

    DISPLAY=:0.0 nvgstcapture-1.0 --sensor-id=1
    
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Intel RealSense D435i (深度相机)

    安装 SDK 和 pyrealsense2

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

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Python codes

    更多资料

    References

  • 相关阅读:
    7.elasticsearch字段类型列表
    redroid11 集成 nvidia gpu hals
    Redis-Cluster集群、Redis持久化、Redis作MySQL的缓存服务器、配置gearman实现Redis和MySQL数据同步
    剑指 Offer 16. 数值的整数次方
    文献 | 关于心理活动符号学,你知道多少?
    C语言中,可变参数函数调用的过程?!
    Vue3.0 vue.js.devtools无法显示Pinia调试工具
    SpringBoot实践(二十六):Security实现Vue-Element-Admin登录拦截
    CE修改植物大战僵尸-关卡基址(小宇特详解)
    【前端缓存】localStorage是同步还是异步的?为什么?
  • 原文地址:https://blog.csdn.net/weixin_42437114/article/details/127712997