ZYNQ Linux 加载 PL的 Bit

在 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 中使用fdtputlibfdt库加载 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

注意事项

  1. 驱动支持:确保 Linux 内核已启用CONFIG_FPGA_MANAGERCONFIG_FPGA_DFL
  2. 权限问题:动态加载需要root权限。
  3. 依赖关系:Bit 文件需与设备树节点匹配,否则可能导致设备无法识别。
  4. 兼容性: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 文件。根据实际需求选择静态加载(启动时)或动态加载(运行时)方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值