Jetson Nano系统环境搭建及SD卡启动设置完整指南
Jetson Nano系统环境搭建及SD卡启动设置完整指南
Jetson Nano是NVIDIA推出的一款面向嵌入式和边缘计算应用的开发板,具有高性能和低功耗的特点,广泛应用于机器人、无人机、智能摄像头等领域。本文将详细介绍如何在Jetson Nano上搭建系统环境以及设置SD卡启动,帮助开发者快速入门并充分利用其强大功能。
1、eMMC系统搭建
部分Jetson Nano开发版出厂时已经在eMMC上搭建过系统,可跳过eMMC系统搭建的步骤。eMMC系统搭建需要用到Ubuntu 18.04系统的主机或虚拟机,使用SDK Manager工具进行烧录。若Ubuntu的虚拟机或主机不是18.04版本或方法一无效可以参考方法二进行系统环境的搭建。
方法一:使用SDK Manager工具搭建系统
下载SDK Manager烧录工具:
https://developer.download.nvidia.com/sdkmanager/redirects/sdkmanager-deb.html
此处需要拥有一个NVIDIA账号,登录后进行下载。下载完成后进入下载路径Downloads安装SDK Manager,终端输入:
sudo dpkg -i sdkmanager_1.6.1-8175_amd.deb #根据自己的版本输入
- 安装完成后系统可能报错找不到依赖文件,输入以下命令解决:
sudo apt --fix-broken install
打开Ubuntu电脑终端,运行SDK Manager。
点击LOGIN,登录NVIDIA账号,会在浏览器弹出链接,输入前面注册邮箱和密码登录进去后退出软件。
用跳帽或杜邦线短接FC REC和GND引脚,用USB线(一定要可以传输数据的USB线)连接Ubuntu主机或Ubuntu虚拟机所在的主机。
连接DC电源到圆形供电口使Jetson Nano进入recovery模式。
重新打开SDK Manager软件,使用虚拟机需要把设备设置为连接到虚拟机上。
若Jetson Nano被正常识别,SDK Manager会检测到并提示选项。
在JetPack选项中以4.6系统为例,取消勾选Host Machine,点击CONTINUE。
选择Jetson OS, 并将Jetson SDK Components的选项去掉。勾选协议,点击CONTINUE。
HW Imager保存的路径默认,选择Create,会自动创建路径。
从JetPack4.6.1版本开始,用SDK Manager烧系统的时候会弹出preconfig的窗口,按下图选择。(图中的 7. OME Configuration里的Pre-config选项是提前设置用户名和密码,Runtime是在Jetson Nano的开机配置过程中设置用户名和密码)
输入虚拟机密码,等待下载烧录完成。
烧录完成之后,去掉底板的跳帽,接入显示器,重新上电,按照提示进行开机配置(如果是设置的pre-config, 上电后直接进入系统)。
方法二:直接下载资源包
- unbuntu虚拟机或者主机打开终端,新建文件夹。
sudo mkdir sources_nano
cd sources_nano
- 将资源包移动到文件夹下,下载路径:
资源包1:
https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t210/jetson-210_linux_r32.7.2_aarch64.tbz2
资源包2:
https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t210/tegra_linux_sample-root-filesystem_r32.7.2_aarch64.tbz2
sudo mv ~/Downloads/Jetson-210_Linux_R32.7.2_aarch64.tbz2 ~/sources_nano/
sudo mv ~/Downloads/Tegra_Linux_Sample-Root-Filesystem-R32.7.2_aarch64.tbz2 ~/sources_nano/
- 解压资源包。
sudo tar -xjf Jetson-210_Linux_R32.7.2_aarch64.tbz2
cd Linux_for_Tegra/rootfs/
sudo tar -xjf ../../Tegra_Linux_Sample-Root-Filesystem_R32.7.2_aarch64.tbz2
cd ../
sudo ./apply_binaries.sh #若出现报错按提示操作,再重新输入该指令
步骤2和3在操作时尽量使用tab键自动补全指令
Jetson Nano进入recovery模式,连接Ubuntu电脑或虚拟机。
在终端使用命令行进行系统烧录的操作。
cd ~/sources_nano/Linux_for_Tegra
sudo ./flash.sh jetson-nano-emmc mmcblk0p1
- 烧录完成之后,去掉底板的跳帽,接入显示器,重新上电,按照提示进行开机配置。
2、SD卡启动(需要先修改设备树)
此处需要修改设备树,有两种方法分别为在Ubuntu电脑上修改和在Jetson Nano上修改。
在Ubuntu电脑上修改适用于使用资源包配置eMMC系统。
在Jetson Nano上修改适用于使用SDK Manager配置eMMC系统。
方法一:在Ubuntu电脑上修改设备树
- 安装dtc软件。
sudo apt-get install device-tree-compiler
- 反编译dts文件。
cd ~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra/kernel/dtb
dtc -I dtb -O dts -o tegra210-p3448-0002-p3449-0000-b00.dts tegra210-p3448-0002-p3449-0000-b00.dtb
此处需要确定自己的资源包位置
- 修改tegra210-p3448-0002-p3449-0000-b00.dts源文件,找到如下部分,修改红色位置。
sudo vim tegra210-p3448-0002-p3449-0000-b00.dts
sdhci@700b0400 {
compatible = "nvidia,tegra210-sdhci";
reg = <0x0 0x700b0400 0x0 0x200> ;
interrupts = <0x0 0x13 0x4> ;
aux-device-name = "sdhci-tegra.2";
iommus = <0x30 0x1b>;
nvidia,runtime-pm-type = <0x0>;
clocks = <0x26 0x45 0x26 0xf3 0x26 0x136 0x26 0xc1>;
clock-names = "sdmmc", "pll_p", "pll_c4_out2", "sdmmc_legacy_tm";
resets = <0x26 0x45>;
reset-names = "sdhci";
status = "okay";
tap-delay = <0x3>;
trim-delay = <0x3>;
mmc-ocr-mask = <0x3>;
max-clk-limit = <0xc28cb00>;
ddr-clk-limit = <0x2dc6c00>;
bus-width = <0x4>;
calib-3v3-offsets = <0x7d>;
calib-1v8-offsets = <0x7b7b>;
compad-vref-3v3 = <0x7>;
compad-vref-1v8 = <0x7>;
pll_source = "pll_p", "pll_c4_out2";
ignore-pm-notify;
cap-mmc-highspeed;
cap-sd-highspeed;
nvidia,en-io-trim-volt;
nvidia,en-periodic-calib;
cd-inverted;
wp-inverted;
pwrdet-support;
nvidia,min-tap-delay = <0x6a>;
nvidia,max-tap-delay = <0xb9>;
pinctrl-names = "sdmmc_schmitt_enable", "sdmmc_schmitt_disable", "sdmmc_clk_schmitt_enable", "sdmmc_clk_schmitt_disable", "sdmmc_drv_code", "sdmmc_default_drv_code", "sdmmc_e_33v_enable", "sdmmc_e_33v_disable";
pinctrl-0 = <0x8c>;
pinctrl-1 = <0x8d>
pinctrl-2 = <0x8e>;
pinctrl-3 = <0x8f>;
pinctrl-4 = <0x90>;
pinctrl-5 = <0x91>;
pinctrl-6 = <0x92>;
pinctrl-7 = <0x93>;
vqmmc-supply = <0x3b>;
vmmc-supply = <0x4c>;
cd-gpios = <0x5b 0xc2 0x0>;
sd-uhs-sdr104;
sd-uhs-sdr50;
sd-uhs-sdr25;
sd-uhs-sdr12;
mmc-ddr-1_8v;
no-sdio;
no-mmc;
uhs-mask = <0xc>;
linux,phandle = <0xba>;
phandle = <0xba>;
- 编译dtb文件。
dtc -I dts -O dtb -o tegra210-p3448-0002-p3449-0000-b00.dtb tegra210-p3448-0002-p3449-0000-b00.dts
- 烧录DTB分区,Jetson Nano进入recovery模式,连接到Ubuntu电脑。
cd ~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra
sudo ./flash.sh -k DTB jetson-nano-emmc mmcblk0p1
方法二:在Jetson Nano上修改设备树
- 反编译dts源文件。
cd /boot
sudo dtc -I dtb -O dts -o kernel_tegra210-p3448-0002-p3449-0000-b00-user-custom.dts kernel_tegra210-p3448-0002-p3449-0000-b00.dtb
修改kernel_tegra210-p3448-0002-p3449-0000-b00-user-custom.dts源文件,修改位置和方法一相同。
编译dtb文件。
sudo dtc -I dts -O dtb -o kernel_tegra210-p3448-0002-p3449-0000-b00-user-custom.dtb kernel_tegra210-p3448-0002-p3449-0000-b00-user-custom.dts
设置SD卡启动
在修改完设备树后启动Jetson Nano。
- 添加用户自定义dtb设置。
sudo vi /boot/extlinux/extlinux.conf
- 打开此文件后添加下面语句,位置如下图。
FDT /boot/kernel_tegra210-p3448-0002-p3449-0000-b00-user-custom.dtb
- 重新启动后可检查SD卡是否被识别。
sudo ls /dev/mmcblk*
如果有识别到mmcblk1p1设备,说明SD卡被识别。
- 查看SD卡挂载目录。
df -h
- 复制根文件系统到SD卡中(此SD卡需要提前格式化为ext4格式)。
sudo cp -ax / xxxx #xxxx为sd卡挂载目录
- 修改SD卡作为根文件系统设备。
sudo vi /boot/extlinux/extlinux.conf
找到语句APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0,将mmclk0p1 改成mmclk1p1, 保存并重启。
3、安装SDK
安装SDK以保证Jetson Nano的完整功能。
此工作可以在进行SD卡启动之前进行。
方法一:使用SDK Manager安装
在使用SDK Manager工具搭建系统时取消了Jetson SDK Components的选项为了确保系统搭建的成功,此时需要将Jetson Nano连接到Ubuntu电脑上使用SDK Manager工具安装Jetson SDK Components。
本次安装时勾选Jetson SDK Components选项,取消对Jetson OS选项的勾选。
方法二:使用指令在Jetson Nano中安装
正常启动Jetson Nano后在终端输入以下指令直接安装(设备需要联网)。
sudo apt update
sudo apt install nvidia-jetpack
如果预留的空间很小(4G以下),使用以下命令进行安装 。
sudo apt update
apt depends nvidia-jetpack | awk '{print $2}' | xargs -I {} sudo apt install -y {}
该流程源自于微雪电子官方提供,本文做简单梳理和总结。
刷机步骤:https://www.waveshare.net/wiki/JETSON-NANO-DEV-KIT
SD卡拓展步骤:https://note.youdao.com/noteshare?id=51828d95abfca4793121e0fd45d3411a