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,完成创建向导,最后进入如下界面

Zedboard上运行Linaro系统(二):生成BOOT.BIN_第1张图片

先创建一个Block Design,在本文中定义为ststem,完成后在Diagram视图中点击Add IP,在弹出的窗口中输入Zynq进行搜索,在结果中选择第一个ZYNQ7 Processing System,点击Run BlockAutomation完成自动连线,界面如下:


Zedboard上运行Linaro系统(二):生成BOOT.BIN_第2张图片

接下来我们取消一些不需要的部分。

首先双击ZYNQ进行自定义配置,首先点击Clock Configuration,展开PL Fabric Clocks,取消FCLK_CLK0。

Zedboard上运行Linaro系统(二):生成BOOT.BIN_第3张图片

取消之后Diagram中的FCLK_CLK0会消失。

另外,我们要取消如下引脚

Zedboard上运行Linaro系统(二):生成BOOT.BIN_第4张图片

对于TTC,我们点击如下部分,取消掉TTC

Zedboard上运行Linaro系统(二):生成BOOT.BIN_第5张图片

点击上图的红框部分,进入如下界面

Zedboard上运行Linaro系统(二):生成BOOT.BIN_第6张图片

对于AXI GP0,我们点击如下红框部分

Zedboard上运行Linaro系统(二):生成BOOT.BIN_第7张图片

取消掉AXI GP0 interface。

用同样的方法取消QSPI,ENET0。点击OK完成,结果如下所示

Zedboard上运行Linaro系统(二):生成BOOT.BIN_第8张图片

回到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目标文件,如下图所示

Zedboard上运行Linaro系统(二):生成BOOT.BIN_第9张图片

至此,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,成功的话会在输出路径生成相应文件。

你可能感兴趣的:(linux,移植,zynq)