目录
- 概述
- 一、使用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,如下图所示:
4.按照如下步骤,在Local Repositories中添加刚才的SDK\2017.4\data\embeddedsw\devicetree\bsp\device-tree-xlnx_v2018_3
路径并点击OK。
2.生成设备树
1.点击菜单File > New > Board Support Package。
2.创建设备树工程。
3.新建工程后会自动编译。pcw.dtsi、pl.dtsi、system-top.dts、zynq-7000.dtsi这四个文件即需要的四个设备树文件。
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。
2.设置工程名称为FSBL。
3.选择Zynq FSBL。
4.等待工程编译完成后,在/FSBL/Debug目录下会生成FSBL.elf文件。
三、交叉编译环境搭建
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
命令运行结果如下:
四、编译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系统移植中启动开发板的步骤即可启动开发板。