搭建驱动开发使用的 ZYNQ 镜像

创建Petalinux工程

准备 xsa 文件

设置 petalinux 工作环境

source settings.sh

创建 petalinux 工程

petalinux-create -t project --template zynq -n ZYNQ-driver
-t project 指定了要创建的项目类型
--template zynq 指定了项目模板为 zynq
-n ZYNQ-driver 指定了新项目的名称,即 ZYNQ-driver

导入 xsa 文件

cd ZYNQ-driver
petalinux-config --get-hw-description ../zynq7100/

注:
后面更新 vivado 工程的时候,只需要从 vivado 工程中导出 xsa 文件,并在该 Petalinux 工程下使用
petalinux-config --get-hw-description <xsa文件路径>
命令重新配置即可。

petalinux 工程配置

xsa 文件导入成功之后会自动弹出 petalinux 工程配置窗口

如果配置过后想再次可以运行命令 petalinux-config 来配置

修改根文件存放位置

进入
Image Packaging Configuration
---> Root filesystem type (INITRD) 配置选项
将其更改为 EXT4 (SD/eMMC/SATA/USB)

配置本地 sstate

为提高 PetaLinux/Yocto 的编译速度,配置本地 sstate-cache

进入
Yocto Settings
—> Local sstate feeds settings
—> local sstate feeds url

我的本地 sstate-cache 路径如下

/home/yz/tools/petalinux/sstate/sstate_arm_2020.2

进行配置,路径指定到 /arm 文件夹下

取消 Enable Network sstate feeds 使能

配置本地 downloads

进入
Yocto Settings
—> Add pre-mirror url

删除原来的内容,添加 downloads 包文件路径
添加格式为 file://<路径>
我的路径为 file:///home/yz/tools/petalinux/downloads/downloads

返回到 Yocto Settings
使能 Enable BB NO NETWORK

ERROR: qemu-xilinx-native

编译时遇到 qemu-xilinx-system-native 包获取失败,如下图所示:
在这里插入图片描述
解决办法:
进入 Petalinux 工程,编辑工程下的 project-spec/meta-user/conf/petalinuxbsp.conf 文件,在文件末尾添加如下内容:

PREMIRRORS_prepend = " \
git://.*/.* file:///home/yz/tools/petalinux/downloads/downloads \n \
gitsm://.*/.* file:///home/yz/tools/petalinux/downloads/downloads \n \
ftp://.*/.* file:///home/yz/tools/petalinux/downloads/downloads \n \
http://.*/.* file:///home/yz/tools/petalinux/downloads/downloads \n \
https://.*/.* file:///home/yz/tools/petalinux/downloads/downloads \n"

文件中file:///home/yz/tools/petalinux/downloads/downloads 要与 pre-mirror url 中 downloads 包文件路径相同
在这里插入图片描述

这里我只进行了简单地配置
详细配置本地 sstate 和 downloads 推荐看下这个大佬的博客
整合Xilinx PetaLinux工程编译和Open Source U- Boot/Linux编译

到这里 Petalinux 工程就配置好了

生成 BOOT.BIN

编译 fsbl
petalinux-build -c bootloader
编译时间非常非常长

编译 uboot
petalinux-build -c u-boot

生成 BOOT.bin
petalinux-package --boot --fsbl --u-boot --dtb no --force
--dtb no 把 dtb 文件除去

BOOT.BIN 包含 zynq_fsbl.elf 和 u-boot.elf 两个文件,没有包含 bit 文件。由于我们不再需要对这两个文件进行更改,所以无论是编写 Linux 驱动程序还是修改 Vivado 工程,都不需要再修改 BOOT.BIN 文件

生成 boot.scr

执行 petalinux-build 命令编译工程
也需要好一会

编译完成后,找到 boot.scr 文件
cd images/linux

修改 boot.scr

复制 boot.scr 并命名为 boot.cmd.default
cp boot.scr boot.cmd.default

打开 boot.cmd.default 文件,将光标移动到第一行,输入 dd 命令删除第一行,删除后如下图所示

然后将第 19 行和第 20 行内核镜像名 uImage 改成 zImage
第 30 行 bootm 改成 bootz

接下来在第 29 行添加 system.bit 的加载和启动命令,命令如下:

		if test -e ${devtype} ${devnum}:${distro_bootpart} /system.bit; then
			fatload ${devtype} ${devnum}:${distro_bootpart} 0x00800000 system.bit; 
			fpga loadb 0 ${fileaddr} ${filesize}
		fi

添加后如下图所示

运行如下命令重新生成 boot.scr 文件
mkimage -c none -A arm -T script -d boot.cmd.default boot.scr

编译内核

准备 Linux 内核源码

使用 Xilinx 官方 2020.2 版本内核源码
将源码放在 ~/workspace/kernel-driver 目录下

添加设备树文件

  • 将工程文件夹 components/plnx_workspace/device-tree/device-tree 目录下 pl.dtsipcw.dtsisystem-conf.dtsisystem-top.dtszynq-7000.dtsi 五个设备树文件直接复制到内核源码 arch/arm/boot/dts 目录下

cd ~/workspace/zynq/ZYNQ-driver
cd components/plnx_workspace/device-tree/device-tree

cp pl.dtsi pcw.dtsi system-conf.dtsi system-top.dts zynq-7000.dtsi ~/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/arch/arm/boot/dts/

  • 将工程 project-spec/meta-user/recipes-bsp/device-tree/files 目录下设备树文件 system-user.dtsi 复制到内核源码 arch/arm/boot/dts 目录下
cd ~/workspace/zynq/ZYNQ-driver/
cd project-spec/meta-user/recipes-bsp/device-tree/files/
cp system-user.dtsi ~/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/arch/arm/boot/dts/
  • 修改 arch/arm/boot/dts 目录下 Makefile 文件
    将添加后的设备树顶层文件放到 Makefile 中
cd ~/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/arch/arm/boot/dts/
vim Makefile

在这里插入图片描述

使用 Petalinux 的交叉编译工具链

设置 SDK 环境变量

defconfig 配置

进入内核源码根目录
cd ~/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/
在内核源码根目录下执行如下命令
make xilinx_zynq_defconfig
执行结果如下图所示

menuconfig 配置

执行命令
make menuconfig
进入配置窗口

配置以太网

进入 Device Drivers

进入 Network device support

进入 PHY Device support and infrastructure

勾选 Micrel PHYs

编译内核

make -j8
在这里插入图片描述
在这里插入图片描述

编译根文件系统

进入工程文件夹下
cd ~/workspace/zynq/ZYNQ-driver
配置根文件系统
petalinux-config -c rootfs
我们使用默认配置
编译根文件系统
petalinux-build -c rootfs

启动开发板

制作 SD 启动卡

一个分区使用 FAT32 文件系统,用于放置启动镜像文件,另一分区使用 EXT4 文件系统,用于存放根文件系统

制作好后使用 df -Th 命令查看 SD 卡分区信息

拷贝镜像文件到 FAT 分区

文件文件路径
BOOT.BINimages/linux
boot.scrimages/linux
system.bitimages/linux
system-top.dtblinux-xlnx-xlnx_rebase_v5.4_2020.2/arch/arm/boot/dts
zImagelinux-xlnx-xlnx_rebase_v5.4_2020.2/arch/arm/boot
cd ~/workspace/zynq/ZYNQ-driver/
cd images/linux/
cp BOOT.BIN boot.scr system.bit /media/yz/BOOT/

cd ~/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/
cp arch/arm/boot/dts/system-top.dtb /media/yz/BOOT/
cp arch/arm/boot/zImage /media/yz/BOOT/

将 system-top.dtb 重命名为 system.dtb
cd /media/yz/BOOT/
mv system-top.dtb system.dtb

最终查看文件如下
在这里插入图片描述

将根文件系统解压到 EXT4 分区

进入工程文件目录
cd ~/workspace/zynq/ZYNQ-driver/
进入到 rootfs.tar.gz 压缩包文件所在目录 images/linux
cd image/linux/
执行解压命令
sudo tar -xzf rootfs.tar.gz -C /media/yz/rootfs
执行 sync 命令将数据同步到 SD 卡中
sync
在这里插入图片描述

启动开发板

在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值