Zynq

您所在的位置:网站首页 vivado生成hdf Zynq

Zynq

2024-07-10 16:06| 来源: 网络整理| 查看: 265

开发板:Zynq7030数据采集板 PC平台:Ubuntu-18.04 + MobaXterm 开发环境:Xilinx Vivado + SDK -18.3 交叉编译工具:arm-linux-gnueabihf- 学习目标:生成 BOOT.bin 文件

一、下载u-boot源码

在第一篇文章Zynq-7000系列之linux开发学习笔记:开发前准备(一)中已经提供过u-boot的下载链接,这里再提供一下,方便中途看本文章的人进行下载,链接如下: u-boot 2018.3 :https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2018.3 下载完u-boot源码后,将文件解压到相应目录,我这里还是解压到前几篇文章使用的目录。进到目录可以看到如下的文件结构:

claude1009@ubuntu:~/xc7030$ cd u-boot-xlnx-xilinx-v2018.3/ claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ ls api config.mk drivers include MAINTAINERS scripts arch configs dts Kbuild Makefile snapshot.commit board disk env Kconfig net test cmd doc examples lib post tools common Documentation fs Licenses README

在这里插入图片描述

二、编译u-boot

首先我们要设置好交叉编译工具。这里是一个比较坑的一点,因为新版的SDK自动安装交叉编译工具,并且更新为 arm-linux-gnueabihf- ,已不是之前的 arm-xilinx-linux-gnueabi- 了。 这里一定要注意。使用旧版的软件时,比如2015.3左右版本的软件 ,就需要安装 arm-xilinx-linux-gnueabi- 交叉编译工具;而和我同样使用2018.3版本软件的同学,就可以不用管了,因为安装 Vivado时已经自动安装好了。现在有很多文章还都是旧的编译器,使用旧的命令编译就会显示没有命令。 这里先设置好环境变量,就可以看到有如下的交叉编译工具,操作如下:

claude1009@ubuntu:~$ source ./Xilinx/SDK/2018.3/settings64.sh claude1009@ubuntu:~$ export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- claude1009@ubuntu:~$ ar ar arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-size arm-none-eabi-gcc-ranlib armr5-none-eabi-addr2line armr5-none-eabi-gcov-tool arch arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-strings arm-none-eabi-gcov armr5-none-eabi-ar armr5-none-eabi-gdb arecord arm-linux-gnueabihf-gcc-ranlib arm-linux-gnueabihf-strip arm-none-eabi-gcov-dump armr5-none-eabi-as armr5-none-eabi-gprof arecordmidi arm-linux-gnueabihf-gcov arm-none-eabi-addr2line arm-none-eabi-gcov-tool armr5-none-eabi-c++ armr5-none-eabi-ld arm2hpdl arm-linux-gnueabihf-gcov-dump arm-none-eabi-ar arm-none-eabi-gdb armr5-none-eabi-c++filt armr5-none-eabi-ld.bfd arm-linux-gnueabihf-addr2line arm-linux-gnueabihf-gcov-tool arm-none-eabi-as arm-none-eabi-ld armr5-none-eabi-cpp armr5-none-eabi-nm arm-linux-gnueabihf-ar arm-linux-gnueabihf-gdb arm-none-eabi-c++ arm-none-eabi-ld.bfd armr5-none-eabi-elfedit armr5-none-eabi-objcopy arm-linux-gnueabihf-as arm-linux-gnueabihf-gprof arm-none-eabi-c++filt arm-none-eabi-nm armr5-none-eabi-g++ armr5-none-eabi-objdump arm-linux-gnueabihf-c++ arm-linux-gnueabihf-ld arm-none-eabi-cpp arm-none-eabi-objcopy armr5-none-eabi-gcc armr5-none-eabi-ranlib arm-linux-gnueabihf-c++filt arm-linux-gnueabihf-ld.bfd arm-none-eabi-elfedit arm-none-eabi-objdump armr5-none-eabi-gcc-7.3.1 armr5-none-eabi-readelf arm-linux-gnueabihf-cpp arm-linux-gnueabihf-nm arm-none-eabi-g++ arm-none-eabi-ranlib armr5-none-eabi-gcc-ar armr5-none-eabi-size arm-linux-gnueabihf-elfedit arm-linux-gnueabihf-objcopy arm-none-eabi-gcc arm-none-eabi-readelf armr5-none-eabi-gcc-nm armr5-none-eabi-strings arm-linux-gnueabihf-g++ arm-linux-gnueabihf-objdump arm-none-eabi-gcc-7.3.1 arm-none-eabi-size armr5-none-eabi-gcc-ranlib armr5-none-eabi-strip arm-linux-gnueabihf-gcc arm-linux-gnueabihf-ranlib arm-none-eabi-gcc-ar arm-none-eabi-strings armr5-none-eabi-gcov arpd arm-linux-gnueabihf-gcc-7.3.1 arm-linux-gnueabihf-readelf arm-none-eabi-gcc-nm arm-none-eabi-strip armr5-none-eabi-gcov-dump arping

接着我们需要修改一些文件:首先进入到configs目录,复制一份zynq_zc702_defconfig的配置,并改名为 zynq_zc703_defconfig ,再将里面内容的zc702也修改为 zc703 ,然后保存即可。

claude1009@ubuntu:~/xc7030$ cd u-boot-xlnx-xilinx-v2018.3/ claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ ls api board common configs doc drivers env fs Kbuild lib MAINTAINERS net README snapshot.commit tools arch cmd config.mk disk Documentation dts examples include Kconfig Licenses Makefile post scripts test claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ cd configs/ claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3/configs$ cp zynq_zc702_defconfig zynq_zc703_defconfig claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3/configs$ vim zynq_zc703_defconfig CONFIG_ARM=y CONFIG_SYS_CONFIG_NAME="zynq_zc70x" CONFIG_ARCH_ZYNQ=y CONFIG_SYS_TEXT_BASE=0x4000000 CONFIG_SYS_MALLOC_F_LEN=0x800 CONFIG_IDENT_STRING=" Xilinx Zynq ZC703" CONFIG_SPL_STACK_R_ADDR=0x200000 CONFIG_DEFAULT_DEVICE_TREE="zynq-zc703" CONFIG_DEBUG_UART=y CONFIG_DISTRO_DEFAULTS=y CONFIG_FIT=y CONFIG_FIT_SIGNATURE=y CONFIG_FIT_VERBOSE=y

由于默认生成的u-boot默认使用 ramdisk 作为文件系统,而我们使用的是sd卡上的Linaro文件系统,所以还需修改一下 include/configs/zynq-common.h 这个文件,让u-boot在启动的时候不会试图去加载ramdisk image。该内容大概在271行:

claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ cd include/configs/ claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3/include/configs$ vim zynq-common.h "sdboot=if mmcinfo; then " \ "run uenvboot; " \ "echo Copying Linux from 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}; " \ "fi\0" \

修改完后,正常来说就可以进行make编译了。 但由于Zynq7030数据采集板采用的是Xilinx Zynq 7030 SoC,官方下载的u-boot源码里面并没有包含7030的配置文件以及设备树,所以才复制一份 zynq_zc703_defconfig 的配置。这里还需要再复制一份 zynq-zc703.dts 设备树文件,不然编译的时候会报错。这里要注意!!! 这里还要修改一下设备树 zynq-zc703.dts 里面的启动配置,默认是没有的。 需要自己添加 bootargs = “console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0” ,具体的操作如下:

claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ cd arch/arm/dts/ claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3/arch/arm/dts$ cp zynq-zc702.dts zynq-zc703.dts claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3/arch/arm/dts$ vim zynq-zc703.dts chosen { bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0"; stdout-path = "serial0:115200n8"; };

接下来回到u-boot主目录下,就可以开始进行编译了。

claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ make clean claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ make zynq_zc703_defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf # # configuration written to .config # claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ make

这时可能会出现如下的错误: 在这里插入图片描述 这个是openssl的依赖问题,安装支持即可。

claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ sudo apt-get install libssl-dev

安装完成后,再进行make就可以了。等待一段时间,就可以生成u-boot了,大功告成0.0.0.0 在这里插入图片描述 此时就可以在u-boot源码的主目录下看到生成的u-boot,然后将u-boot复制到和fsbl.elf同一个文件夹中,并改名为u-boot.elf。

claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ ls api cmd configs Documentation env include lib Makefile README spl tools u-boot.cfg u-boot.lds u-boot.srec arch common disk drivers examples Kbuild Licenses net scripts System.map u-boot u-boot.cfg.configs u-boot.map u-boot.sym board config.mk doc dts fs Kconfig MAINTAINERS post snapshot.commit test u-boot.bin u-boot.img u-boot-nodtb.bin claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ mv u-boot /home/claude1009/xc7030/uboot/ claude1009@ubuntu:~/xc7030/u-boot-xlnx-xilinx-v2018.3$ cd .. claude1009@ubuntu:~/xc7030$ cd uboot/ claude1009@ubuntu:~/xc7030/uboot$ mv u-boot u-boot.elf 三、生成BOOT.bin

至此,生成BOOT.bin所需要的三个文件: fsbl.elf 、 fsbl_wrapper.bit 、 u-boot.elf 已经准备好了。接下来只需在SDK中,将三个文件生成BOOT.bin即可。操作如下图所示: 在这里插入图片描述 添加三个文件,Create Image即可。 然后将生成的BOOT.bin复制到SD卡中,将SD卡插入到板子止,打开PC端的MobaXterm,设置好串口,然后连接USB线和电源线,即可看到如下输出信息: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3