如果是刚刚开始Nvidia jeston TX1/TX2 开发的初学者,希望本文可以帮助节省时间。首先上张图,完成配置后的 jeston TX1。载板使用的是作者自己设计的EdgeBox_EHub_tx1_tx2_E100。
先说一下jeston TX1,jeston TX1是英伟达推出的一款基于ARM架构的嵌入式设备,集成了自家的GPU,算力能达到1 Teraflops,基本能够满足深度学习的要求。用在智能车、无人机上是非常理想的。但是!
我也不知道官方怎么想的,可能就是想省钱吧。初始的eMMC大小只有16GB,可用的容量只有14GB左右,再加上如果装了点CUDA什么的基本上所剩无几了,而且板载的内存只有4GB,根本不够用好嘛!编译程序分分钟卡死,我搞了好久才明白为什么会这样。如果你想用裸机去跑深度学习,那抱歉了,你可能连Tensorflow都装不上去。
OK,为了解决上述问题,我找了好多帖子,总算整合了一套比较合理的解决方案。并且在EdgeBox_EHub_tx1_tx2_E100完整的进行了实践。
Nvidia jeston TX1/TX2 都支持 SD卡和SSD存储扩展存储,到现在最新的NX套件上,就直接全部都更新成使用NVME的存储。基本上套件上的存储也就是让你装个基本系统,做一些简单测试使用了。
由于是学习为目的,所以我们本篇主要说明迁移到SD卡上,虽然后面系统跑起来会有一点卡,但是其实大部分时候你是感觉不出来的,jeston nano 直接就全部都是SD空间,大部分人用的也都没有问题。所以具体问题具体分析,根据你实际的需要,考虑是不是增加固态(SSD)来扩展存储。
存储扩展迁移的方法和步骤都是一样的,差异无非就是硬件接口和操作命令有点差异,这里我们主要介绍SD卡。
目录
一、硬件环境准备说明
所有硬件链接号上电后:
链接硬件:接通12V电源,插入SD卡,鼠标键盘接入SUB,显示器接入HDMI,下载线接入Micro usb2.0 ,笔记本一台,需要安装虚拟机
二、烧写系统至eMMC
给TX1刷机,这里比较简单,网上很多blog都讲了,后面我也会补充一个。使用你建立的虚拟机,安装ubuntu16.04或者ubuntu18.04系统后,安装 Nvidia sdkmanage.我安装的版本是sdkmanager_1.5.0-7774_amd64.deb,这个官网可以下载到。安装后联网就可以升级到最新的版本。这点Nvidia一直做的不错。
由于我们是自己的载板,所以需要修改个替换DTB文件,官方下载烧写标准系统后,虚拟机内会出生成一个文件夹。
虚拟机命令行查看是否链接
nvidia@ubuntu:~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_TX1_A100_hub/Linux_for_Tegra$ lsusb
Bus 003 Device 085: ID 0955:7020 NVidia Corp.
我们替换后,控制系统进入烧写模式后, 采用了手动命令烧写系统。
sudo ./flash.sh -r -d kernel/dtb/tegra210-jetson-tx1-p2597-2180-a01-devkit.dtb -K kernel/Image jetson-tx1 mmcblk0p1
其中 mmcblk0p1即是eMMC的挂载位置。
等待15分钟左右后烧写完毕
烧写完毕后系统会自动重启。设置用户名秘密之类结束后,就可以看到登录界面显示了。
登录查看存储。
可以看到,此时root是在14G的emmc内,同时也看到系统已经加载了SD卡,下面我们就将系统迁移到SD卡上,也就是root会至少有59G空间。
三、迁移系统至SD卡
首先:格式化SD卡,至EXT4格式
其次拷贝EMMC系统之SD卡中
重新分区后指定了盘符,所以个系统自动加载的有点区别,性质一样。
##进入SD卡
cd /media/nvidia/sd64/
##拷贝EMMC全部内容至SD卡
sudo cp -ax / ./
等待一段时间,等待拷贝结束
等待拷贝结束,开始修改SD卡系统中的启动文件,等待过程一般10分钟左右吧
修改SD卡内的系统引导文件:
cd /media/nvidia/sd64/boot/extlinux
#备份一下原始的启动引导文件
sudo cp extlinux.conf extlinux.conf_bak
#修改启动引导文件
sudo vim extlinux.conf
原始文件:
修改为:
TIMEOUT 30
DEFAULT sdcard
MENU TITLE L4T boot options
LABEL sdcard
MENU LABEL primary sd card
LINUX /boot/Image
INITRD /boot/initrd
APPEND ${cbootargs} quiet root=/dev/mmcblk2p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 sdhci_tegra.en_boot_part_access=1
LABEL emmc
MENU LABEL internal eMMC
LINUX /boot/Image
INITRD /boot/initrd
APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 sdhci_tegra.en_boot_part_access=1
其中根目录盘符是上面查看后获得的
保存退出后,我们就获得了一个SD卡系统。
四、烧写到SD卡系统启动
首先这一步有时候不是必须的,但是我自己的经历,不执行这一步,有时候上电重启后,系统会启动到EMMC,所以为了保险期间,还是执行,这一步主要是固化告诉模块,从SD卡启动系统。
如果你已经有一个SD卡的系统,或者按照前面的自己已经制作好了一个SD卡系统,参考这步进行烧写。即使SD卡系统和EMMC系统不一致都没有关系,只要SD卡系统是对应板卡的系统,不管里面后续装过任何支持包,都不会有影响。
烧写到SD卡
# 进入虚拟机烧写目录
cd /home/nvidia/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_TX1_A100_hub/Linux_for_Tegra
# 注意 mmcblk2p1 在你自己的系统上有时候会有变化,上面的启动文件修改也需要做修改一致
sudo ./flash.sh -r -d kernel/dtb/tegra210-jetson-tx1-p2597-2180-a01-devkit.dtb -K kernel/Image jetson-tx1 mmcblk2p1
mmcblk2p1 需要在上面拷贝系统的时候做好记录,有些系统这个盘符会有点变化,请注意做对应修改。以上烧写命令不会破坏SD卡系统的文件内容
五、验证系统是否从SD卡启动
烧写完毕后,等待系统重启,登录终端
显示系统盘已经扩大到了59G,SD卡的大小,所以系统已经从SD卡启动。