引子
ZCU104开发板的FMC LPC接口的电平与开发板VADJ电压相同,默认情况下该电压为1.2V,该电压不能满足我在实际使用中的需求(1.8V),因此在使用FMC时需要对VADJ进行设置才可以正常使用。这里主要针对JTAG模式和PYNQ模式时的VADJ电压永久设置方法进行介绍。
PS:本博客可以看作对该博客的补充。
JTAG
如果需要将ZCU104在JTAG模式下的VADJ修改为固定电压,请参考该pdf。
PYNQ
该提问中有提到在JTAG模式下已经将VADJ设置为1.8V,但是在使用PYNQ(SD卡启动模式)时VADJ的电压会变为1.2V,在实际使用PYNQ时我也遇到了相同的问题。为了解决该问题,一个最直接的思路就是在PYNQ的linux系统中对VADJ进行修改,但是根据该回答可以PYNQ无法做到这一点,但是其还提供了一种修改FSBL的思路,该博客提供了另外的两种思路,但是并没有具体说明应该怎么操作。
考虑到修改FSBL方法可以参考的资料较多,我使用了修改FSBL方法来改变VADJ。下面将对该方法进行介绍,如果不想看方法介绍,文末也提供了编译好的BOOT.BIN
,直接下载该文件替换即可。
1、环境准备
本次修改是基于PYNQ 3.0版本,因此Petalinux的版本为2022.1。
在进行Patch前需要先去这里下载Petalinux 2022.1和ZCU104对应的BSP文件,并使用下面的指令完成petalinux的安装:
mkdir -p <path_of_petalinux>
./petalinux-v2022.1-04191534-installer.run -d <path_of_petalinux> -p aarch64
2、对FSBL进行patch
首先参考How to patch the FSBL来生成Patch文件:
- 获取embeddedsw并签出对应的tag,标签可以在2022.1版Petalinux的Release Notes中查询到:
git clone https://github.com/Xilinx/embeddedsw.git
cd embeddedsw
git checkout xilinx_v2022.1
- 修改
embeddedsw/lib/sw_apps/zynqmp_fsbl/src/xfsbl_board.c
文件:
UStatus = XFsbl_ReadMinMaxEepromVadj(I2c0InstancePtr, &LpcMin, &LpcMax);
修改为:
UStatus = XFsbl_ReadMinMaxEepromVadj(I2c0InstancePtr, &LpcMin, &LpcMax);
LpcMin = 1800U;
LpcMax = 1800U;
- 在
embeddedsw
目录执行下面的指令生成patch文件fsbl.patch
:
git diff > fsbl.patch
3、创建新的petalinux工程
- 配置petalinux环境:
source <path_of_petalinux>/settings.sh
- 根据BSP文件创建petalinux工程,工程在后续重新编译时大概需要
60G
容量,因此需要保证硬盘空间足够:
mkdir -p <dir_of_petalinux_project>
cd <dir_of_petalinux_project>
petalinux-create -t project -s <dir_of_bsp>/xilinx-zcu104-v2022.1-04191534.bsp -n <project_name>
4、 将patch应用到新建的工程
2022.1中对petalinux project的FSBL进行的patch方法与旧版不同,参考How to Patch the FSBL in a PetaLinux Project:
cd <project_name>
mkdir -p ./project-spec/meta-user/recipes-bsp/fsbl/files
mkdir -p ./project-spec/meta-user/recipes-bsp/embeddedsw/files
cp <path_of_fsbl.patch> ./project-spec/meta-user/recipes-bsp/fsbl/files
cp <path_of_fsbl.patch> ./project-spec/meta-user/recipes-bsp/embeddedsw/files
vim ./project-spec/meta-user/recipes-bsp/fsbl/fsbl_%.bbappend
vim ./project-spec/meta-user/recipes-bsp/embeddedsw/fsbl-firmware_%.bbappend
上面新创建的fsbl_%.bbappend
和fsbl-firmware_%.bbappend
文件内容均为:
SRC_URI:append = " \
file://fsbl.patch \
"
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
#Add debug for FSBL(optional)
XSCTH_BUILD_DEBUG = "1"
#Enable appropriate FSBL debug or compiler flags
YAML_COMPILER_FLAGS:append = " -DXPS_BOARD_ZCU104"
5、重新生成BOOT.BIN
使用下面的指令重新生成BOOT.BIN
,该过程中需要下载大量和编译大量软件包,下载的数量量约为20GB
。
petalinux-build -x mrproper
petalinux-build -c kernel
petalinux-build -c bootloader
petalinux-package --boot --u-boot --force
编译完成后的BOOT.BIN
文件位于<project_name>/images/linux
文件夹中,将该文件替换掉SD卡PYNQ
分区中的同名文件即可,在替换前建议将SD卡中的BOOT.BIN
进行备份。使用该方法生成的BOOT.BIN
对于PYNQ v2.7和v3.0都能适用。
如果不想编译,该BOOT.BIN
也可以在这里下载。