以网络形式启动Linux系统后,通过挂载(mount)的方式,将eMMC存储器中旧的根文件系统所在逻辑2分区格式化,并解压新的根文件系统到逻辑2分区
阅读本文所需要的基础知识
eMMC存储器详解(存储区域结构、EXT_CSD[179]、各分区介绍、主要引脚、命令格式与类型、u-boot对eMMC的管理等)
https://blog.csdn.net/wenhao_ir/article/details/145967306
关于eMMC存储器在各种情况下的分区编号和名字的问题
https://blog.csdn.net/wenhao_ir/article/details/146088727
以网络形式启动Linux系统
按博文 https://blog.csdn.net/wenhao_ir/article/details/145822475 中记录的方法连接好网线、路由器,设置好u-boot的环境变量,设置好Ubuntu系统的TFTP服务、根文件挂载目录,然后以网络形式启动Linux系统。
具体方法请在博文 https://blog.csdn.net/wenhao_ir/article/details/145822475 中搜索关键词“【启动系统】设置好u-boot的相关环境变量”。
启动之后的截图如下:
查看下eMMC的分区情况
具体的查看方法和相关知识见博文 https://blog.csdn.net/wenhao_ir/article/details/146088727 【搜索“在Linux中的分区名字和编号问题”】
请在查看下面的内容前务必看一看上面这篇博文中的相关内容。
在这里,我运行命令 cat /proc/partitions
的结果如下:
cat /proc/partitions
命令fdisk -l /dev/mmcblk*
的运行结果如下:
fdisk -l /dev/mmcblk*
从中可以看到eMMC各分区的设备节点的详细信息。从中我们可以看出,eMMC的User Area
区的设备文件名为mmcblk1
,其中的1代表着eMMC存储器在SD/MMC 总线上的 SD/MMC 控制器的编号为1。
User Area
区被划分为了三个逻辑分区,分别为mmcblk1p1、mmcblk1p2、mmcblk1p3。
由于逻辑分区mmcblk1p2的大小为1GB,并且类型为Linux类型(即文件系统为ext4类型),所以我们就把我们的根文件系统放在这里面,由于文件系统放在这里面,自然内核镜像和设备树也放在这里面了呗,因为内核镜像和设备树文件都放于文件系统的目录/boot
中嘛。
所以接下来我们要把mmcblk1p2
挂载到我们已经启动的Linux内核上
查看逻辑分区mmcblk1p2的文件系统类型
可以用下面的命令查看查看逻辑分区mmcblk1p2的文件系统类型
blkid /dev/mmcblk1p2
运行结果如下:
可见,逻辑分区mmcblk1p2的文件系统类型是“ext4”类型。
逻辑分区mmcblk1p2挂载到我们已经启动的Linux内核上
首先在根目录下创建挂载目录mnt_p2
:
cd /
mkdir mnt_p2
如果按上面一个目录确认了逻辑分区mmcblk1p2的文件系统类型是“ext4”类型,则可以用下面的命令进行挂载:
mount -t ext4 /dev/mmcblk1p2 /mnt_p2
上面的运行结果显示挂载成功了,我们查看下里面有没有内容:
cd /mnt_p2
ls
可见,里面是某个版本的根文件系统的,为了写进我们的新的根文件系统,我们可以先对逻辑分区mmcblk1p2进行格式化操作。
对逻辑分区mmcblk1p2进行格式化操作
在格式化操作前,先把上面的挂载取消,运行下面的命令取消挂载:
先回到根目录,即退出挂载目录:
cd /
然后执行下面的命令解除挂载:
umount /mnt_p2
用下面的命令确认mmcblk1p2已无任何挂载操作:
mount | grep mmcblk1p2
运行结果如下:
可见它还挂载在目录/run/media/mmcblk1p2
下,所以我们还需执行下面的命令解除它与目录/run/media/mmcblk1p2
的挂载操作:
umount /dev/mmcblk1p2
然后再次查看mmcblk1p2还有没有别的挂载目录:
这下彻底没有了。
确认已经完全解除挂载后,接着执行下面的命令对逻辑分区mmcblk1p2进行格式化操作:
mkfs.ext4 /dev/mmcblk1p2
上面的命令结果表明格式化成功。
我们再次将/run/media/mmcblk1p2
挂载到目录/mnt_p2
,看下里面还有没有内容:
mount -t ext4 /dev/mmcblk1p2 /mnt_p2
cd /mnt_p2
ls
从运行结果来看,啥都没有了~
压缩文件放到网络启动的根文件系统的目录中
准备放于eMMC的User Area
区的第2逻辑分区的根文件系统的压缩包文件的百度网盘下载载地址:
https://pan.baidu.com/s/1NUnuC9dzBFS9oOC0EhjarQ?pwd=qcyz
现在我们把这个压缩文件放到网络启动的根文件系统的目录中。
解压压缩文件到逻辑分区mmcblk1p2
然后运行下面的命令解压到挂载目录/mnt_p2
中,这样就相当于把新的根文件系统放到了MMC的User Area
区的第2逻辑分区中。
tar -xjf /home/new_rootfs/imx-image-full-imx6ull14x14evk-20201209093926.rootfs.tar.bz2 -C /mnt_p2
由于这个压缩文件比较大(195.73MB),并且压缩率比较高,所以执行完后成,请耐心等待解压完成…
开始时间:2025-03-09 12:22:07…
结束时间:不知道具体的时间,但是当我外出吃完饭回到电脑前的时候(2025-03-09 13:22:25)已经完成了。
解压完成后的截图如下:
解压完成后我们查看下逻辑分区mmcblk1p2的挂载目录/mnt_p2
中有没有相应的文件了。
cd /mnt_p2
ls
从结果来看,有了…
接下来,可以利用以网络形式启动的Linux系统把内核镜像zImage和设备树文件imx6ull-14x14-evk.dtb
复制到目录/mnt_p2/boot
中,然后设备好u-boot的相关环境变量就可以利用存储在eMMC中的u-boot、根文件系、内核、设备完整启动整个Linux系统了,详情见我的另一篇博文 https://blog.csdn.net/wenhao_ir/article/details/145953214