ZYNQ7000 uboot實現兩級引導及加載FPGA程序

ZYNQ7000 uboot實現兩級引導及加載FPGA程序

​ 這裏主要是針對qspi flash啓動,然後uboot源碼爲xilinx-v2019.2版本。

一、啓動介紹

​ zynq一般情況下,我們是通過xilinx的sdk生成fsbl,然後和fpga程序、uboot一起,生成boot.bin文件,最後固化到spi flash。這樣,我們每次更新uboot或者fpga程序,都要重新生成boot.bin,比較麻煩。因此這裏可以用uboot secondary program loader即uboot spl來取代xilinx sdk的fsbl, 並且uboot spl很小,可以完全從zynq的 OCM啓動。

​ uboot spl爲uboot的第二階段加載器,一般用來引導真正的uboot,在zynq中可以用來替換fsbl作爲第一階段的引導。這樣每次更新了uboot,只需要將新的uboot通過網絡或者jtag固化到指定的spi flash位置即可。當設備上電,uboot spl起來後,會從固定的位置去加載uboot。

二、uboot spl

​ 要實現uboot secondary program loader,則需要PS端啓動初始化代碼,可以從xilinx sdk的hw platform工程獲得。如圖所示:

在這裏插入圖片描述

只需要上圖中的ps7_init_gpl.cps7_init_gpl.h文件拷貝到{uboot源碼}/board/xilinx/zynq 目錄下對應的目錄即可,如下圖所示。比如,我目前是通過zynq_zed 這個改的,所以只需要把ps7_init_gpl.cps7_init_gpl.h文件拷貝到zynq_zed 目錄。
在這裏插入圖片描述

​ 如果是從qspi啓動,需要在zynq-common.h 裏面修改CONFIG_SYS_SPI_U_BOOT_OFFS 宏,來指定uboot在spi flash中存放的位置,當uboot spl程序起來後,則會從這個位置去引導uboot。

​ 最後編譯uboot源碼,則會在uboot源碼根目錄下生成一個spl目錄,然後將spl目錄的boot.bin 固化到spi flash,這裏已經生成了boot.bin文件,因此不需要xilinx sdk再來生成boot.bin文件。其中uboot spl引導的uboot文件爲u-boot.img,因此在固化uboot時,應該固化編譯生成的u-boot.img文件(u-boot.img比u-boot.bin多64字節的頭)。

##三、加載FPGA程序

​ zynq主要用Device Configuration Interface (devcfg)來加載FPGA程序,而在uboot下提供了fpga加載相關的指令,都是基於devcfg 控制器驅動實現的。如圖所示:

在這裏插入圖片描述

​ 因此fpga程序也沒必要每次和fsbl一起,生成boot.bin文件。完全可以通過uboot的命令來實現加載,並且通過uboot來更新fpga程序也更方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章