使用 PetaLinux 自定义 ZynqMP 平台

本文介绍如何使用PetaLinux工具配置设备树,以添加外设和第三方应用细节至工程项目。涵盖手动添加板级信息流程,构建过程及第三方Linux应用集成。

注:本文转自赛灵思中文社区论坛,源文链接在此。本文原作者为XILINX工程师。

以下为个人译文,仅供参考,如有疏漏之处,还请不吝赐教。

本篇博文涵盖了配置设备树以将外设和第三方应用详细信息添加到 PetaLinux 工程中的基本流程。

在某些情况下,设备树无法生成相关外设所需的所有必需信息,例如,以太网 PHY 信息。

在此类情况下,您需要手动将此板级信息和特定开发板信息添加到设备树文件 (system-user.dtsi) 中。

PetaLinux 工具流程的顶级概况:

 

ZynqMP 平台创建和配置 PetaLinux 工程的基本步骤

  • 在 china.xilinx.com 上可通过以下链接获取 Petalinux 安装程序和 BSP 文件:

https://china.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html

  • 使用以下命令获取 PetaLinux 设置:

        source <petalinux_installation_path>/settings.sh

  • 创建 PetaLinux ZynqMP 工程:

     
    1. BSP 流程:
      petalinux-create -t project -s xilinx-zcu102-v2019.1-final.bsp
      (此示例适用于 ZCU102 开发板)
      注:BSP 文件需从 china.xilinx.com 下载

       
    2. 模板流程:
      petalinux-create --type project --template zynqMP --name custom-project

       

  • 导入 HDF
    1. petalinux-config --get-hw-description=<JUST_PATH_OF_HDF/XSA_LOCATION>
    2. 将“DTG SETTINGS”中的 MACHINE_NAME 值更改为相应的值。
      机器名称可采用下列任一值:ac701-fullac701-litekc705-fullkcu105zc1275-revbzcu1285- revazc1751-dc1zc1751-dc2zc702zc706avnet-ultra96-rev1zcu100-revczcu102- rev1.0zcu104-revczcu106-revazcu111-revazedboardvcu118- rev2.0 sp701-rev1.0

  1. 保存并退出工程配置
  2. 运行以下命令以构建整个工程:
    petalinux-build

PetaLinux 构建流程概述:

成功构建工程后,PetaLinux 会自动生成各种设备树文件,以及专用于评估的构建镜像或定制平台。

以下是构建 PetaLinux 工程时创建的各组件的树形结构:

编辑设备树文件以添加以太网 PHY 信息的步骤

建议使用 system-user.dtsi 文件来添加、修改和删除各节点或值。

最后将添加系统用户 DTSI,这表示其中包含的值优先级较高。

您可通过在系统用户 DTSI 中定义其它 DTSI 来覆盖其中的任何现有值。以下是将 PHY 信息添加到 PS 以太网节点的示例:


/dts-v1/;

/include/ "system-conf.dtsi"

/ {

};

Describe outside this "};".

&gem0 {

  phy-handle = <&phy0>;

  ps7_ethernet_0_mdio: mdio {

   phy0: phy@7 {

    compatible = "marvell,88e1116r";

    device_type = "ethernet-phy";

    reg = <7>;

   };

  };

};

※ 模板中不存在的定义

/include/ "system-conf.dtsi"

/ {

 << Fill in here >>

};

 

Define gem0 in zynqmp.dtsi:

gem0: ethernet@ff0b0000 {

 compatible = "cdns,zynqmp-gem";

 status = "disabled";

 interrupt-parent = <&gic>;

 interrupts = <0 57 4>, <0 57 4>;

 reg = <0x0 0xff0b0000 0x0 0x1000>;

 clock-names = "pclk", "hclk", "tx_clk";

 #address-cells = <1>;

 #size-cells = <0>;

 #stream-id-cells = <1>;

 iommus = <&smmu 0x874>;

 power-domains = <&pd_eth0>;

};

 

 

设备树文件 system-user.dtsi 用途如下:

  • 添加节点 - 可将未寄存的节点或子节点添加到评估板的设备树和 PCW 的设备树中。
    • 在以下示例中,我们可向 system-user.dtsi 添加信息,以便将原先使用 MIO (RGMII) 的 GEM0 更改为使用 EMIO (GMII) 并通过 GMII to RGMII IP 连接到另一个 PHY 芯片:

       
zynq-7000.dtsi

gem0: ethernet@e000b000 {

  compatible = "cdns,zynq-gem", "cdns,gem";

  reg = <0xe000b000 0x1000>;

  status = "disabled";

  interrupts = <0 22 4>;

  clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>;

  clock-names = "pclk", "hclk", "tx_clk";

  #address-cells = <1>;

  #size-cells = <0>;

};


zc702.dtsi:

&gem0 {

  phy-handle = <&ethernet_phy>;

  pinctrl-names = "default";

  pinctrl-0 = <&pinctrl_gem0_default>;

  phy-reset-gpio = <&gpio0 11 0>;

  phy-reset-active-low;

  ethernet_phy: ethernet-phy@7 {

    reg = <7>;

    device_type = "ethernet-phy";

  };

};


pcw.dtsi:


&gem0 {

  phy-handle = <&phy0>;

  phy-mode = "gmii";

  status = "okay";

  xlnx,ptp-enet-clock = <0x69f6bcb>;

  ps7_ethernet_0_mdio: mdio {

    #address-cells = <1>;

    #size-cells = <0>;

    gmii_to_rgmii_0: gmii_to_rgmii_0@8 {

      compatible = "xlnx,gmii-to-rgmii-1.0";

      phy-handle = <&phy0>;

      reg = <8>;

    };

  };

};


请在此处添加外部 PHY 定义。注:gmii_to_rgmii IP 的定义已作说明。

 

system-user.dtsi:


&gem0 {

  ps7_ethernet_0_mdio: mdio {

    #address-cells = <1>;

    #size-cells = <0>;

    phy0: phy@1 {  // Add this node

      reg = <1>;

      microchip,led-modes = <1>;

    };

    gmii_to_rgmii_0: gmii_to_rgmii_0@8 {

      compatible = "xlnx,gmii-to-rgmii-1.0";

      phy-handle = <&phy0>;

      reg = <8>;

    };

  };

};


  • 添加节点内容
  • 可添加在评估板的设备树和 PCW 的设备树中未寄存的节点内容(参数)。

    请参阅以下示例中高亮的参数:

     
system-user.dtsi:

&gem0 {

  local-mac-address = [00 0a 35 00 1e 53];

  gmii2rgmii-phy-handle = <&gmii_to_rgmii_0>;

  xlnx,has-mido = <0x1>; // 添加如下内容

  ps7_ethernet_0_mdio: mdio {

    #address-cells = <1>;

    #size-cells = <0>;

    phy0: phy@1 { 

      reg = <1>;

      microchip,led-modes = <1>;

    };

    gmii_to_rgmii_0: gmii_to_rgmii_0@8 {

      compatible = "xlnx,gmii-to-rgmii-1.0";

      phy-handle = <&phy0>;

      reg = <8>;

    };

  };

};

 

  • 更改节点的内容
    • 您可更改在评估板的设备树和 PCW 的设备树中已寄存的参数值:
       
system-user.dtsi:
&gem0 {

  local-mac-address = [00 0a 35 00 1e 53];

  gmii2rgmii-phy-handle = <&gmii_to_rgmii_0>;

  xlnx,has-mido = <0x1>; 

  phy-handle = <&phy0>; // 更改此处值

  };

 

  • 删除节点中的参数定义
    • 可使用以下命令来删除评估板的设备树中已寄存的非必要参数行:/delete-property/ <parameter>
       
&gem0 {

  /delete-property/ pinctrl-names;

  /delete-property/ pinctrl-0;

  /delete-property/ phy-reset-gpio;

  /delete-property/ phy-reset-active-low;

  };


 

  • 删除节点
    • 您可使用以下命令来删除评估板设备树中已寄存的非必要节点和子节点:/delete-node/  <node_name>
&gem0 {

  /delete-node/  ethernet-phy@7; // Delete Node

};

  • 请注意,如果在别处引用某个节点,那么删除或更改该节点的值后,必须删除该节点。
    操作方式如下:
  • 使整个驱动定义无效化
    • 您可禁用评估板设备树和 PCW 设备树中已启用的驱动定义。
    • 驱动定义在 pcw.dtsi 中激活,状态为“okay”;
    • 要将其禁用,请在 system-user.dtsi 中写入以下内容:
&gem0 {

  status = “disabled";

};

PetaLinux 中构建第三方 Linux 应用

执行如下修改后,可将任意现有实用工具(例如:iperf3)添加到 PetaLinux 工程中

  1. 编辑 <project>/project-spec/meta-user/recipes-core/images/petalinux-image.bbappend
  2. 添加对应 Yocto 脚本可理解的实用工具名称(例如,iperf3)。
    例如:

     
IMAGE_INSTALL_append = " peekpoke"

IMAGE_INSTALL_append = " gpio-demo"

IMAGE_INSTALL_append = “ iperf3 ”    <<= 添加此行
  • 使用以下命令将此应用作为用户包添加到 rootfs 中:

    Petalinux-config -c rootfs -> User Packages -> [*] iperf3

  • 构建完成后,此应用会显示在 /usr/bin/

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值