news 2026/5/8 21:46:33

ZynqMP SD卡启动全记录:从Vivado配置到Linux命令行(基于黑金AXU2CGB板)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ZynqMP SD卡启动全记录:从Vivado配置到Linux命令行(基于黑金AXU2CGB板)

ZynqMP SD卡启动实战指南:黑金AXU2CGB开发板全流程解析

当一块崭新的ZynqMP开发板摆在面前,如何快速搭建完整的启动环境往往是开发者面临的第一个挑战。不同于传统嵌入式系统,ZynqMP的异构架构和多重启动阶段让许多初次接触的工程师感到困惑。本文将基于黑金AXU2CGB开发板,详细拆解从硬件配置到Linux系统启动的完整流程,特别针对SD卡启动这一常见场景提供可复现的操作指南。

1. 开发环境准备与硬件配置

工欲善其事,必先利其器。在开始ZynqMP的启动流程前,需要确保开发环境配置正确。推荐使用Vivado和Vitis 2021.2版本工具链,这是目前对ZynqMP支持较为稳定的版本组合。

1.1 Vivado工程关键配置

在Vivado中创建新工程时,需要特别注意以下几个核心配置:

# 板级预设选择(适用于黑金AXU2CGB) set_property board_part blackgold:axu2cgb:part0:1.0 [current_project]

硬件设计中必须包含以下基本外设:

  • SD1控制器:用于SD卡启动介质
  • QSPI Flash:可选备用启动设备
  • UART1:调试信息输出
  • 千兆以太网:网络启动和调试
  • DDR控制器:配置与开发板匹配的DDR参数

特别注意:黑金AXU2CGB开发板使用了两片MT40A512M16LY-075E内存芯片,在配置DDR时需要设置正确的时序参数:

参数项推荐值
Memory PartMT40A512M16
Memory Speed1066MHz
CAS Latency15
tRFC350ns

1.2 生成硬件描述文件

完成硬件设计后,需要生成.xsa(Xilinx Support Archive)文件,这是后续软件开发的基石。在生成过程中:

提示:务必勾选"Include bitstream"选项,否则生成的.xsa文件将不包含硬件比特流信息,导致后续步骤失败。

2. 启动组件编译与集成

ZynqMP的启动过程比传统Zynq更为复杂,涉及多个固件组件的协同工作。理解每个组件的作用至关重要。

2.1 关键启动组件解析

完整的启动链包含以下组件:

  1. PMU固件:电源管理单元固件,负责芯片上电时序
  2. FSBL:第一级启动加载器
  3. ARM Trusted Firmware:提供安全监控环境
  4. U-Boot:通用引导加载程序
2.1.1 编译PMU固件

在Vitis中创建Platform Management Unit工程时,需要特别注意PMU配置:

// 典型PMU配置参数 #define PMU_GLOBAL_CFG (PMU_GLOBAL_CFG_SWDT_ENABLE | \ PMU_GLOBAL_CFG_WDT_ENABLE | \ PMU_GLOBAL_CFG_TTC_ENABLE)
2.1.2 生成FSBL

FSBL编译过程中常见的两个问题:

  • DDR初始化失败:检查Vivado中的DDR配置
  • QSPI Flash识别错误:确认Flash型号是否正确设置

2.2 ARM Trusted Firmware编译

ATF(ARM Trusted Firmware)为系统提供安全监控环境,编译时需要明确指定平台:

make CROSS_COMPILE=aarch64-linux-gnu- PLAT=zynqmp RESET_TO_BL31=1

关键参数说明

  • RESET_TO_BL31=1:指定BL31作为初始执行入口
  • DEBUG=1:调试时可添加此参数生成带调试信息的版本

3. U-Boot定制与设备树修改

3.1 为黑金开发板适配U-Boot

虽然可以使用官方ZCU100的预设配置,但为了获得最佳兼容性,建议针对AXU2CGB进行定制:

# 使用ZCU100配置作为基础 make CROSS_COMPILE=aarch64-linux-gnu- xilinx_zynqmp_virt_defconfig # 关键设备树修改点 &sdhci1 { status = "okay"; disable-wp; # 黑金开发板SD卡槽无写保护检测 xlnx,mio-bank = <0x1>; };

3.2 设备树关键配置项

黑金AXU2CGB开发板需要特别注意以下设备树配置:

节点必需配置说明
&gem3phy-mode = "rgmii-id"以太网PHY接口模式
&uart1cts-override禁用硬件流控
&sdhci1disable-wp禁用写保护检测
/memoryreg = <0x0 0x0 0x0 0x7ff00000>2GB DDR地址空间

4. 制作SD卡启动镜像

4.1 BOOT.bin生成详解

在Vitis中创建启动镜像时,需要正确配置bif文件:

//arch = zynqmp; split = false; format = BIN the_ROM_image: { [bootloader]fsbl.elf [pmufw_image]pmu.elf [destination_cpu=a53-0, exception_level=el-3]bl31.elf [destination_cpu=a53-0, exception_level=el-2]u-boot.elf }

注意:组件顺序必须严格遵循上述排列,任何错位都可能导致启动失败。

4.2 SD卡分区与文件布局

一个典型的可启动SD卡应包含以下内容:

/dev/sdb1 (FAT32, 256MB) # 启动分区 ├── BOOT.bin ├── boot.scr ├── Image.gz └── system.dtb /dev/sdb2 (EXT4, 剩余空间) # 根文件系统分区

使用以下命令准备SD卡:

# 分区设置 sudo fdisk /dev/sdb << EOF n p 1 +256M n p 2 t 1 c w EOF # 格式化分区 sudo mkfs.vfat -F 32 /dev/sdb1 sudo mkfs.ext4 /dev/sdb2

5. 启动脚本与内核参数配置

5.1 boot.cmd脚本编写

针对黑金开发板的典型启动脚本:

# 设置内核启动参数 setenv bootargs "earlycon console=ttyPS0,115200n8 clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait" # 加载内核和设备树 load mmc 0:1 ${kernel_addr_r} Image.gz load mmc 0:1 ${fdt_addr_r} system.dtb # 启动内核 booti ${kernel_addr_r} - ${fdt_addr_r}

使用mkimage工具将脚本转换为boot.scr:

mkimage -C none -A arm -T script -d boot.cmd boot.scr

5.2 常见启动问题排查

当系统无法正常启动时,可按以下步骤排查:

  1. 检查PMU状态:U-Boot中运行pmufw命令查看PMU固件状态
  2. 验证DDR初始化:FSBL阶段串口输出应显示DDR初始化成功
  3. 确认SD卡识别:U-Boot中使用mmc list检查SD卡是否被识别
  4. 检查文件加载:使用fatload命令手动尝试加载内核文件

6. 网络配置与远程调试

6.1 以太网PHY配置

黑金AXU2CGB使用RTL8211E PHY芯片,需要在设备树中正确配置:

&gem3 { phy-handle = <&phy1>; phy-mode = "rgmii-id"; phy1: ethernet-phy@1 { reg = <1>; ti,rx-internal-delay = <0x8>; ti,tx-internal-delay = <0xa>; }; };

6.2 TFTP网络启动配置

对于频繁调试的场景,可以配置网络启动:

# 设置服务器IP和开发板IP setenv serverip 192.168.1.100 setenv ipaddr 192.168.1.50 # TFTP加载内核 tftp ${kernel_addr_r} Image.gz tftp ${fdt_addr_r} system.dtb # 启动内核 booti ${kernel_addr_r} - ${fdt_addr_r}

在实际项目中,我们发现将常用命令保存为U-Boot环境变量可以显著提高调试效率:

setenv netboot 'tftp ${kernel_addr_r} Image.gz; tftp ${fdt_addr_r} system.dtb; booti ${kernel_addr_r} - ${fdt_addr_r}' saveenv
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 21:28:29

技术创业者如何用Bootstrapping模式实现零成本启动与快速验证

1. 从“灵光一现”到“现实骨感”&#xff1a;一个博士生创业者的第一课几年前&#xff0c;我还是个埋头在实验室里捣鼓能量收集技术的博士生&#xff0c;满脑子都是微瓦级的功率优化和晦涩的论文。有一天&#xff0c;盯着桌上那台崭新的iPad&#xff0c;一个念头突然蹦出来&am…

作者头像 李华
网站建设 2026/5/8 21:21:31

Arm Cortex-X2处理器编程陷阱与解决方案

1. Arm Cortex-X2处理器编程陷阱深度解析在嵌入式系统开发领域&#xff0c;Arm Cortex-X2作为高性能计算核心&#xff0c;其底层机制的正确使用直接关系到系统稳定性。过去三年间&#xff0c;我在多个基于Cortex-X2的嵌入式项目中&#xff0c;亲眼目睹了由于对处理器特性理解不…

作者头像 李华
网站建设 2026/5/8 21:21:29

一键下载DLL 文件,链接在这里

很多人不清楚 DLL 文件的重要性&#xff0c;它是 Windows 系统核心动态链接库&#xff0c;是软件、游戏、各类程序正常启动运行的关键基础。 一旦 DLL 丢失或损坏&#xff0c;就会出现软件闪退、程序打不开、弹窗报错、电脑卡顿等问题&#xff0c;严重还会影响系统稳定。 手动…

作者头像 李华
网站建设 2026/5/8 21:19:30

面试被问 MySQL 慢 SQL 怎么排查?看完这篇直接给面试官讲明白

做 Java 后端开发&#xff0c;不管是自己练手的电商项目&#xff0c;还是公司线上业务&#xff0c;几乎都会被慢 SQL 毒打&#xff1a;接口响应超时、数据库 CPU 直接打满&#xff0c;甚至引发服务雪崩。 几乎所有的项目中都会遇见慢SQL的问题&#xff0c;相信大家在开发过程中…

作者头像 李华
网站建设 2026/5/8 21:09:50

vue基于springboot的校园闲置物品交易聊天系统实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析实时通讯系统技术实现要点扩展功能设计项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 用户管理模块 用户注册与…

作者头像 李华