赞
踩
上一节我们创建了我们的主工程文件,并且生成了bit-stream,加载了Xilinx SDK,接下来我们在SDK创建FSBL文件以及设备树。
FSBL是 ZYNQ 第一启动引导加载代码,它的主要任务就是初始化 DDR,并将用户代码(例如 U-Boot、bit 文件或者是 SDK裸机代码)从存储设备中拷贝到 DDR 中运行。
按照如下步骤:
·Open Vivado
·Export Hardware & Bitstream
·Launch Xilinx SDK
打开 Xilinx SDK后按照如下步骤创建FSBL:
Navigate to File > New > Application Project
Give the project a new name, like FSBL
Click Next
Select Zynq FSBL and click Finish
配置完成后,等待FSBL编译完成。生成的fsbl.elf文件在./fsbl/debug中。
工程导入SDK后,需要使用Xilinx Device Tree Tool 去建立设备树,请检查这个工具的版本。
配置设备数编译环境
mkdir device-tree-xlnx
cd device-tree-xlnx
sudo apt-get install device-tree-compiler
git clone https://github.com/Xilinx/device-tree-xlnx/archive/xilinx-v2018.3.tar.gz
tar -zxvf xilinx-v2018.3.tar.gz
在SDK中添加设备树资源文件
XIlinx Tools>Repositories
Add a global repository
Navigate to where you cloned the Xilinx/device-tree-xlnx
创建设备树
Select File>New>Board Support Package
Create a name for your project, e.g. device_tree_bsp_0
Select device_tree in the Board Support Package OS menu
Click Finish
在设备树的工程文件中使用下面的方式创建设备树:
dtc -I dts -O dtb -o devicetree.dtb system-top.dts
可以使用如下方式把设备树文件转换成人可读的文件
dtc -I dtb -O dts -o devicetree.dts devicetree.dtb
1、修改system-top.dts文件,主要修改了 bootargs 属性、添加了 model 属性、网口 0 的 MAC 地址以及给 qspi 进行了分区操作。
2、
以下三个文件是之后需要的:
1、把设备树文件复制到U-BOOT源码中;
将前面生成的设备树文件
pcw.dtsi、pl.dtsi、system-top.dts 、zynq-7000.dtsi
四个文件拷贝到 U-Boot 源码目录下的 arch/arm/dts 目录下
2、修改U-BOOT的Makefile 文件,arch/arm/dts/Makefile 文件中,找到dtb-$(CONFIG_ARCH_ZYNQ)这里,将 system-top.dtb(.dts 编译之后得到的就是.dtb 文件)添加上去,这样当 CONFIG_ARCH_ZYNQ 宏被选中的时候,system-top.dts 才会被编译进去。
3、修改UBOOT的配置文件,zynq-common.h 和 zynq_zc70x.h 都在 include/configs 目录下
zynq_zc70x.h文件:CONFIG_ZYNQ_I2C0 和 CONFIG_ZYNQ_EEPROM 宏定义给去掉
zynq-common.h 文件:
CONFIG_CPU_FREQ_HZ改为766666687
CONFIG_SF_DEFAULT_SPEED改为50000000
CONFIG_ENV_SIZE(环境变量大小),由(128 << 10)修改为 0x20000
CONFIG_ENV_OFFSET(环境变量存储位置偏移量),由 0xE0000 修改为 0x500000
4、defconfig 配置
在源码目录下执行如下指令:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zc702_defconfig
“ARCH=arm”指定了 u-boot 运行的机器架构,“CROSS_COMPILE=arm-linux-gnueabihf-”指定了交叉编译工具的前缀,交叉编译工具我们使用的是 xilinx 官方提供的,在我们安装 petalinux 的时候也安装了,在 petalinux 安装目录下的 tools/linux-i386 目录
5、menuconfig 图形化配置
在 U-Boot 源码目录下,执行下面这条命令进入到 menuconfig 图形化配置界面
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
配置如下:
Boot media --->[*] Support for booting from SD/EMMC
SPL / TPL --->[ ] Enable SPL
Command line interface --->
Memory commands --->[ ] eeprom - EEPROM subsystem
Device access commands --->[ ] i2c
Device Tree Control --->(system-top) Default Device Tree for DT control
// 将设备树设置为 system-top(也就是 system-top.dts)
Device Drivers --->
Serial drivers --->
[ ] Enable an early debug UART for debugging
配置完成之后保存退出,执行下面这条命进行编译:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j10
编译完成后会在当前文件夹下生产u-boot.bin文件。
如果不能识别编译器,则执行:
source /opt/pkg/petalinux/settings.sh
需要的三个文件: fsbl.elf, ocpoc_rev1.bit and uboot.bin。
1、进入XSDK工作环境
2、选择 Xilinx Tools -> Create Boot Image
3、设置两个文件的输出路径,路径中的“bootimage”是我们在 FSBL 目录下新建的文件夹。红色方框中的 BIF 是 Boot Image 的配置文件,BIN 是启动文件。
4、首先添加的是 FSBL,在 Partion type 一栏默认的文件类型为 bootloader,然后指定 FSBL.elf 所在的文件路径。
5、再次点击“Add”按钮,添加 FPGA 配置文件,Partion type 一栏的文件类型变成了 datafile,BIT 文件必须跟在 FSBL 后面,文件添加的顺序不能弄错。
6、然后点击“Add”按钮,添加u-boot.bin软件。
7 、点击 Create Image生成 boot.bin文件到指定的文件夹.
1、把设备树文件复制到内核源码中
这里我们直接将前面 U-Boot 源码 arch/arm/dts 目录下的那四个设备树文件(pl.dtsi、pcw.dtsi、system-top.dts 和 zynq-7000.dtsi)直接拷贝到内核源码目录下的arch/arm/boot/dts 目录中,不用进行修改。
2、修改makefile文件
同样我们也需要修改 arch/arm/boot/dts 目录下的 Makefile 文件,将设备树system-top.dts 添加上去
3、defconfig 配置
在内核源码目录下执行下面这条命令对内核进行 defconfig 配置:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig
4、defconfig 配置
这里我们暂时就不进行配置,以后有需要的时候再配,先保持默认!
5、编译内核
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j10
编译完成之后会在 arch/arm/boot/目录下生成一个名为 zImage 的内核镜像文件,后面我们在用。
6、编译设备树
内核与 u-boot 不同的是,U-Boot 的设备树默认是与内核一起编译的,并且产生的 dtb 文件已经与 U-Boot 镜像文件集成在一起了;在内核里边我们需要单独编译出设备树的 dtb 文件,前面已经将我们所需要的设备树文件拷贝到内核的 arch/arm/boot/dts 目录下了,接下来执行这条命令编译 system-top.dtb 文件:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb -j10
编译成功之后会在 arch/arm/boot/dts 目录下生成 system-top.dtb 文件。
1、新建一个 petalinux 工程
根文件系统我们直接使用 petalinux 进行编译即可,首先进入 petalinux 的安装目录,使用 petalinux-create 命令新建一个 petalinux 工程,如下:
petalinux-create --type project --template zynq --name ALIENTEK-ZYNQ
2、导入 hdf 硬件描述符
cd ALIENTEK-ZYNQ
petalinux-config --get-hw-description /home/zynq/hdf/Navigator_7010.sdk
在弹出来的配置界面中,我们不用进行任何配置,直接保存退出即可!等待它配置完成。完成之后产生的根文件系统压缩包在 images/linux 目录下。
因为我们要使用 SD 卡启动,并且 SD 卡会有一个 EXT4 格式的分区专门存放根文件系统,所以我们要使用压缩格式的根文件系统,例如 rootfs.tar.gz 或 rootfs.tar.bz2。
3、编译根文件系统
petalinux-build -c rootfs
1、先安装格式化管理软件:
sudo apt-get install gparted
sudo gparted
2、选择SD卡
在右上角选择正确的SD卡,不要选错。
3、删除所有分区
可以直接选择,右键删除. 有时候可能需要Unmount那个分区才能删除。
4、创建BOOT分区
创建第一个分区设定为如下属性:
New size(MiB): '100', File system: 'fat32', and Label: 'boot'.
5、创建EXT4分区
创建文件系统分区设定为如下属性:
Free space preceding(MiB): '0', Free space following(MiB): '0',
File system: 'ext4', and Label: 'rootFs'.
6、点击OK格式化内存卡完成
7、在加载文件之前,最好先重新插拔一次。
系统共分为如下几个文件
1、zImage(内核镜像,内核源码目录 arch/arm/boot/zImage)
2、system-top.dtb(内核设备树 dtb 文件,内核源码目录 arch/arm/boot/dts/system-top.dtb)
3、design_navigator_7010_wrapper.bit(pl 端 bitstream 文件,/home/zynq/hdf/Navigator_7010.sdk/design_navigator_7010_wrapper.bit)。
4、BOOT.BIN。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。