Zynq-7000系列之linux开发学习笔记:编译U-BOOT&生成BOOT.bin(五)

开发板: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线和电源线,即可看到如下输出信息:
在这里插入图片描述

  • 3
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
Zynq-7000系列linux开发学习笔记是一系列关于在Zynq7030数据采集板上进行Linux开发的文章。在这些文章中,作者提供了关于编译Linux内核、制作设备树、安装NFS等方面的指导和经验。在其中一篇文章中,作者遇到了在挂载NFS时出现的问题,提示"wrong fs type, bad option, bad superblock"等错误信息。作者还提供了Linux内核源码的下载链接以及开发环境的相关信息。整个学习笔记的目标是让开发板能够连接外网,并通过NFS挂载到虚拟机上运行一个helloworld程序。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Zynq-7000系列linux开发学习笔记:NFS配置与开发板联网(七)](https://blog.csdn.net/Claudedy/article/details/94591622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Zynq-7000系列linux开发学习笔记编译Linux内核和制作设备树(六)](https://blog.csdn.net/Claudedy/article/details/90760085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Claudedy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值