给Jetson Nano更换eMMC闪存(扩容)

2023-05-16

7月4日更新:添加了有关问题的解释与探讨(文末,下一篇文章)

7月5日更新:添加了效果图(文末)

7月8日更新:添加了视频  b站:BV11w411R77n

空间不足?给Jetson Nano更换emmc硬盘(扩容)_哔哩哔哩_bilibili


【声明】我还只是个Linux小白,写的东西并不一定对,仅提供一种参考思路,请各路大神莫喷,有啥想法可以相互交流。

【邮箱】188283942@qq.com

1  前言

1.1 遇到的问题   

        最近TX2缺货,于是试着用nano去跑一些轻量化的工程。但是nano的emmc只有16G,把ROS装上之后基本上就没法装CUDA了(之前试过,装到一半没空间了,导致开不了机,只能进tty去删东西)。

1.2 解决思路

        于是考虑给nano扩容,有三种思路:

 1. 插SD卡

        可以把系统刷到SD卡上,这样换系统、换环境啥的也方便,但是速度会慢点。我测试过,拷同一个rosbag,拷到板载emmc上有90m/s,拷到SD卡上只有30m/s左右(SD卡是闪迪Extreme PRO 64G UHS-3 V30 A2,声称有170读90写的速度,还是不错的,应该不是瓶颈)。

        上网搜了下,可能是SD卡那块的接口就没有那么高的带宽?

2. 插nvme硬盘

       官方的套件似乎是可以的,也有相关的教程。

       我用的不是官方的套件,而是realtimes的RTSO-6001b载板+nano核心模块(因为要上无人机的,所以就不用官方那个套件了),板载有minipcie接口,卖家说这个载板不支持minipcie转m2再接nvme硬盘,所以放弃。

3. 改eMMC闪存

        我感觉,只要硬件上保持兼容(接口、协议、封装等),应该就能用,因为emmc不像SSD、U盘上的nand flash颗粒,他是nand flash + 主控,所以不用考虑主控和固件的问题,接口对了拿过来用就OK。

        我这个nano核心板上的emmc是闪迪 SDINBDG4-16G,BGA153封装,查了下手册,这个是iNAND 7250系列emmc5.1闪存,MLC颗粒,有8-64GB的型号。那么最简单的方案,直接换成SDINBDG4-64G就OK了。 

        我选用的就是这种方案,并且有了初步的验证。这种方案需要有一定的PCB焊接功底(起码遇见DFN、VQFN封装能轻松应对吧),也需要一些工具,包括锡膏(中温,推荐183度,但需要冷藏保存)、BGA153钢网、锡膏刮板、热风枪、焊台(烙铁)、吸焊带、镊子、助焊剂、聚酰亚胺耐热胶带、洗板水。如果你不具备这样的手艺和工具,可以先把emmc和钢网买回来,再去找个修手机的帮你换上去。

        我猜很多人都不想看思路和过程,所以我先把方法步骤放前面,思路啥的放后面。回头如果方便的话录个视频发b站上。下面直接开始讲步骤。

2  更换emmc

        这里重复一遍,需要准备的材料:手、眼睛、183度中温锡膏(我用的维修佬)、emmc闪存、BGA153钢网(和emmc一起买了)、锡膏刮板(随便一块硬点的卡片就行)、热风枪、烙铁、吸焊带(吸锡带)、镊子、助焊剂、聚酰亚胺耐热胶带、洗板水。

        7月8日更新:视频: 空间不足?给Jetson Nano更换emmc硬盘(扩容)_哔哩哔哩_bilibili

        图我就不放了,因为做的过程中忘记拍了,后面有机会再补图,直接说步骤吧。

        1)清理emmc焊点:烙铁320度左右,先给emmc的焊点上刷点助焊剂,然后用烙铁和吸锡带将原本的锡去除(如果上面的是高温锡,就不好焊了,如果本来就是中温锡可以省略这一步),清理干净后焊点应该会呈现黄铜色。

        2)emmc植锡:将BGA153钢网对准emmc的焊盘,再将emmc和钢网固定好(不会移位,我这里用的是聚酰亚胺耐热胶带),然后将解冻好的锡膏刷在钢网对应的孔位里,保证每一个孔都是均匀饱满有锡的,然后风枪210度左右,先给钢网均匀预热一下,再对着孔位吹,直到将每一个孔的锡吹化即可,等待其冷却后将emmc轻轻取下。(这一步不会的话,去找教程吧,不难)

        3)拆卸nano核心板上的emmc闪存:首先固定好核心板,给emmc周围适当的贴上聚酰亚胺耐热胶带,然后给emmc芯片周围上点助焊剂,风枪280度左右,适当距离吹个一分钟(自己把握),等到芯片轻轻推动可以自动归位时,用镊子取下,注意不要弄掉周围的电阻电容。

        4)清理核心板上的emmc焊盘:同第(1)步,清理干净锡,然后在中间上一点助焊剂。

        5)将植好锡的emmc焊到nano核心板上:将植好锡的emmc放到焊盘上对准,风枪220度吹,当轻轻推动芯片,它能够自动归位时,就焊好了。

        6)清理板子:撕掉胶带,用洗板水和棉签将板子上的助焊剂清理干净。

        如果不太放心的话,可以用万用表量一下emmc供电对地的阻值,别短路了。通常可以在emmc供电的滤波电容上测量。

3  刷机

3.1 我的刷机步骤

        这里需要先说一下我这个载板的刷机步骤,用官方套件的朋友可以参考下(后面的内容需要以这部分内容为基础)。

        首先准备三个包,首先将这三个包放到同一个文件夹下(不要有中文路径):

        Tegra210_Linux_R32.4.3_aarch64.tbz2

        Tegra_Linux_Sample-Root-Filesystem_R32.4.3_aarch64.tbz2

        Realtimes_L4T_3243_nano_v1.5.tar.gz

       下面开始配置:

        1)Linux Driver Package

        sudo tar -vxf Tegra210_Linux_R32.4.3_aarch64.tbz2

        解压这个包,得到Linux_for_Tegra这个文件夹

        2)设置根文件系统

        cd Linux_for_Tegra/rootfs

        sudo tar -jxpf ../../Tegra_Linux_Sample-Root-Filesystem_R32.4.3_aarch64.tbz2

        解压后会在rootfs文件夹下生成nano的根文件系统。

        3)安装BSP(Board Support Package)支持包

        sudo tar -xvf Realtimes_L4T_3243_nano_v1.5.tar.gz

        cd Realtimes_L4T_3243_nano

        sudo ./install.sh

        cd ../Linux_for_Tegra/

        sudo ./apply_binaries.sh      

        解压得到的Realtimes_L4T_3243_nano必须和Linux Driver Package处于同一目录。进入该目录运行install.sh,可将BSP的相关配置内容写入到Linux Driver Package中(具体可以去看看这个脚本)。【这里的BSP配置文件,包含了nano的fstab(filesystem table,即分区表)相关配置,这一点非常重要,后面需要修改emmc的分区表配置】

        4)刷机

        先让nano进入recovery模式,通过microusb线和PC(ubuntu)相连,进入Linux_for_Tegra目录,执行(我的载板是RTSO-6001b):

        sudo ./flash.sh rtso6001-b mmcblk0p1

        烧录完成后会提示Success。

        如果是英伟达官方的套件,刷机步骤应该和上面大同小异,总结来说就是三步:1)解压得到Linux_for_Tegra(可以把它理解成一个刷机工具吧);2)设置根文件系统,其实就是解压和拷贝文件;3)安装BSP支持包,这是很重要的一步,应该也是不同硬件有所区别的步骤。

3.2 修改BSP支持包中的配置并刷机

        为了适应新的emmc(我这里是16G换64G),就需要改BSP支持包里头的配置文件。由于我这里用的是RTSO-6001b载板,所以在商家提供的BSP支持包内,需要修改对应6001b载板的配置文件。否则,刷进去应该进不了系统(我试过直接按原步骤刷机,结果就是进不了系统)。至于为什么要这么改(也就是我的摸索过程),就放最后面了。

        下面直接说我的做法。

millium@millium-pc:~/jetson_nano/Realtimes_L4T_3243_nano$ ls
install.sh  l4t-nano-3243.tar  readme.txt

        回顾一下上面安装BSP支持包的步骤,其中运行了install.sh这个脚本,这个脚本主要的工作就是解压BSP支持包(l4t-nano-3243.tar,含有一些.conf配置文件和.common文件),并将其复制到Linux_for_Tegra下。所以需要先将这里头的配置文件修改好,才去运行install.sh。

        因为关于RTSO-6001b这个载板的配置文件有好几个,我还没搞清楚它要用哪一个,所以我索性都改了,其中一个.conf配置文件主要内容如下(其实基本上都一样的):

EMMC_CFG=flash_l4t_t210_emmc_p3448.xml;
BLBlockSize=1048576;
source "${LDK_DIR}/rtso6001-b.conf.common";
T21BINARGS="--bins \"EBT cboot.bin; "

ROOTFSSIZE=14GiB;
VERFILENAME="emmc_bootblob_ver.txt";

        需要修改的内容为ROOTFSSIZE

ROOTFSSIZE=55GiB;

        也就是说对于64GB(64*1000*1000*1000 Byte)的emmc闪存,我将55GB(55*1024*1024*1024 Byte)空间划分给根分区。至于为什么是55GB,其实是实验得到的值,初步猜测是nano的分区表除了根文件系统以外,还需要配置一些别的分区,所以不能设置太大。

        (关于磁盘空间容量单位,这里.conf、.commom、shell脚本里头应该都是1024进制,emmc按1000进制,系统内好像也是1000进制)

        对于上面对应的.commom文件(这里指的是rtso6001-b.conf.common),里面同样需要修改一个值:

ROOTFSSIZE=14GiB;

        同样修改为:

ROOTFSSIZE=55GiB;

        修改完成后,再运行install.sh将配置文件写到Linux_for_Tegra目录下,再进行后续的刷机工作。这样一来,在刷机过程中生成的分区表就会按照这里的配置进行(根分区55GB,实际得到的是57.9GB,还没搞清楚是为什么)。

        总结一下就是:换emmc,就要修改BSP支持包中的配置文件(.conf和.commom)。

        如果你是用的是官方的套件,思路其实也是一样的,可以参考这种方法,因为官方的开发手册里面有提到:flash.sh(上面的第(4)步刷机有提到)读取分区配置文件,将<device>.conf中的关键字的值读取出来(比如这里的ROOTFSSIZE),然后再生成分区表。

        此方法应该也适用于TX2、Xavier NX的emmc更换。

4  一些问题的具体解释

        上面的方法中,有好多地方没有给出具体的解释(为什么要这么做),所以我觉得可以把这部分内容写一下(其实就是我自己摸索的过程),分享本小白的学习过程,没整明白的地方也可以和大家探讨学习。

        嗯,字有点多,今天先到这吧,后面再补一补这块内容。

        7月4日更新,详细点的讨论内容可以看我这篇文章:

        给Jetson Nano更换eMMC闪存【下篇 - 一些问题的解释和探讨】

5  效果图

        有图有真相。

        更换后的效果(原emmc根分区14.7G,更换后57.9G,应该是1000进制?) 

         载板和nano(nano在底下插着)

        更换前(右16G)和更换后(左64G)的emmc。其实这里搞了个乌龙,64GB的emmc本来应该买SDINBDG4-64G的,我买错成SDINBDA4-64G了。虽然用起来也ok,但是速度会慢一些,因为前者是MLC颗粒,后者是TLC颗粒。当然,现在tb上买到的好多都是拆机片,对于嵌入式计算机来说,其实应该问题不大,如果你想买全新的片子,可以去立创商城买,只是会比较贵,还不一定有现货。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

给Jetson Nano更换eMMC闪存(扩容) 的相关文章

随机推荐

  • 年度回忆录(?——2011.01)

    这是在CSDN 上的第一篇总结 xff08 或者说是回忆录 xff09 xff0c 个人认为 xff1a 总结 xff0c 尤其是年度总结是十分必要的 她可以很好的映射出自己以往的不足 xff0c 并为自己下一步的学习指明方向 以前在网易上
  • 使用JMF实现java写自己的视频播放器

    JMF这个多媒体开发框架太牛了 xff0c 简单的几句代码就能实现一个视频播放器的开发 xff0c 厉害 xff0c 就是支持的格式少了一些 xff0c 没关系 xff0c 这个视频播放器可以播放mpg xff0c avi fvl等等 xf
  • 相机标定:关键点法 vs 直接法

    相机标定中最常见的方法是关键点法 xff0c 比如 OpenCV 和 MatLab 中使用棋盘格 圆阵列等二维图案进行标定 xff0c 这上面的棋盘格角点和圆心就是所谓的关键点 虽然关键点法有很多优点 xff0c 但在某些情况下容易遇到标定
  • 8本推荐游戏开发书籍

    很多刚刚接触游戏开发的朋友经常问我 xff1a 如何开始学习游戏开发 xff1f 我从事游戏开发行业很多年了 xff0c 坦率地讲 xff0c 开发游戏充满挑战性 xff0c 需要开发人员具备大量的技能与积极的创新精神 希望这篇小文能帮助朋
  • Maxwell启动停止脚本

    Maxwell启动停止脚本 进入 maxwell bin nbsp 直接运行下面的内容 生成脚本 bin bash description maxwell File maxwell Description Starts and stops
  • Epoll 的time_out参数引发的cpu占用问题

    转自 xff1a https www cnblogs com Jimmy104 p 5258205 html 针对自己写的一个服务器网络引擎Engine 文章后面附上源码 使用epoll 刚刚开始时候发现占用CPU 特别高 xff0c 但是
  • 【周志华机器学习】集成学习

    第八章 集成学习 个体与集成BoostingBagging 与随机森林Bagging随机森林 结合策略平均法投票法学习法 多样性 个体与集成 集成学习通过构建并结合多个学习器来完成学习任务 xff0c 也被称为多分类器系统 集成学习的一般结
  • 用户句柄表的遍历

    私有句柄表 HANDLE TABLE ENTRY的Object直接指向 OBJECT HEADER不用减 span class token macro property span class token directive hash spa
  • 树莓派安装后--安装必要软件(个人版)

    树莓派安装后 安装必要软件 xff08 个人版 xff09 查看是哪个版本 lsb release a 查看raspbian是哪个版本 getconf LONG BIT 查看系统位数 uname a kernel 版本 opt vc bin
  • 固定翼姿态控制流程

    固定翼控制流程 主文件夹 子文件 fw att control位于src moudle文件夹下 fw att control main c 主文件 fw att control params c 主文件参数 CMakeList attitu
  • 固定翼位置控制_Tecs

    Tecs在位置控制中主要控制纵向的高度 xff0c 因为升降舵可以控制飞机的高度 xff0c 油门可以控制飞机的速度 xff0c 但是单单通过升降舵改变高度会使速度下降或者上升 xff0c 单单通过油门改变速度会使高度改变 xff0c 所以
  • 固定翼位置控制_L1

    L1算法控制航向 飞机从现在位置到设定位置 xff0c 需要进行转弯 转弯需要一个横向的加速度来改变速度的方向 这里横向加速度的计算公式 a 61 V2R 又因为R 61 2 sin L1 可得 a 61 2 V2L1 sin L1是现在位
  • 存储过程懂不懂

    存储过程的官方定义是这么说的 xff1a 存储过程 xff08 Stored Procedure xff09 是一组为了完成特定功能的 SQL 语句集 xff0c 经编译后存储在数据库中 用户通过指定存储过程的名字并给出参数 xff08 如
  • PX4多旋翼位置控制

    多悬翼的位置控制由内外环控制 xff0c 外环P控制作用于位置差 xff0c 产生期望速度 xff0c 内环PID作用于速度差 xff0c 产生期望油门 xff0c 然后将油门解算成期望姿态 外环位置控制的三种控制源 1 Manual 手动
  • PX4混控器定义

    PX4混控 把输入指令 分配给电机以及舵机的执行器 信号传递 Actuators id 61 ORB ID actuator controls 0 0号控制组 Orb publish actuators id actuators 0 pub
  • Linux--Ubuntu18.04交叉编译链;多窗口终端;彻底删除不用的虚拟机镜像

    文章目录 建立共享文件夹交叉编译查看是否安装了交叉编译工具安装交叉编译工具链退出root模式 多窗口终端 Terminator彻底删除不用的虚拟机镜像 建立共享文件夹 实现windows系统与虚拟机中的ubuntu之间的文件共享 PC机新建
  • 准确率,召回率,mAP(mean average precision)解释

    准确率Precision 召回率Recall 其实这个翻译相当蛋疼 recall最合理的翻译应该是 查全率 而Precision的最合理的翻译应该是查准率 这样就很容易理解了 xff0c 假设一个班级有10个学生 xff0c 5男5女 你用
  • Android 开发使用 Java 8 中Lambda 表达式功能

    简介 Android开发支持所有 Java 7 语言功能 xff0c 以及一部分 Java 8 语言功能 xff08 具体因平台版本而异 xff09 注意 xff1a 在开发应用时 xff0c 可以选择使用 Java 8 语言功能 您可以将
  • 浅谈 for循环

    浅谈for循环 xff0c for循环习题讲解 文章多看几遍吧 相信你一定会收获不少哇 什么是循环 xff1f 我认为循环就是把一个步骤一直重复执行的操作 如果没有终止条件 xff0c 那么这一步骤就会一直执行下去 xff0c 直到地老天昏
  • 给Jetson Nano更换eMMC闪存(扩容)

    7月4日更新 xff1a 添加了有关问题的解释与探讨 xff08 文末 xff0c 下一篇文章 xff09 7月5日更新 xff1a 添加了效果图 xff08 文末 xff09 7月8日更新 xff1a 添加了视频 b站 xff1a BV1