☰
米联客F20-2CG(ZYNQ MPSoC)Petalinux EXT4持久化文件系统搭建教程
2026/10/22 2:03:17 网站建设 项目流程

适用平台:米联客MLK-F20-CM02-2CG ZYNQ MPSoC开发板

软件版本:Petalinux 2021.1、Ubuntu 18.04

串口环境下载地址:https://www.uisrc.com/t-3177.html

前言

默认Petalinux编译生成的系统采用ramdisk临时文件系统,文件系统运行在内存中,开发板断电后所有修改的数据、配置都会丢失,无法满足实际项目持久化存储需求。

本文基于米联客F20-2CG开发板,手把手教大家将Petalinux根文件系统修改为EXT4持久化文件系统,通过SD卡分区存储根文件系统,实现断电数据保存,全程采用离线编译方式,规避在线编译网络报错问题,适配2021.1版本Petalinux。

本文涵盖:工程配置修改、设备树适配、SD卡分区格式化、系统编译、镜像部署、板卡启动测试全流程。

图1 开发板功能示意图

前置环境

1. 已搭建完成Petalinux2021.1开发环境(米联客定制Ubuntu18.04虚拟机)

2. 已准备好离线编译依赖包(适配MPSoC 64位处理器)

3. 提前获取F20-2CG对应的Vivado导出XSA硬件描述文件

4. 8G及以上SD卡(格式清空,用于分区制作启动卡)

5. 开发板、串口线、SD卡读卡器、电源适配器

一、核心原理说明

1. ramdisk模式:根文件系统挂载在内存,读写速度快,但断电数据清零,仅适用于调试测试

2. EXT4持久化模式:将根文件系统挂载在SD卡EXT4分区,所有文件修改、程序安装、配置保存均可永久生效,断电不丢失

3. SD卡双分区设计:

  • FAT32分区(boot):存放BOOT.BIN、boot.scr、Image、system.dtb等启动镜像
  • EXT4分区(rootfs):挂载Linux根文件系统,持久化存储系统数据

二、进入工程并配置离线编译(必做)

为避免在线编译网络超时、服务器连接失败问题,全程使用离线编译配置,沿用前文搭建的工程目录。

1. 进入Petalinux工程目录,加载环境变量

cd /home/uisrc/project/system

source ../../petalinux2021.1/settings.sh

图2 进入工程并加载环境变量

2. 打开工程配置界面

petalinux-config

图3 petalinux-config配置界面

3. 配置Yocto离线编译参数(已有配置可跳过,新工程必须配置)

  • 进入 Yocto Settings -> Add pre-mirror url,输入路径:file:///home/uisrc/downloads_2021.1_update1
  • 进入 Yocto Settings -> Local sstate feeds settings,输入64位MPSoC路径:/home/uisrc/sstate_aaarch64_2021.1_update1/aarch64
  • 取消勾选 Enable Network sstate feeds,关闭网络编译模式

配置完成后暂不保存,继续下一步文件系统配置。

三、修改根文件系统为EXT4模式

3.1 配置文件系统类型与挂载盘符

在petalinux-config配置界面,依次进入:

Image Packaging Configuration -> Root filesystem type

默认为ramdisk模式,修改为:EXT4(SD/eMMC/SATA/USB)

图4 修改Root filesystem type为EXT4

选中后界面会新增盘符配置项,填写F20-2CG开发板SD卡挂载节点:

Device node of SD device = /dev/mmcblk1p2

图5 Image Packaging Configuration配置界面

图6 填写Device node of SD device(/dev/mmcblk1p2)

关键说明:F20-2CG板卡sdhci0对应SD卡设备,系统识别为mmcblk1,第二分区p2专门用于挂载EXT4根文件系统,切勿填错盘符,否则系统启动失败。

图7 设备树SDHCI节点(mmcblk设备映射)

3.2 设备树适配SD卡(防止写保护报错)

修改设备树文件,关闭SD卡写保护,避免挂载失败:

编辑设备树配置文件:

vim /home/uisrc/project/system/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

在文件末尾添加如下配置:

&sdhci0 {

disable-wp;

};

&sdhci1 {

disable-wp;

};

图8 system-user.dtsi 添加disable-wp配置

保存退出(ESC :wq),完成设备树适配。

四、清理缓存并编译系统

1. 清理历史编译缓存,避免配置残留冲突

petalinux-build -x cleanall

2. 执行离线编译(耗时取决于电脑配置,无网络依赖)

petalinux-build

图9 执行编译命令

图10 petalinux-build编译成功

编译成功会提示:Successfully built project

3. 打包生成BOOT.BIN启动镜像

petalinux-package --boot --format BIN --fsbl images/linux/zynqmp_fsbl.elf --u-boot images/linux/u-boot.elf --pmufw images/linux/pmufw.elf --fpga images/linux/*.bit --force

图11 打包生成BOOT.BIN启动镜像

执行完成后,images/linux目录下生成核心启动文件:BOOT.BIN、image.ub、system.dtb、rootfs.tar.gz

五、SD卡双分区格式化与系统部署

将SD卡通过读卡器接入Ubuntu虚拟机,使用系统自带磁盘工具分区,禁止Windows格式化(会导致分区格式异常)。

5.1 SD卡分区划分

1. 打开Ubuntu磁盘工具,选中接入的SD卡,删除原有所有分区

图12 磁盘工具删除原有分区

2. 新建第一个分区:

  • 分区大小:500MB
  • 格式:FAT32
  • 分区名称:boot

图13 新建boot分区

图14 分区配置

图15 分区配置

3. 新建第二个分区:

  • 占用剩余全部空间
  • 格式:EXT4
  • 分区名称:rootfs

图16 新建rootfs分区

图17 分区配置

图18 分区配置

保存分区方案,等待格式化完成,手动挂载两个分区。

图19 分区完成

图20 挂载boot/rootfs分区

5.2 部署启动文件与根文件系统

1. 拷贝启动文件到FAT32 boot分区

将 images/linux 目录下的 boot.scr、BOOT.BIN、image.ub 三个文件复制到SD卡boot分区。

图21 拷贝启动文件到boot分区

2. 解压根文件系统到EXT4 rootfs分区

sudo tar zxvf rootfs.tar.gz -C /media/uisrc/rootfs/

图22 解压根文件系统到rootfs分区

3. 强制写入缓存,避免文件丢失

sync

操作完成后安全弹出SD卡,完成系统部署。

六、开发板启动配置与测试

6.1 拨码开关配置(F20-2CG专用)

将开发板拨码开关调整为 SD卡启动模式:OFF-ON-OFF

接线说明:插入SD卡,连接USB串口、电源,打开Putty串口工具,波特率默认115200。

6.2 持久化功能验证

1. 上电启动开发板,系统正常进入Linux终端

图23 系统启动并查看内核版本(uname -a)

2. 创建测试文件

touch test.txt

echo "EXT4持久化测试" > test.txt

图24 创建并写入测试文件

3. 断电重启开发板,重新进入系统

4. 查看文件是否存在

ls

图25 断电重启后文件保留

若test.txt文件保留、内容未丢失,说明EXT4持久化文件系统配置成功。

七、常见问题与解决方案

问题1:系统启动提示mmcblk0p1挂载失败

解决方案:检查设备树是否添加disable-wp配置,关闭SD卡写保护,重新编译烧录。

问题2:断电后数据依旧丢失

解决方案:确认petalinux-config中文件系统类型已改为EXT4,且盘符/dev/mmcblk1p2填写正确,重新配置编译。

问题3:编译过程sstate匹配失败

解决方案:检查离线包路径配置,确认64位离线包适配MPSoC架构,关闭网络编译模式。

问题4:SD卡分区后无法挂载

解决方案:使用Ubuntu原生磁盘工具分区,禁止Windows格式化,确保分区格式为纯FAT32和EXT4。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询