赞
踩
使用petalinux可根据XSA文件自动生成设备树
使用单独编译uboot、及kernel,自由度更高,但需手动修改设备树,本实验采用此方式
开发板 | ZYNQ PI extend R2 2022A版 (zynq7020) |
---|---|
开发主机 | Win11 and ubuntu20.04 |
IDE版本 | Xilinx Vitis IDE v2021.2.0 (64-bit) |
uboot源码 | Xilinx官方 |
linux源码 | Xilinx官方 |
模式 | 1 | 2 |
---|---|---|
JTAG | 0 | 0 |
QSPI | 1 | 0 |
SD | 1 | 1 |
xsa文件是硬件描述文件,旧版vivado为hdf;启动linux必备器件如下
打开vivado,创建工程;创建Block Design(框图设计)
添加ZYNQ7 Processing System处理系统
配置PS端器件
DDR
串口1
SD卡
QSPI
ETH
引脚分配
引脚模式
生成输出;封装PS端的IP,生成顶层文件
导出硬件描述文件,由于没有使用PL资源,所以不生成bitstream文件
为了不破坏主机环境,同时方便保存编译环境,所有编译在容器进行
创建容器,将主机**/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
下载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中
执行编译脚本
#!/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
获取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>;
};
修改后,启动成功-
debootstrap用于构建根文件系统,qemu-user-static用于arm仿真
apt install qemu-user-static
apt install debootstrap
创建目录,用于构建
mkdir rootfs
debootstrap --foreign --verbose --arch=armhf buster rootfs http://ftp2.cn.debian.org/debian
发行版信息
挂载系统相关目录到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/
sudo chroot rootfs
/debootstrap/debootstrap --second-stage --verbose
exit
LC_ALL=C:去除所有本地化的设置,”C”是系统默认的locale,”POSIX”是”C”的别名
切换根目录到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指定此分区
打开vitis,创建fsbl-for-download(app工程);选择之前步骤生成的XSA文件,一同创建platform工程
注意,platform工程bsp要包含xilffs库
打开vitis,创建boot镜像
添加fsbl和uboot,顺序如下;由于没使用fpga,所以没添加bit文件;得到BOOT.bin文件
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和启动命令的加载地址对应
烧录时,将拨码开关调为JTAG模式
插上含文件系统的SD卡,将拨码开关调为QSPI启动模式,启动成功
关注博主公众号,优质文章不断更新
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。