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,在本文中定义为system,完成后在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),
设置交叉编译器前缀:
$ export CROSS_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文件系统,所以在启动的时候就不会加载它。
(记得卡内存,卡内存主要方法:
1.修改include/configs/zynq_zed.h,更改下面一句:
#define CONFIG_SYS_SDRAM_SIZE (256 *1024 * 1024)
2.更改arch/arm/dts/zynq-zed.dts,更改为:
memory {
device_type = “memory”;
reg = <0x0 0x10000000>;
};

5.加载zedboard配置文件

$ export PATH=/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-boot u-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,成功的话会在输出路径生成相应文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值