首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MicroZed测评8-创建FSBL

MicroZed测评8-创建FSBL

       前面我们已经建立了一个只使用PS,暂时未使用PL的小工程,就本质来说,其开发方法与普通的ARM开发较为相似。在这个例子中,我们在SDK中是通过在程序上点击Run As来运行的程序,它是通过TCL脚本来初始化PS的,然后用JTAG收发信息;使用的TCL脚本文件的信息如图1所示。[[wysiwyg_imageupload:922:]]图1 PS初始化的TCL脚本    在实际的产品中,显然无法用这样的方法来运行程序,这就需要启动加载器boot loader来初始化CPU。在ZYNQ PS的开发中,这段用来初始化PS的代码叫做FSBL(first stage boot loader ),即第一阶段的引导程序。传统的SRAM型FPGA都是通过JTAG接口、外置非易失性存储器(PROM、FLASH)或者外部处理器一次性将程序下载到FPGA中配置。而ZYNQ芯片则不同,其内部集成了处理器硬核和可编程逻辑,所以它的配置启动是分阶段的。
  • 阶段0:即传统的BootROM过程,Zynq芯片PS部分有片上ROM和RAM,在芯片上电或者复位后,其中一个处理器会执行片上ROM的代码进行初始化,判断启动设备(boot device),将启动设备上的FSBL(first boot loader)代码拷贝到片上RAM内。因为阶段0的代码是固化在ROM中,所以我们用户无法修改。
  • 阶段1:启动设备包括SPI FLASH、SD和JTAG,FSBL代码是用户自己定制的,拷贝到片上RAM后执行。包括初始化PS部分配置、配置PL部分逻辑、加载和执行SSBL(second boot loader)或应用程序。
  • 阶段2:上一阶段后硬件已经配置完成。这一阶段是可选的,完成Linux系统启动过程(U-BOOT)。

为了测试阶段1的启动过程,我们可以自己创建FSBL,然后分别利用MicroZed板子上的128 Mb QSPI Flash和microSD卡进行启动配置。 接下来的步骤就是首先创建一个FSBL程序。在SDK中,打开前面创建好的工程,然后点击File—New---New Application Project,工程名可以体现出FSBL的特征,例如MZ_FSBL,因为开发板还是MicroZed,我们直接使用已经创建好的BSP就可以了。点击Next,可以在工程模版中看到FSBL的模版,如图2所示。[[wysiwyg_imageupload:923:]]图2 FSBL的模版       点击Finish,经过十几到几十ms的编译过程,MZ_FSBL工程就创建成功了。然后在SDK的工程管理器中,在MZ_FSBL工程的Debug子类上点击右键并选择它的属性Properties,可以查看调试模式下的编译器选项,如图3所示。可以看出,默认的编译器优化为无优化,调试级别为最高。[[wysiwyg_imageupload:924:]]图3 编译器选项        点击Manage Configuration按钮,可以改变编译器的输出选项。需要注意的是图3中的窗口进行了缩放,貌似看不到这个按钮,这时需要拉动滚动条到最右边,或者把窗口横向拉伸才能看到,如图4所示。[[wysiwyg_imageupload:925:]]图4 Manage Configuration        把编译器的出现选项从调试Debug改成发布Release,只要选择Release然后点击Set Active就改变了输出模式,并且程序会自动编译。但是目前需要点击两次Ok,关闭属性窗口之后再打开,才能看到更改后的编译器优化选项已经变成-o2,调试级别变为无(SDK的bug?不能立即自动刷新;而且重复编译了两次)。在SDK的控制台窗口中,可以观察Debug和Release两种模式下生成的elf文件的大小:Debug模式下是0x2450c,Release模式因为使能了-o2级别的优化,程序减小到0x213d8。        因为我们要用生成的FSBL来启动前面建立的HelloWorld和Periph_test的程序,所以把它们也按照相同的方式改为Release模式就可以了;或者说如果不需要更改任何别的编译器选项的话,直接在SDK的工程管理器中,找到相应的工程,直接点击右键更改就可以了,如图5所示。[[wysiwyg_imageupload:926:]]图5 快速改变编译器输出选项
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表