在 ZYNQ Linux 系统中将 PL(可编程逻辑)的 Bit 文件关联通常有两种主要方式:设备树覆盖(Device Tree Overlay)和使用 Xilinx 提供的 Petalinux 工具链。以下是详细的步骤和方法:
方法一:使用设备树覆盖(Device Tree Overlay)
这是在运行时动态加载 Bit 文件的推荐方法,无需重启系统。
1. 准备 Bit 文件
首先,需要将 Bit 文件转换为 DTBO(Device Tree Blob Overlay)格式:
bash
# 将Bit文件转换为.tcl脚本
bootgen -arch zynqmp -image <your_hw_definition>.hdf -w -process_bitstream bin
# 生成.dtbo文件
dtc -I dts -O dtb -o pl.dtbo pl.dts
2. 配置设备树
在主设备树中添加对覆盖的支持:
dts
fragment@0 {
target-path = "/amba_pl";
__overlay__ {
#address-cells = <1>;
#size-cells = <1>;
compatible = "xlnx,pl";
ranges;
};
};
3. 加载覆盖
在 Linux 中使用fdtput或libfdt库加载 DTBO:
bash
# 加载DTBO到/sys/kernel/config/device-tree/overlays/pl
mkdir -p /sys/kernel/config/device-tree/overlays/pl
cat pl.dtbo > /sys/kernel/config/device-tree/overlays/pl/dtbo
方法二:使用 Xilinx 提供的工具链(如 Petalinux)
这是静态加载 Bit 文件的方法,通常在系统启动时完成。
1. 创建 BOOT.BIN
将 Bit 文件打包到 BOOT.BIN 中:
bash
# 创建BOOT.BIN
bootgen -image <your_bif_file>.bif -o i BOOT.BIN
2. 修改 U-Boot 环境变量
在 U-Boot 中设置 PL 初始化命令:
bash
# 在U-Boot命令行中添加
setenv fpga_load_script "fpga load 0 ${bootdir}/system.bit; dcache flush"
setenv bootcmd "run fpga_load_script; bootm ${kernel_addr_r}"
saveenv
3. 验证加载
在 Linux 中通过cat /sys/class/fpga_manager/fpga0/state检查状态。
方法三:使用fpgautil工具(Xilinx Petalinux 工具链)
这是一种简化的动态加载方法:
bash
# 安装fpgautil
petalinux-package --toolchain
# 加载Bit文件
fpgautil -b <your_bitfile>.bit
注意事项
- 驱动支持:确保 Linux 内核已启用
CONFIG_FPGA_MANAGER和CONFIG_FPGA_DFL。 - 权限问题:动态加载需要
root权限。 - 依赖关系:Bit 文件需与设备树节点匹配,否则可能导致设备无法识别。
- 兼容性:Bit 文件版本需与 PS(处理系统)的硬件定义一致。
示例代码
以下是一个简单的 Python 脚本,用于在运行时加载 Bit 文件:
python
运行
import os
def load_bitstream(bitfile_path):
# 检查文件是否存在
if not os.path.exists(bitfile_path):
print(f"Error: {bitfile_path} not found!")
return False
# 写入Bit文件到fpga_manager
try:
with open("/sys/class/fpga_manager/fpga0/firmware", "w") as f:
f.write(os.path.basename(bitfile_path))
print(f"Successfully loaded {bitfile_path}")
return True
except Exception as e:
print(f"Error loading bitstream: {e}")
return False
# 使用示例
if __name__ == "__main__":
load_bitstream("/lib/firmware/my_design.bit")
验证方法
加载后,可以通过以下命令检查 PL 状态:
bash
# 查看当前加载的Bit文件
cat /sys/class/fpga_manager/fpga0/name
# 查看PL资源使用情况
cat /sys/kernel/debug/clk/clk_summary
通过以上方法,你可以灵活地在 ZYNQ Linux 系统中关联和加载 PL 的 Bit 文件。根据实际需求选择静态加载(启动时)或动态加载(运行时)方式。
1万+

被折叠的 条评论
为什么被折叠?



