【Xilinx】MPSOC启动流程(五)- Uboot

该系列博客专注于Xilinx平台的PS端ARM部分开发,介绍了uboot启动后如何进入倒计时,以及在倒计时结束后如何自动启动Linux内核。主要涉及autoboot_command检查、命令行处理、脚本启动(如QSPI和EMMC/SD启动方式),通过boot.scr脚本执行启动配置。

此系列博客,仅对Xilinx平台PS端(ARM部分)开发做介绍,不对PL(FPGA)做过多介绍。

目录

五. run_main_loop

5.1 main_loop

六. 自动执行启动内核

6.1 autoboot_command

​​​​​​​6.2 脚本启动

6.2.1 ​​​​​​​QSPI

​​​​​​​6.2.2 EMMC/SD启动


五. run_main_loop

此函数实现uboot 启动以后会进入 倒计时,如果在倒计时结束之前按下按下回车键,那么就会进入 uboot 的命令模式,如果倒计时结束以后都没有按下回车键,那么就会自动启动 Linux 内核。

5.1 main_loop

       1.autoboot_command:检查倒计时是否结束

       2.cli_loop: uboot 的命令行处理函数

​​​​​​​​​​​​​​

六. 自动执行启动内核​​​​​​​​​​​​​​

​​​​​​​6.1 autoboot_command

当在倒计时没有按键按下,则会执行autoboot_command

       这里S的值为run distro_bootcmd

​​​​​​​6.2 脚本启动

       Distro_bootcmd的值为脚本,寻找对应的启动方式的环境变量值

       最终会查找boot.scr 脚本去执行镜像,设备树等的搬运,以及启动工作

6.2.1 ​​​​​​​QSPI

若为QSPI启动方式,执行bootcmd_qspi0环境变量的内容

sf probe 0 0 0: 加载qspi驱动

sf read $scriptaddr $script_offset_f $script_size_f : 从qspi flash中读取脚本到内存中

source ${scriptaddr}: 执行脚本boot.scr

​​​​​​​6.2.2 EMMC/SD启动

若为EMMC/SD启动方式,执行bootcmd_mmc0/1环境变量的内容: devnum=0/1; run mmc_boot

run mmc_boot -> run scan_dev_for_boot_part -> run scan_dev_for_boot ->

run scan_dev_for_scripts

scan_dev_for_scripts的内容为:查找MMC分区是否有boot.scr 脚本

若有脚本,则执行run boot_a_script

boot_a_script的值:load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr} 加载分区中的脚本,并source执行脚本

<think>嗯,用户问的是关于MPSOC通过USB启动下载镜像的操作步骤。我需要先理解MPSOC是什么。MPSOC应该是Xilinx的Zynq UltraScale+ MPSoC,对吧?这种芯片通常用于嵌入式系统,支持多种启动方式,比如SD卡、QSPI、NAND,还有USB。用户可能是在开发过程中需要从USB启动,可能遇到问题或者第一次尝试。 首先,我得回忆一下Xilinx官方文档中的启动流程。一般来说,启动过程需要正确的启动镜像和配置。USB启动可能涉及到将镜像文件放在USB存储设备中,并设置正确的启动模式引脚。但具体步骤可能需要详细说明。 接下来,用户可能需要知道如何准备镜像文件。比如,生成BOOT.BIN文件,包含FSBL、PMU Firmware、PL配置和Uboot。这里要确认用户是否了解这些组件,可能需要解释一下每个部分的作用,但用户的问题可能更偏向操作步骤,所以重点放在步骤上。 然后,格式化USB设备为FAT32,拷贝BOOT.BIN和可能的image.ub到根目录。需要确认文件系统是否正确,以及文件是否放在正确的位置。用户可能会忽略这一点,导致启动失败。 设置启动模式方面,MPSOC启动模式通过引脚配置,比如设置成USB启动模式。可能需要给出具体的引脚配置,比如Bank0的电压和引脚电平设置。这里需要确保用户知道如何查阅自己的板子手册,因为不同开发板的引脚可能不同。 连接USB设备到正确的接口,比如USB 0,可能需要使用特定的USB端口,用户需要确认板子上的接口标识。 上电启动后,观察串口输出,确认是否成功加载镜像。如果失败,可能需要检查镜像文件是否正确,USB设备是否被识别,启动模式是否正确,或者硬件连接问题。 用户可能的常见错误包括:镜像文件不正确、USB格式不对、启动模式配置错误、USB接口接错、或者硬件问题。需要提醒用户逐一排查这些点。 是否需要提到使用Vivado和PetaLinux工具生成镜像的步骤?用户可能已经生成了这些文件,但如果是新手,可能需要简要说明,但根据问题,用户可能已经有一定的背景,所以可能不需要深入,但保持步骤完整。 最后,确保回答结构清晰,分步骤说明,帮助用户逐步操作,同时指出可能的问题点。需要检查LaTeX格式是否正确,虽然这个问题可能涉及较少数学公式,但如果有变量或代码,需要用正确的格式。</think>以下为Xilinx Zynq UltraScale+ MPSoC通过USB启动镜像的操作指南,采用分步式说明: $$ \text{整体流程} = \text{准备镜像} + \text{配置启动模式} + \text{设备连接} + \text{启动验证} $$ **一、镜像准备阶段** 1. 生成启动镜像文件: - 使用Vivado/PetaLinux工具链生成`BOOT.BIN`文件 - 文件应包含: $$ \text{BOOT.BIN} = \text{FSBL} + \text{PMUFW} + \text{PL Bitstream} + \text{U-Boot} $$ - 可选准备`image.ub`(包含内核与设备树) 2. USB存储设备格式化: ```shell sudo mkfs.vfat -F 32 /dev/sdX # 将设备格式化为FAT32 ``` 其中`sdX`对应USB设备标识符 **二、硬件配置阶段** 1. 设置启动模式引脚: - 配置Bank0电压为3.3V(典型值) - 设置引脚电平组合: $$ \text{MODE[3:0]} = 0011_0 \rightarrow \text{USB0 Primary Boot} $$ - 具体电平参考开发板手册 **三、文件部署阶段** 1. 将生成文件拷贝至USB根目录: ``` /BOOT.BIN /image.ub(如适用) ``` **四、启动执行阶段** 1. 物理连接: - 将USB设备接入目标板的USB0接口 - 确认JTAG/USB-UART调试接口已连接 2. 上电观察输出: - 通过串口终端(如Putty)监控启动日志 - 正常启动应显示: ```log Xilinx PMUFW: PMU Firmware running... U-Boot 2023.01 (Mar 05 2023 - 15:32:17 +0800) ``` **、故障排查清单** 1. 启动失败常见原因: - $\text{文件验证}$:`md5sum BOOT.BIN`检查文件完整性 - $\text{格式验证}$:确认USB为FAT32且无隐藏分区 - $\text{硬件验证}$:测量Bank0引脚电平是否符合规格 - $\text{接口验证}$:尝试更换USB端口(注意USB0与USB1差异) **附加说明**: 对于定制化设计需特别注意: $$ \text{PMU配置} \propto \text{系统时钟设置} \times \text{电源时序要求} $$ 建议使用`xsct`工具验证PMU固件与硬件平台的兼容性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有意思科技

给与不给,我都会更新

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值