如何深入理解和应用zynq的fsbl文件

如何深入理解和应用zynq的fsbl文件,第1张

fsbl是zynq开发中fsnq-7000

ap

soc启动中用户自定义的一些初始化代码,用来选择初始化sd卡读写、以太网接口这样的外设。在sdk

for

vivado的2013版本中,在已经生成了bsp的情况下,可以直接新建fsbl工程并自动选择生成启动映像!

1、创建硬件工程 启动XPS,创建Lab3工程。因为PS系统和FPGA连接是采用AXI接口,因而选择内部互联类型(Interconnect Type) 为AXI。 选择设计平台为Zynq ZC702 到外设配置界面,系统会默认有GPIO_SW 和 LEDs_4bits 这两个外设,我们不需要,remove

在Zynq-7000上编程PL大致有3种方法:

1 用FSBL,将bitstream集成到bootbin中

2 用U-BOOT命令

3 在Linux下用xdevcfg驱动。

步骤:

1 去掉bitstream的文件

用FSBL烧写PL Images没有什么好说的,用Xilinx SDK的Create Boot Image工具即可完成,不再赘述。用后两种方法需要把bitstream文件的文件头用bootgen工具去掉。

一个典型的bif文件如下所示:

the_ROM_image:

{

[bootloader]<fsbl_name>elf

<pl_bitstream_name>bit

<u-boot_name>elf

}

bif文件可以用文本编辑器写,也可以用Xilinx SDK的Create Boot Image工具生成。然后在命令行下用以下命令即可去掉bitstream文件的文件头。

bootgen -image <bootimage>bif -split bin -o i BOOTBIN

"-split”参数可以生成以下文件:

<pl_bitstream_name>bitbin

2 在U-BOOT下烧写PL Image

命令”fpga load”和”fpga loadb”都可以。区别是前一个命令接受去掉了文件头的bitstream文件,后一个命令接受含有文件头的bitstream文件。

在OSL 20142上,缺省编译就可以完整支持写入PL Image的功能。但是在Petalinux 201310下,尽管可以在U-BOOT下看到命令”fpga”,还需要在文件

<PROJ>/subsystems/linux/configs/u-boot/platform-toph 中增加以下内容后重新编译才可以支持具体的功能。

/ Enable the PL to be downloaded /

#define CONFIG_FPGA

#define CONFIG_FPGA_XILINX

#define CONFIG_FPGA_ZYNQPL

#define CONFIG_CMD_FPGA

#define CONFIG_FPGA_LOADFS

在OSL 20142 U-BOOT中,具体的功能是在zynqplc的zynq_load()中实现的。

3 在Linux下烧写PL Image

OSL Linux 2014201中已经含有xdevcfg驱动了(之前就有,不过本文是在这个版本上验证的),直接用以下命令就可以完成PL Image写入。

cat <path_to_storage_media>/<pl_bitstream_name>bitbin > /dev/xdevcfg

Linux驱动的源代码在xilinx_devcfgc中。因为驱动的编号是通过alloc_chrdev_region()动态分配的,所以不需要手工用mknod命令手动建立设备节点。

在Linux驱动中,每次往DevCfg中写入4096字节,直到全部写完。

4 在用户程序中烧写PL Image

目前没有现成的源码来完成这个功能,不过可以用mmap()把DevCfg的寄存器映射到用户程序的虚地址中,然后参考一些现成的软件代码来完成这个功能:

FSBL中的pcapc

U-BOOT中的zynqplc

Linux中的xilinx_devcfgc

Xilinx SDK中的例子。例子位于以下位置,随SDK的版本会有变化。

C:\Xilinx\SDK\20141\data\embeddedsw\XilinxProcessorIPLib\drivers\devcfg_v3_0\examples\indexhtml

小结:

DevCfg外设内部有自己的DMA,只需要简单的配置PL Image的基地址和长度到DevCfg寄存器,就可以完成Zynq-7000 PL Image的加载。Xilinx已经提供了灵活的解决方案,如果开发者要把这个功能集成在自己的应用程序中,也有很多的代码可以参考,并不是很困难的任务。

1、用于创建BOOTbin需要的文件

(1)u-bootelf:在Linux下编译后生成u-boot文件,再强制改名为u-bootelf文件,得到之。

(2)zynq_fsbl_0elf:在EDk下创建得到之。

(3)systembit::在PlanAhead中生成的bit文件;该文件不是必须的,没有该文件时,相当于把Zynq只当ARM来用。

2、创建BOOTbin文件

(1)只含有PS部分的设计

在SDk下,Xilinx Tools -> Craete Boot

Image得到如下图所示:

(2)同时包含有PS和PL设计

在(1)中所述生成的BOOTbin文件不含有给PL部分配置的bit文件,即只是ARM部分的运行代码。要使PL部分也能运行,需要在创建BOOTbin文件时,加入PL部分的设计生成systembit文件

相比而言,由于(1)中生成的BOOTbin文件没有PL部分的设计,也就无需对PL进行配置,所以启动时会快一些,而(2)中的BOOTbin文件启动要慢一些,大概有30s~40s不等(依赖于systembit文件的大小)。

步骤:

1 首先在vivado SDK中分别建立两个工程

注意:如上图所示,Core0 工程建立时选择ps7_cortexa9_0, Core1 工程建立时选择ps7_cortexa9_1

完成后如下图所示:

2配置Core1即从核中的BSP文件

在下图中画圈处,配置:-DUSE_AMP=1

3 配置Core0和Core1的DDR空间分配

通过修改lscriptld文件中的内容,可以改变在存储器中的执行位置,

因为ELF文件是加载到DDR中执行的,所以两个DDR地址不能重合

Core0的配置 :画圈处 栈空间也要分配,防止溢出

Core1配置

4 建立FSBL文件,并配置mian()文件

配置main() 跟第三步中的DDR空间配置有关

在FSBL的src中找到mainc文件打开,在里面添加下面一段代码,用于启动CPU1:

#define sev() __asm__("sev")

#define CPU1STARTADR 0xFFFFFFF0 //Core1 DDR配置中的SIZE大小

#define CPU1STARTMEM 0x10000000 //Core1 DDR配置中的起始地址

void StartCpu1(void)

{

#if 1

Xil_Out32(CPU1STARTADR, CPU1STARTMEM);

dmb(); //waits until write has finished

sev();

#endif

}

将上面的代码在main()中添加到:

Load boot image的位置,将CPU1的启动函数,放置于此位置,改动后的代码段如下:

5 生成mcs文件和烧写mcs文件到QSPI Flash

单击‘Core1’,选择Xilinx Tools –> Create zynq boot image,选择Add,选择文件…/ Core1/Debug/ Core1elf,点击打开。然后选择Core1elf, Core0elf在Core1elf上面。然后在Output pach后面把bootbin修改为Bootmcs。然后点击 Create Image

选择Core0

选择文件生成存储地址

选择MCS

画圈处是添加的文件

顺序为:FSBLelf bit文件 Core0elf Core1elf

点击Create Image 生成mcs文件

6 完成 *** 作 将 MCS 文件烧写进板子里

bin文件用来烧写到SD卡,mcs文件用来烧写到QSPI flash中 ,

选择Xilinx Tools –> Program Flash,在Image File后面选择刚才生成的Bootmcs文件,Offset为0x0,Flash Type为qsip_single。勾选Blank check after erase和Verify after flash。检查开发板上电和连线状况,然后点击Program

以上就是关于如何深入理解和应用zynq的fsbl文件全部的内容,包括:如何深入理解和应用zynq的fsbl文件、mtk路由器sdk怎样控制gpio、有人用过zynq7000 的axi dma实现PS与PL的高速通信吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9868834.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存