7月8日更新:添加了硬件部分的视频链接:b站BV11w411R77n
空间不足?给Jetson Nano更换emmc硬盘(扩容)_哔哩哔哩_bilibili
【声明】我还只是个Linux小白,写的东西并不一定对,仅提供一种参考思路,请各路大神莫喷,有想法可以相互交流。
【邮箱】188283942@qq.com
1 前言
在使用Jetson Nano的过程中,遇到了16GB板载存储空间不足的情况,于是我选择了更换板载emmc闪存,方法参见我上一篇文章:
具体的步骤这里就不在详述,上一篇文章已经写了,大家可以回顾一下上一篇文章。这里主要探讨那些“为什么要这么做”、“为什么改这里就行”的问题。
这篇文章写的可能比较乱,因为好多问题我暂时也没搞清楚,都是随性地写。如果你也遇到了类似的问题,不妨仔细读一下,也许对你有一定的参考意义。
2 问题的探讨
2.1 内容回顾
上一篇文章已经提到,要更换emmc,就需要修改BSP(board support package)支持包中的一些配置文件,这些配置文件会被拷贝到Linux_for_Tegra(可以理解为刷机工具)目录下,在运行刷机工具(即flash.sh)时,会根据这些配置文件生成nano的分区表,然后才将系统镜像刷入。
这里需要探讨的就是:如果从硬件上更换emmc,而刷机时不修改相应分区表配置,会出现什么问题?为什么要这样(按上一篇文章的方法)修改配置文件?
2.2 不修改配置文件直接刷机,会遇到的问题
一开始,我将emmc更换后,抱着侥幸心理直接刷的机(没有修改配置文件,觉得它能够自动适应不同size的emmc),结果就是无法进入系统,具体就是:
A start job is running for end-user configuration after initial OEM installation
一直没能进入系统,百度了下,有说是swap的问题,也有说是硬盘的uuid和fstab(分区表)中的uuid不一致造成的。
因此我就怀疑是分区表的问题,如果不修改分区表相应配置,就不能适应新更换的emmc闪存。后续解决问题的步骤其实都是围绕着分区表来进行的。
2.3 尝试从系统镜像入手,修改分区配置
通过刷机过程(包括初次刷机、镜像恢复)可以了解到,刷机环境准备好后,会在Linux_for_Tegra/bootloader目录下生成system.img(我这里是4.8G),刷机应该就是将这个镜像刷写到emmc中(或者sd卡、nvme硬盘)。其实就有点类似树莓派给sd卡烧写系统一样。
生成的img镜像应该是包含了分区信息的,但是我弄的时候遇到些错误,我就没接着弄下去,如果你有兴趣的话可以试试这种方法(直接通过img修改各分区的大小)。
2.4 修改分区表相关配置参数
我没有直接对system.img文件下手,而是直接通过修改生成分区表所依赖的配置文件,来修改所生成的分区表(有一点点绕哈)。
在官方的手册《NVIDIA Jetson Linux Developer Guide》-> Bootloader -> Partition Configureation 章节中,详细叙述了nano刷机过程中有关分区表的相关事项,包括分区表的生成方式,分区表相关配置文件的解析(释义)等内容。
该章节中有一段话说明了分区表是如何生成的:
During the flashing procedure, flash.sh reads in the partition configuration file, translates keywords into values specified in <device>.