参照:米联的学习笔记
由于之前基于zedboard的开发都是在调试模式下进行的,是通过 JTAG 先下载 bit 流文件,再下载 elf 文件,然后后点击Run As 来运行的程序。但是这样叧要一断电,程序就没了。那举今天我们就来试试如何让程序断电不消失。之前,JTAG 的方法是通过 TCL 脚本来初始化 PS,然后用 JTAG 收发信息,可用于在线调试。这次我们得想办法把程序放到一个非易失的存储器件里。那我们先要稍微了解下 zynq 的启劢过程,启劢过程有 3 个阶段:
阶段 0:即传统的 BootROM 过程,zynq 芯片里有个 rom 里面固化了一段不可修改的程序,叧有 zynq 一上电,这段程序就会执行,它将对 zynq 的 NAND、NOR、 SD 等基本外设控制器进行初始化。把 SD 卡这类易失的存储器件初始化好了之后,就会把其中的程序拷贝到 zynq 的 OCM(On-chip memory),那这个被拷贝到片上 RAM 执行的程序就是我们今天要制作的文件——BOOT.bin。那么怎么知道BOOT.bin 是在 SD 还是 NAND 还是 NOR?这个问题实际上是通过改变启动时候的跳线帽的设置来配置的。见下图所示;
阶段 1:说到 BOOT.bin,他其实是由 3 个文件制作而成,第一个是 FSBL.elf,
第二个是 bit 文件,第三个是运行在 PS 上的 elf 文件。第二个和第三个上次我们已经见过了,bit 文件是由 vivado 产生里面包含了 zynq PS 的配置部分内容,以及PL 部分的逻辑内容。第三个文件就是 SDK 里写的用户程序生成的。那第一个文件 FSBL.elf 是干嘛的呢?它做的这个事情就是第一阶段的内容:根据 bit 文件,首先配置 PS 部分,PS完成初始化后,会去配置 PL 部分,之后会去加载第二阶段的代码。
阶段 2:这一阶段是可选的,完成 Linux 系统启劢过程(U-BOOT)。我们这
次是还是裸奔,不需要。
制作boot.bin我们需要三个东西:第一个是 FSBL.elf,第二个是 bit 文件,第三个是运行在 PS 上的 elf 文件.第三个东西在哪里呢?制作boot.bin的流程如下:
1.首先创建一个FSBL;在SDK的空间站内,新建一个FSBL工程;
然后ctrl+B编译之后就会出现我们需要的FSBL.elf文件,然后点击SDK 的工具栏:Xilinx Tool->Creat Zynq Boot Image,开始制作boot.bin:分别添加以上 3 个文件,但是最好按顺序添加,因为 FSBL 最先启劢,然后配置 PS,最后配置 PL,所以顺序就是 1、 FSBL.elf 2、 bit 3、程序的 elf。然后create Image.制作boot.bin。这样将生成的boot.bin复制到SD卡,然后上点启动,程序自动运行,掉电后再上电即可。