篇首
最近突发奇想,Xilinx 的集成开发环境已经很好了,很多必要的代码都直接生成了,这给开发者带来了巨大便利的同时,也让人错过了很多代码的精彩,可能有很多人用了很多年了,都还无法清楚的理解其中过程。博主准备以FSBL为例,与大家深入探讨一番,从而加深对ZYNQ的加载过程的理解,以便大家作出更精彩的设计!
FsblHandoff()函数解析
FsblHandoff()是ZYNQ7000 FSBL(第一阶段引导程序)的最后一步,负责将执行权限从FSBL移交给用户程序(如u-boot或裸机程序)。其核心逻辑如下:
-
关闭中断与缓存
- 在跳转前关闭所有中断,避免移交过程中发生异常。
- 禁用MMU(内存管理单元)和D-Cache(数据缓存),确保跳转后的程序在干净的内存环境中运行。
-
设置跳转地址
- 通过
LoadBootImage()函数获取用户程序的入口地址(通常存储在DDR中)。 - 该地址被写入链接寄存器(LR)或直接传递给汇编代码。
- 通过
-
汇编级跳转
- 在
fsbl_handoff.S文件中,通过汇编指令BX LR实现跳转。例如:ldr lr, =HandoffAddress // 加载用户程序入口地址到LR bx lr // 跳转执行 - 此操作直接切换程序计数器(PC),不再返回FSBL,完成控制权移交。
- 在

最低0.47元/天 解锁文章
2193

被折叠的 条评论
为什么被折叠?



