zynq平台Uboot 编译及制作

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zynq平台Uboot 编译及制作相关的知识,希望对你有一定的参考价值。

说在开头,如果在某个过程中出现了包下载很慢或者下载出错,请通过科学上网后再进行操作

一、拷贝u-boot-xlnx.tar.gz并解压编译

解压 u-boot-xlnx.tar.gz 文件

tar -zxvf u-boot-xlnx.tar.gz -C ../



进入 u-boot-xlnx 后,里面有一个自动配置和编译 uboot 的脚本build.sh,直接执行 build.sh 即可。
注意:
【报错1】:

In file included from tools/aisimage.c:10:
include/image.h:880:12: fatal error: openssl/evp.h: 没有那个文件或目录
  880 | # include  <openssl/evp.h>
      |            ^~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [scripts/Makefile.host:108:tools/aisimage.o] 错误 1
make: *** [Makefile:1154:tools] 错误 2

【解决方案】:
安装 openssl 开发库,由于 xilinx 公司提供的 uboot 版本较老,依赖的是 s s l 1.0.0 ssl1.0.0 ssl1.0.0 的版本,需要安装这个版本库才可以顺利编译。(ubuntu20.04 安装较麻烦,需要增加新的源)
如果是Ubuntu18.04直接进入下面的安装操作即可

①添加源操作:

sudo vim /etc/apt/sources.list
添加 deb http://security.ubuntu.com/ubuntu bionic-security main
sudo apt update && apt-cache policy libssl1.0-dev

②安装操作:

sudo apt install libssl1.0-dev

【报错2】:

./tools/zynq-boot-bin.py -o boot.bin -u spl/u-boot-spl.bin
/usr/bin/env: “python2”: 没有那个文件或目录
make: *** [Makefile:1073:boot.bin] 错误 127
mv u-boot u-boot.elf

【解决方案】:

其实就是缺乏 python2,我们直接通过apt安装即可

sudo apt install python2.7
sudo ln -s /usr/bin/python2.7 /usr/bin/python2

现在再执行./build.sh就能编译成功uboot了,效果如下:

二、制作 zynq7000 的 uboot

使用 zynq_boot.tar.gz 里的工具生成,解压后可以看到 build.sh 里的信息,分析可知:

./bootgen -image bootimage.bif -o i boot.bin

bootgen 是生成 bin 文件的工具,其中依赖的文件是 .bif 文件

the_ROM_image:

        [bootloader]/home/mangata/zynq/zynq_boot/zynq_fsbl_0.elf
        /home/mangata/zynq/zynq_boot/system.bit
        /home/mangata/zynq/zynq_boot/u-boot.elf


注意文件的[bootloader]路径信息修改为自己的目录值即可,最后一项的 elf 文件就是上
一步生成的带 ELF 头的文件。

然后我们将刚才编译Ubootu-boot.elf拷贝一份放在zynq_boot目录下。

然后我们运行脚本./build.sh

【报错1】:

./bootgen: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

【解决方法】:

sudo apt install lib32stdc++6


然后再次输入./build.sh就能成功了,成功后会生成一个boot.bin的文件

三、制作SD卡

首先插入SD卡并且连接到虚拟机


如果有数据的话首先擦除数据,然后我们分成两个区:

第一个区:


并且选择FAT

第二个区:

剩下的部分全都作为第二个区,并且命名为rootfs,类型选择Ext4

然后我们将分区进行挂载即可:

我们在/media/mangata这个路径下就能看到我们挂载的U盘了(这里可以参考磁盘分区信息的内容部分)


我们现在将之前制作的boot.bin文件拷贝到SD卡的boot分区中:

cp boot.bin /media/mangata/boot

卸载SD卡,通过串口连接开发板,并且以SD卡启动系统,我们可以看到uboot启动成功了

然后查看当前的文件,可以发现已经有了文件系统

四、Linux 内核配置及移植

首先解压linux-kernel.tar.gz文件

tar -zxvf linux-kernel.tar.gz -C ../


2.进入解压后的目录,执行脚本

cd /home/mangata/zynq/linux-kernel
sudo ./build.sh

此时可能会报错:
"mkimage" command not found - U-Boot images will not be built
由于 zynq7000 的内核采用的是 uboot 启动的 uImage 格式,需要借助 uboot 编译生成的 mkimage 可执行文件。可以把这个工具拷贝到/bin 目录下。进入 uboot 源码目录下的 tools 目录,执行 sudo cp mkimage /bin然后再编译内核,拷贝 arch/arm/boot/uImage 到备用目录下。


3.解压设备树文件

tar -zxvf device_tree.tar.gz -C ../

4.制作设备树
device_tree 目录下有 build.sh 脚本,执行可得到设备树 dtb 文件,拷贝该文件到备用目录下。

将这 2 个文件,拷贝到 SD 卡的 boot 目录下,由于 uboot 启动还需要加载一个 ramdisk,需要将 uramdisk.image.gz 文件一并拷贝到 boot 目录下


进入rootfs文件夹并且将所有内容拷贝到SD卡的rootfs中:

sudo cp -ardf * /media/mangata/rootfs

卸载SD卡,然后放到开发板中以SD卡启动,运行ip addr可以看到如下结果:


为了使Ubuntu系统能够顺利与开发板相连接,我们先关闭虚拟机,并配置虚拟机新的网卡为桥接模式。

设置桥接的对象为有线连接


配置完成后,重启虚拟机。然后对以太网(ens38)进行配置。

配置该网卡的网络地址,如下:
a. 选择手动
b. 配置ipv4的地址


接着,在开发板上配置eth0网卡,为了保证在网络层连通,必须保证在同一个网段。如果能ping通ip,说明网络层没有问题

开始配置传输层,即安装好NFS服务。
a. 安装NFS服务
b. 在/etc/exports 目录的文件中按照示例给出的格式添上共享目录。

将该共享目录共享给板子中的mnt目录

完成NFS实现文件传输调试

以上是关于zynq平台Uboot 编译及制作的主要内容,如果未能解决你的问题,请参考以下文章

zynq中uboot的qspi启动报错及解决办法

linux编译u-boot时显示[arch/arm/dts/zynq-zc702.dtb]错误?

uboot怎么样才可以编译成自己的u-boot.bin?

xilinx-zynq教程5-Uboot

[原创]基于Zynq Linux环境搭建

zynq平台交叉编译器的安装