Contents
- Jetson Nano
- 在 EMMC 上安装镜像
- U 盘启动和 TF 卡启动
- U 盘启动 (复制 eMMC 上系统)
- TF 卡启动
- 设置远程登录系统
- SDK 安装
- 使用 SDK Manager 安装
- 使用指令安装
- Linux 操作基础
- 文件传输、系统备份
- 风扇配置
- IMX219-83 Stereo Camera
- AI 环境搭建
- PIP3 安装
- 安装机器学习领域重要的安装包
- 设置 CUDA 环境
- Tensorflow GPU 环境搭建
- Pytorch 环境搭建
- 硬件控制
- Jetson-IO - 端口使能
- 修改设备树使能端口
- 更多资料
- References
我是直接购买的微雪 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 卡启动,请查看使用手册修改启动路径即可
- 安装过程可参考 系统环境搭建 和 在 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>;
- 编译 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
, 将mmclk0p1
改成mmcblk1p1
, 保存,然后重启系统即可
扩容镜像
- 注意,如果 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 系统的用户名和密码即可
使用指令安装
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
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
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
最后添加
export OPENBLAS_CORETYPE=ARMV8
安装机器学习领域重要的安装包
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
使能 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
- 下载以下两个资源包
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”
- 找到 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
重新烧录系统
- 将 nano 设置为 recovery 烧录模式,接入 ubuntu 电脑。注意,这里不支持只更新 dtb 分区,因此需要重新烧录整个系统,烧录系统后需要重新做开机配置,因此,请提前将 HDMI 屏幕和键盘连接到 nano 上
cd ../../
sudo ./flash.sh jetson-nano-emmc mmcblk0p1
测试 SPI
- 加载 spidev
sudo modprobe 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"
更多资料
- 可参考 资料
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