目录

  • 概述
  • 一、使用SDK生成设备树文件
  • 1.开发环境设置
  • 2.生成设备树
  • 二、使用SDK生成FSBL文件
  • 三、交叉编译环境搭建
  • 四、编译u-boot、kernel、device-tree
  • 五、BOOT.BIN文件生成
  • 1.安装bootgen-xlnx
  • 2.生成BOOT.BIN
  • 六、启动开发板
  • 七、相关下载连接


概述

在Linux系统移植中,设备树文件,FSBL,BOOT.BIN等文件的生成需要依赖Petalinux工具,本文将在不依赖Petalinux工具的情况下移植linux系统。

一、使用SDK生成设备树文件

Vivado SDK下即可生成设备树文件,而无需依赖Petalinux工具。

1.开发环境设置

1.首先下载device-tree-xlnx-xilinx-v2018.3.zip

2.将解压的device-tree-xlnx-xilinx-v2018.3文件夹拷贝到xilinx安装目录下的SDK\2018.3\data\embeddedsw\devicetree\bsp文件下,并重命名为device-tree-xlnx_v2018_3。

3.在SDK中打开Xilinx > Repositories,如下图所示:

coreMark linux移植 如何移植linux_linux

4.按照如下步骤,在Local Repositories中添加刚才的SDK\2017.4\data\embeddedsw\devicetree\bsp\device-tree-xlnx_v2018_3

路径并点击OK。

coreMark linux移植 如何移植linux_设备树_02

2.生成设备树

1.点击菜单File > New > Board Support Package。

coreMark linux移植 如何移植linux_源文件_03


2.创建设备树工程。

coreMark linux移植 如何移植linux_coreMark linux移植_04


3.新建工程后会自动编译。pcw.dtsi、pl.dtsi、system-top.dts、zynq-7000.dtsi这四个文件即需要的四个设备树文件。

coreMark linux移植 如何移植linux_设备树_05


4.修改system-top.dts为如下内容:

/dts-v1/;
#include "zynq-7000.dtsi"
#include "pl.dtsi"
#include "pcw.dtsi"
/ {
	chosen {
		bootargs = "earlycon";
		stdout-path = "serial0:115200n8";
	};
	aliases {
		ethernet0 = &gem0;
		serial0 = &uart1;
		spi0 = &qspi;
	};
	memory {
		device_type = "memory";
		reg = <0x00000000 0x40000000>;
	};
	usb_phy0: phy0@e0002000 {
 		compatible = "ulpi-phy";
 		#phy-cells = <0>;
 		reg = <0xe0002000 0x1000>;
 		view-port = <0x0170>;
		drv-vbus;
	};
};
&gem0 {
	local-mac-address = [00 0a 35 00 00 00];
};
&qspi {
	#address-cells = <1>;
	#size-cells = <0>;
	flash0: flash@0 {
		compatible = "n25q512a","micron,m25p80";
		reg = <0x0>;
		#address-cells = <1>;
		#size-cells = <1>;
		spi-max-frequency = <50000000>;
		partition@0x00000000 {
			label = "boot";
			reg = <0x00000000 0x00500000>;
		};
		partition@0x00500000 {
			label = "bootenv";
			reg = <0x00500000 0x00020000>;
		};
		partition@0x00520000 {
			label = "kernel";
			reg = <0x00520000 0x00a80000>;
		};
		partition@0x00fa0000 {
			label = "spare";
			reg = <0x00fa0000 0x00000000>;
		};
	};
};
&usb0 {
	dr_mode = "otg";
	usb-phy = <&usb_phy0>;
};

二、使用SDK生成FSBL文件

FSBL文件即zynq启动引导文件,Linux系统所需的FSBL文件与启动zynq裸机时相同,SDK即可创建。

1.点击菜单File > New > Application Project。

coreMark linux移植 如何移植linux_linux_06


2.设置工程名称为FSBL。

coreMark linux移植 如何移植linux_设备树_07


3.选择Zynq FSBL。

coreMark linux移植 如何移植linux_源文件_08


4.等待工程编译完成后,在/FSBL/Debug目录下会生成FSBL.elf文件。

coreMark linux移植 如何移植linux_coreMark linux移植_09

三、交叉编译环境搭建

Petalinux自带arm-linux-gnueabihf-gcc工具,不安装Petalinux则需要单独安装arm-linux-gnueabihf-gcc工具。

1.使用如下命令安装依赖的库:

sudo apt-get install gcc make libncurses5-dev libssl-dev flex bison gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev

2.下载gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
3.使用如下命令将gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz解压到/usr/lib/gcc目录下:

sudo tar -xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz -C /usr/lib/gcc

4.打开用户目录下的.bashrc,在文件最后添加如下内容:

export PATH=/usr/lib/gcc/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin:$PATH

5.打开新的终端或使用如下命令更新环境变量:

source .bashrc

6.使用如下命令查看arm-linux-gnueabihf-gcc是否安装成功:

arm-linux-gnueabihf-gcc -v

命令运行结果如下:

coreMark linux移植 如何移植linux_coreMark linux移植_10

四、编译u-boot、kernel、device-tree

1.按照Linux系统移植中的步骤,添加设备树文件文件到u-boot与kernel源文件中,修改zynq-common.h和zynq_zc70x.h配置文件。
2.进入u-boot源文件目录下运行如下命令配置u-boot,编译源文件:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zed_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j10

3.进入kernel源文件目录运行如下命令配置kernel,编译源文件、设备树文件:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j10
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb

五、BOOT.BIN文件生成

1.安装bootgen-xlnx

使用如下命令安装bootgen-xlnx:

sudo apt-get install bootgen-xlnx

2.生成BOOT.BIN

1.新建bootgen.bif并输入如下内容:

//arch = zynq; split = false; format = BIN
the_ROM_image:
{
	[bootloader]/home/lgd/work/FSBL/FSBL.elf
	/home/lgd/work/u-boot/u-boot
}

2.使用如下命令创建BOOT.BIN文件:

bootgen -arch zynq -image bootgen.bif -o BOOT.BIN -w on

六、启动开发板

1.将生成的BOOT.BIN文件复制到SD分区1中。
2.将编译生成的zImage文件复制到tftpboot目录下。
3.将编译生成的system-top.dtb复制到tftpboot目录下,并更名为system.dtb。
4.将Vivado工程目录下project.runs\impl_1中的design_1_wrapper.bit文件复制到tftpboot中,并更名为system.bit。
5.继续使用Linux系统移植中解压到/home/lgd/nfs/linux目录下的根文件系统。
6.依据Linux系统移植中启动开发板的步骤即可启动开发板。