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
头的文件。
然后我们将刚才编译Uboot
的 u-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 编译及制作的主要内容,如果未能解决你的问题,请参考以下文章