取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

使用 PetaLinux 自定义 ZynqMP 平台

yolanda
Moderator
Moderator
0 0 509

本篇是由来自日本 PALTEK 公司的泷泽雅治 (Masaharu Takizawa) 撰写的特邀博文。

注意:本论坛博客所有内容皆来源于Xilinx工程师,如需转载,请写明出处作者及赛灵思论坛链接并发邮件至cncrc@xilinx.com,未经Xilinx及著作权人许可,禁止用作商业用途


本篇博文涵盖了配置设备树以将外设和第三方应用详细信息添加到 PetaLinux 工程中的基本流程。
在某些情况下,设备树无法生成相关外设所需的所有必需信息,例如,以太网 PHY 信息。
在此类情况下,您需要手动将此板级信息和特定开发板信息添加到设备树文件 (system-user.dtsi) 中。

PetaLinux 工具流程的顶级概况:

1.png

 

 

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

1. 在 china.xilinx.com 上可通过以下链接获取 Petalinux 安装程序和 BSP 文件:
https://china.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html

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

source <petalinux_installation_path>/settings.sh

3. 创建 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

4. 导入 HDF

             1. petalinux-config --get-hw-description=<JUST_PATH_OF_HDF/XSA_LOCATION>


             2. 将“DTG SETTINGS”中的 MACHINE_NAME 值更改为相应的值。
                 机器名称可采用下列任一值:ac701-full、ac701-lite、kc705-full、kcu105、zc1275-revb 、zcu1285-                                        reva、zc1751-dc1、zc1751-dc2、zc702、zc706、avnet-ultra96-rev1、zcu100-revc、zcu102- rev1.0、zcu104-                      revc、zcu106-reva、zcu111-reva、zedboard、vcu118- rev2.0 和 sp701-rev1.0

2.png

 

5. 保存并退出工程配置

6. 运行以下命令以构建整个工程:
petalinux-build

 

PetaLinux 构建流程概述:

3.png

 

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

4.png

 

编辑设备树文件以添加以太网 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>;
   };
  };
};
※ Definitions that do not exist in template
/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 用途如下:


1. 添加节点 - 可将未寄存的节点或子节点添加到评估板的设备树和 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 = <&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";
  };
};

 请在此处添加外部 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>;
    };
  };
};

2. 添加节点内容
 可添加在评估板的设备树和 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>; // Add these
  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>;
    };
  };
};

 

1. 更改节点的内容

您可更改在评估板的设备树和 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>; // Change the Value
  };

 

2. 删除节点中的参数定义

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

&gem0 {
  /delete-property/ pinctrl-names;
  /delete-property/ pinctrl-0;
  /delete-property/ phy-reset-gpio;
  /delete-property/ phy-reset-active-low;
  };

 

3. 删除节点

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

&gem0 {
  /delete-node/  ethernet-phy@7; // Delete Node
};

请注意,如果在别处引用某个节点,那么删除或更改该节点的值后,必须删除该节点。
操作方式如下:

 

5.png

 

4. 使整个驱动定义无效化

您可禁用评估板设备树和 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 ”    <<= add this line

3. 使用以下命令将此应用作为用户包添加到 rootfs 中:
Petalinux-config -c rootfs -> User Packages -> [*] iperf3
4. 构建完成后,此应用会显示在 /usr/bin/

参考资料:
• PetaLinux 工具文档
https://china.xilinx.com/support/documentation/sw_manuals/xilinx2019_2/ug1144-petalinux-tools-reference-guide.pdf
• PetaLinux Yocto 实用技巧
 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips
• 设备树描述
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842482/Device+Tree+Tips