eMMC 作为一种嵌入式存储芯片,其基本操作思路与 SD 卡有相似之处,但在物理形态和操作方式上存在显著差异。SD 卡可以方便地插入电脑,直接在 Ubuntu 等系统下完成分区和数据拷贝。然而,eMMC 是直接焊接在 ZYNQ 板卡上的,无法像 SD 卡那样随意插拔。那么,我们该如何对它进行分区和文件写入呢?正确的思路是“借道而行”:首先让 ZYNQ 通过 SD 卡启动,进入板载的嵌入式 Linux 系统,然后在这个系统环境中完成对 eMMC 的全部分区和文件拷贝操作。操作完成后,将板卡断电,把启动模式切换为 eMMC,再重新上电即可。简单来说,eMMC 需要借助 SD 卡来完成分区和文件拷贝。
一、eMMC 分区
让 ZYNQ 板卡通过 SD 卡启动并进入 Linux 系统后,我们可以先用 ls /dev/mmcblk* 命令来查看系统中的块设备。此时,你通常能看到代表 SD 卡和 eMMC 的设备节点。请注意,根据具体的硬件设计和配置,设备节点的对应关系可能有所不同。在本文的示例环境中,/dev/mmcblk0p1 和 /dev/mmcblk0p2 正是我们 eMMC 的两个分区。你可以通过 df 命令来查看它们当前的挂载情况。

在进行任何分区操作之前,务必确保目标分区处于卸载状态。请执行卸载命令:
umount /dev/mmcblk0p1 和 umount /dev/mmcblk0p2。
接下来,输入 fdisk /dev/mmcblk0 进入磁盘分区管理工具,整个操作过程与为 SD 卡分区非常相似。

进入 fdisk 交互界面后,按下 p 键可以打印当前分区表,查看已有的分区信息。如果磁盘上存在旧分区,可以输入 d 键进行删除。

清空旧分区后,我们开始创建新分区。输入 n 创建分区,根据提示:
- 选择分区类型,输入
p 选择主分区。
- 设置分区大小时,输入
+1G(大小可根据你的实际需求自定义)。
- 创建后,输入
t,再输入 L 可以列出所有支持的分区类型代码,用于修改分区类型。

eMMC 的第一个分区类型应该为 FAT32。因此,在选择类型码时,我们需要输入 c,代表 W95 FAT32 (LBA)。

第二个分区的创建步骤与上述类似。不同的是,第二个分区的类型保持默认的 Linux 即可,无需修改。所有操作完成后,输入 w 保存所有更改并退出 fdisk。

二、格式化和手动挂载
分区创建完成,接下来的步骤是格式化它们。请使用以下命令:
- 对第一个分区格式化为 FAT32:
mkfs.vfat /dev/mmcblk0p1
- 对第二个分区格式化为 EXT4:
mkfs.ext4 /dev/mmcblk0p2
格式完成后,我们需要将它们挂载到指定目录,以便后续文件拷贝。首先创建挂载点目录:
mkdir /run/media/emmc_mmcblk0p1
mkdir /run/media/emmc_mmcblk0p2
然后,将两个分区分别挂载到刚创建的目录上:
mount /dev/mmcblk0p1 /run/media/mmcblk0p1/
mount /dev/mmcblk0p2 /run/media/mmcblk0p2/
三、拷贝文件与 eMMC 启动
eMMC 的分区和挂载全部就绪后,最后一步就是部署启动所需的固件和文件系统。你可以将 Petalinux 编译生成的 BOOT.bin 和 image.ub 文件拷贝到第一个分区(FAT32分区);将 rootfs.tar.gz 压缩包解压到第二个分区(EXT4分区)。完成之后,将 ZYNQ 板卡断电,将启动模式拨码开关调到 eMMC 启动位,最后重新上电,系统就应当能从 eMMC 成功启动了。
至此,我们就完成了 eMMC 从初始化分区到系统启动的全部步骤。在实际的嵌入式项目开发中,这种操作流程是非常关键的。对于追求更高稳定性和效率的开发者而言,掌握这些基础运维技能,对构建可靠的嵌入式系统至关重要。如果你在云栈社区经常和同好交流,会发现很多稳定性和软件质量(Quality Assurance)方面的问题,其根源往往可以追溯到这些看似基础的烧录与部署环节。多动手实践,并编写一些自动化脚本来规范流程,能让你的开发效率事半功倍。
|