2019.3.22 [Zedboard上運行Linaro系統](二):生成BOOT.BIN

原作者:雅可 ,文章地址:http://blog.csdn.net/yake827/article/details/51980181
製作Linaro系統所需要的文件:

   1.u-boot.elf (Linux boot loader)

   2.SDK生成的FSBL(first stage boot loader)

   3.linux內核映像文件

   4.命名爲devicetree.dtb的設備樹文件

5.Linaro文件系統

生成BOOT.BIN
映像文件BOOT.BIN一般包括:FSBL,Bitstream和SSBL這三個文件,其中Bitstream是配置PL端程序,是可選項,在我們製作Linaro系統的時候並不需要。FSBL是first stage boot loader,文件的製作需要使用Vivado環境;SSBL是Second Stage Boot Loader,這裏使用的是Xilinx公司提供的u-boot。

1.FSBL的製作
一、搭建軟硬件環境

硬件的環境搭建其實就是創建一個最簡單的Vivado項目。首先打開Vivado 2015.2,選擇Zedboard,完成創建嚮導,最後進入如下界面
在這裏插入圖片描述

先創建一個Block Design,在本文中定義爲ststem,完成後在Diagram視圖中點擊Add IP,在彈出的窗口中輸入Zynq進行搜索,在結果中選擇第一個ZYNQ7 Processing System,點擊Run BlockAutomation完成自動連線,界面如下:
在這裏插入圖片描述

接下來我們取消一些不需要的部分。

首先雙擊ZYNQ進行自定義配置,首先點擊Clock Configuration,展開PL Fabric Clocks,取消FCLK_CLK0。
在這裏插入圖片描述

取消之後Diagram中的FCLK_CLK0會消失。

另外,我們要取消如下引腳
在這裏插入圖片描述

對於TTC,我們點擊如下部分,取消掉TTC
在這裏插入圖片描述

點擊上圖的紅框部分,進入如下界面
在這裏插入圖片描述

對於AXI GP0,我們點擊如下紅框部分
在這裏插入圖片描述

取消掉AXI GP0 interface。

用同樣的方法取消QSPI,ENET0。點擊OK完成,結果如下所示
在這裏插入圖片描述

回到Block Design的sources視圖,在System上右鍵選擇Create HDL Wrapper。完成後點擊左邊Flow Navigator中的Generate BitStream。等待Vivado完成綜合、實現、生成bitstream。

點擊File->Export->ExportHardware,確認後點擊File->Launch SDK,系統會自動開啓SDK軟件

在SDK中點擊菜單File->New->Application Project。項目名fsbl(可以更改),OS平臺standalone,語言爲C,點擊Next,Templates選項選擇ZynqFSBL。

點擊Finish,SDK會自動編譯FSBL代碼,並在工程Debug下生成fsbl.elf目標文件,如下圖所示
在這裏插入圖片描述

至此,FSBL的編寫工作完成,接下來開始做u-boot的編寫。

2.編譯U-boot
u-boot採用的是xilinx官方提供的u-boot包來生成的,步驟如下:

1.獲取u-boot代碼

$ git clone https://github.com/Xilinx/u-boot-xlnx.git (這裏可從windows直接下載15.2版本,下載最新版本會出現option ‘-std=gnu11’ 交叉編譯gcc版本過低問題,15.2:https://github.com/Xilinx/u-boot-xlnx/releases?after=xilinx-v2016.2)

$ cd u-boot-xlnx

(建議直接下載15.2版本)2.爲了使項目更容易管理,統一採用的是xilinx-v2015.2這個版本

$ git checkout -bxilinx-v15.2

3.確保我們的ARM編譯器已經在我們的環境變量中----交叉編譯安裝教程(https://blog.csdn.net/weixin_40604731/article/details/88748582),
設置交叉編譯器前綴:
$ exportCROSS_COMPILE=arm-xilinx-linux-gnueabi-

4.更改include/configs/zynq_common.h中的數據,讓我們的u-boot在啓動的時候不會試圖去加載ramdisk image。

   "sdboot=if mmcinfo; then " \

                 "run uenvboot; "\

                 "echo Copying Linuxfrom SD to RAM... && " \

                 "load mmc 0${kernel_load_address} ${kernel_image} && " \

                 "load mmc 0${devicetree_load_address} ${devicetree_image} && " \

                 "bootm${kernel_load_address} - ${devicetree_load_address} ; " \

其中’-’的作用就是告訴u-boot和內核沒有ramdisk文件系統,所以在啓動的時候就不會加載它。

5.加載zedboard配置文件

$ exportPATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH

$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_zed_config

6.編譯u-boot

$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-

7.將得到的可執行文件u-boot更改爲xilinx SDK可以識別的格式

$mv u-bootu-boot.elf

3.製作BOOT.BIN
在得到u-boot.elf和FSBL之後,我們就可以來製作BOOT.BIN,方法如下:

  1. 打開xilinx SDK2015.2

  2. 點擊菜單Xilinx Tools > Create Zynq Boot Image

  3. 首先設置BIF文件路徑。BIF文件用於指定當前boot.bin製作過程中用到的三個文件的路徑,相當於一個項目配置文件。
    在這裏插入圖片描述

  4. 設置好後我們先按順序添加三個文件,顯示FSBL文件

在這裏插入圖片描述

FSBL的在彈出對話框中的Partition type是bootloader,而bitstream(如果有)和uboot都是datafile。此處一定要注意,否則會出現問題。添加正確的話,修改輸出路徑中文件名爲boot.bin(也可以不修改)
在這裏插入圖片描述
點擊Create Image創建boot.bin,成功的話會在輸出路徑生成相應文件。

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