1. 程式人生 > >Zedboard上執行Linaro系統(二):生成BOOT.BIN

Zedboard上執行Linaro系統(二):生成BOOT.BIN

製作Linaro系統所需要的檔案:

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

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

       3.linux核心映像檔案

       4.命名為devicetree.dtb的裝置樹檔案

5.Linaro檔案系統

轉載請註明,原作者:雅可 ,文章地址:http://blog.csdn.net/yake827/article/details/51980181

生成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 clonehttps://github.com/Xilinx/u-boot-xlnx.git

$ cd u-boot-xlnx

2.為了使專案更容易管理,統一採用的是xilinx-v2015.2這個版本

$ git checkout -bxilinx-v15.2

3.確保我們的ARM編譯器已經在我們的環境變數中,設定交叉編譯器字首

$ 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,成功的話會在輸出路徑生成相應檔案。