ZYNQ linux开发环境搭建笔记

ZYNQ嵌入式Linux开发流程

使用petalinux可根据XSA文件自动生成设备树

使用单独编译uboot、及kernel,自由度更高,但需手动修改设备树,本实验采用此方式

  • 使用VIVADO创建板子硬件平台,生成XSA硬件描述文件
  • 编译uboot,得到uboot.elf文件
  • 使用VITIS创建FSBL模板APP工程
  • 使用fsbl、uboot.elf制作BOOT.BIN启动文件
  • 制作debian文件系统

开发环境

开发板ZYNQ PI extend R2 2022A版 (zynq7020)
开发主机Win11 and ubuntu20.04
IDE版本Xilinx Vitis IDE v2021.2.0 (64-bit)
uboot源码Xilinx官方
linux源码Xilinx官方

启动模式

模式12
JTAG00
QSPI10
SD11

1 制作xsa

xsa文件是硬件描述文件,旧版vivado为hdf;启动linux必备器件如下

  • 内存
  • 串口
  • 时钟
  • flash(可选)
  • 以太网(可选)

1.1 制作XSA文件步骤

打开vivado,创建工程;创建Block Design(框图设计)

添加ZYNQ7 Processing System处理系统

微信截图_20220430193920

配置PS端器件

DDR

微信截图_20220430194900

串口1

微信截图_20220430194538

SD卡

微信截图_20220430195718

QSPI

微信截图_20220430200207

ETH

引脚分配

微信截图_20220430202412

引脚模式

微信截图_20220430203753

生成输出;封装PS端的IP,生成顶层文件

微信图片编辑_20220430210007

导出硬件描述文件,由于没有使用PL资源,所以不生成bitstream文件

微信图片编辑_20220430210416

2 编译

为了不破坏主机环境,同时方便保存编译环境,所有编译在容器进行

2.1 制作编译容器

创建容器,将主机**/root/workspaces/挂载到容器/root/workspaces**目录,方便文件传输、保证删容不删库

docker run -it --name=zynq -v /root/workspaces/:/root/workspaces ubuntu /bin/bash

换源

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

2.2 编译uboot

下载uboot,检出xilinx-v2019.2版本

git clone https://github.com/Xilinx/u-boot-xlnx.git
git checkout xilinx-v2019.2

安装依赖

apt install make
apt install gcc
apt install bison
apt install flex
apt install ncurses-dev
apt install gcc-arm-linux-gnueabihf
apt install libssl-dev

使能CONFIG_OF_EMBED,使DTB集成到uboot中

微信截图_20220502144051

执行编译脚本

#!/bin/bash
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zc702_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j8

得到uboot文件,将其改名为uboot.elf

注意!制作UBOOT.BIN时,一定要将u-boot文件重命名为 u-boot.elf,以便vitis将其识别为可执行文件,否则它可能会被视为数据文件,造成偏移不对

编译工具,mkimage工具在制作uImage时会用到

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- tools

2.3 编译linux

获取xilinx提供的linux源码

git clone https://github.com/Xilinx/linux-xlnx.git

创建build.sh文件,执行编译

#!/bin/bash
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x8000 uImage -j8

启动命令

bootcmd=sf probe;sf read 0x4100000 0x100000 0x500000;sf read 0x4600000 0x600000 0x100000;bootm 0x4100000 - 0x4600000;
bootargs=root=/dev/mmcblk0p1 rootwait rw console=ttyPS0,115200

启动失败,错误为没mmcblk0p2设备;换pynq镜像启动,使用fdt命令查看pynq镜像的设备树,将sdhci0节点改为和pynq一致

&sdhci0 {
        status = "okay";
        xlnx,has-cd = <0x00000000>;
        xlnx,has-power = <0x00000000>;
        xlnx,has-wp = <0x00000000>;
};

修改后,启动成功-

2.4 构建(armhf平台)debian根文件系统

2.4.1 安装工具

debootstrap用于构建根文件系统,qemu-user-static用于arm仿真

apt install qemu-user-static
apt install debootstrap

创建目录,用于构建

mkdir rootfs
2.4.2 debootstrap第一阶段(下载)
debootstrap --foreign --verbose --arch=armhf  buster rootfs http://ftp2.cn.debian.org/debian
  • –-foreign:仅做初始化的解包。当目标架构和宿主机架构不一致时需要指定此选项。需要指定–second-stage。
  • –verbose:输出更多下载过程的信息
  • –arch:目标系统架构

发行版信息

2.4.4 配置rootfs

挂载系统相关目录到rootfs,相当于给文件系统提供kernel

sudo mount --bind /dev rootfs/dev/
sudo mount --bind /sys rootfs/sys/
sudo mount --bind /proc rootfs/proc/
sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/
2.4.5 debootstrap第二阶段(解包)
sudo chroot rootfs
/debootstrap/debootstrap --second-stage --verbose
exit

LC_ALL=C:去除所有本地化的设置,”C”是系统默认的locale,”POSIX”是”C”的别名

2.4.6 模拟运行及配置

切换根目录到rootfs,模拟arm上运行debian

sudo chroot rootfs

添加用户设置密码

adduser sammy

修改主机名

vim etc/hostname

安装软件

apt install vim net-tools

使用文件做swap分区

touch /var/swap
dd if=/dev/zero of=/var/swap bs=1M count=1024
mkswap /var/swap
swapon /var/swap

在文件/etc/fstab中添加

/var/swap swap swap defaults 0 0

卸载

sudo umount rootfs/sys/
sudo umount rootfs/proc/
sudo umount rootfs/dev/
sudo rm -rf rootfs/usr/bin/qemu-arm-static

根文件系统就制作完毕,放到SD卡分区,设置bootargs,root指定此分区

3 烧录

3.1 QSPI烧录UBOOT.bin

3.1.1 创建烧录工程

打开vitis,创建fsbl-for-download(app工程);选择之前步骤生成的XSA文件,一同创建platform工程

微信截图_20220502151254

注意,platform工程bsp要包含xilffs库

3.1.2 制作UBOOT.bin

打开vitis,创建boot镜像

微信图片编辑_20220502150313

添加fsbl和uboot,顺序如下;由于没使用fpga,所以没添加bit文件;得到BOOT.bin文件

微信截图_20220502225837

bif(启动信息文件)文件如下:

//arch = zynq; split = false; format = BIN
the_ROM_image:
{
    [bootloader]C:\Users\31082\Desktop\zynq\zynq_petaLinux_wrapper\zynq_fsbl\fsbl.elf
    C:\Users\31082\Desktop\zynq\img\u-boot.elf
    [offset = 0x100000]C:\Users\31082\Desktop\zynq\img\uImage
    [offset = 0x600000]C:\Users\31082\Desktop\zynq\img\zynq-zc702.dtb
}

注意!这里的offset和启动命令的加载地址对应

3.1.3 烧录UBOOT.bin

烧录时,将拨码开关调为JTAG模式

微信截图_20220502152118

插上含文件系统的SD卡,将拨码开关调为QSPI启动模式,启动成功

微信截图_20220503105117
关注博主公众号,优质文章不断更新
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

最好有梦想~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值