本篇博文涵蓋了配置設(shè)備樹以將外設(shè)和第三方應(yīng)用詳細(xì)信息添加到 PetaLinux 工程中的基本流程。
在某些情況下,設(shè)備樹無法生成相關(guān)外設(shè)所需的所有必需信息,例如,以太網(wǎng) PHY 信息。
在此類情況下,您需要手動(dòng)將此板級信息和特定開發(fā)板信息添加到設(shè)備樹文件 (system-user.dtsi) 中。
PetaLinux 工具流程的頂級概況:
為 ZynqMP 平臺(tái)創(chuàng)建和配置 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 設(shè)置:
source
3. 創(chuàng)建 PetaLinux ZynqMP 工程:
a. BSP 流程:
petalinux-create -t project -s xilinx-zcu102-v2019.1-final.bsp
(此示例適用于 ZCU102 開發(fā)板)
注:BSP 文件需從china.xilinx.com 下載
b. 模板流程:
petalinux-create --type project --template zynqMP --name custom-project
4.導(dǎo)入HDF
a. petalinux-config--get-hw-description=
b. 將“DTG SETTINGS”中的 MACHINE_NAME 值更改為相應(yīng)的值。機(jī)器名稱可采用下列任一值: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
5. 保存并退出工程配置
6.運(yùn)行以下命令以構(gòu)建整個(gè)工程:
petalinux-build
PetaLinux 構(gòu)建流程概述:
成功構(gòu)建工程后,PetaLinux 會(huì)自動(dòng)生成各種設(shè)備樹文件,以及專用于評估的構(gòu)建鏡像或定制平臺(tái)。
以下是構(gòu)建 PetaLinux 工程時(shí)創(chuàng)建的各組件的樹形結(jié)構(gòu):
編輯設(shè)備樹文件以添加以太網(wǎng) PHY 信息的步驟
建議使用 system-user.dtsi文件來添加、修改和刪除各節(jié)點(diǎn)或值。
最后將添加系統(tǒng)用戶 DTSI,這表示其中包含的值優(yōu)先級較高。
您可通過在系統(tǒng)用戶 DTSI 中定義其它 DTSI 來覆蓋其中的任何現(xiàn)有值。
以下是將 PHY 信息添加到 PS 以太網(wǎng)節(jié)點(diǎn)的示例:
/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 inzynqmp.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>;
};
設(shè)備樹文件 system-user.dtsi 用途如下:
1. 添加節(jié)點(diǎn)
- 可將未寄存的節(jié)點(diǎn)或子節(jié)點(diǎn)添加到評估板的設(shè)備樹和 PCW 的設(shè)備樹中。
在以下示例中,我們可向 system-user.dtsi 添加信息,以便將原先使用 MIO (RGMII) 的 GEM0 更改為使用 EMIO (GMII) 并通過 GMII to RGMII IP 連接到另一個(gè) 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 = <ðernet_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>;
};
};
};
請?jiān)诖颂幪砑油獠?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>;
};
gmii_to_rgmii_0: gmii_to_rgmii_0@8 {
compatible = "xlnx,gmii-to-rgmii-1.0";
phy-handle = <&phy0>;
reg = <8>;
};
};
};
2. 添加節(jié)點(diǎn)內(nèi)容
可添加在評估板的設(shè)備樹和 PCW 的設(shè)備樹中未寄存的節(jié)點(diǎn)內(nèi)容(參數(shù))。請參閱以下示例中高亮的參數(shù):
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>;
};
};
};
3. 更改節(jié)點(diǎn)的內(nèi)容
您可更改在評估板的設(shè)備樹和 PCW 的設(shè)備樹中已寄存的參數(shù)值:
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
};
4. 刪除節(jié)點(diǎn)中的參數(shù)定義
可使用以下命令來刪除評估板的設(shè)備樹中已寄存的非必要參數(shù)行:/delete-property/
&gem0 {
/delete-property/ pinctrl-names;
/delete-property/ pinctrl-0;
/delete-property/ phy-reset-gpio;
/delete-property/ phy-reset-active-low;
};
5. 刪除節(jié)點(diǎn)
您可使用以下命令來刪除評估板設(shè)備樹中已寄存的非必要節(jié)點(diǎn)和子節(jié)點(diǎn):/delete-node/
&gem0 {
/delete-node/ ethernet-phy@7;// Delete Node
};
請注意,如果在別處引用某個(gè)節(jié)點(diǎn),那么刪除或更改該節(jié)點(diǎn)的值后,必須刪除該節(jié)點(diǎn)。
操作方式如下:
6.使整個(gè)驅(qū)動(dòng)定義無效化
您可禁用評估板設(shè)備樹和 PCW 設(shè)備樹中已啟用的驅(qū)動(dòng)定義。
驅(qū)動(dòng)定義在 pcw.dtsi 中激活,狀態(tài)為“okay”;
要將其禁用,請?jiān)趕ystem-user.dtsi 中寫入以下內(nèi)容:
&gem0 {
status = “disabled";
};
在 PetaLinux 中構(gòu)建第三方 Linux 應(yīng)用
執(zhí)行如下修改后,可將任意現(xiàn)有實(shí)用工具(例如:iperf3)添加到 PetaLinux 工程中
編輯
添加對應(yīng) Yocto 腳本可理解的實(shí)用程序名稱(例如,iperf3)。
例如:
IMAGE_INSTALL_append = " peekpoke"
IMAGE_INSTALL_append = " gpio-demo"
IMAGE_INSTALL_append = “ iperf3 ”<<= add this line
使用以下命令將此應(yīng)用作為用戶包添加到 rootfs 中:
Petalinux-config -c rootfs->User Packages -> [*] iperf3
構(gòu)建完成后,此應(yīng)用會(huì)顯示在 /usr/bin/
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
5090瀏覽量
97800 -
BSP
+關(guān)注
關(guān)注
1文章
88瀏覽量
26194
原文標(biāo)題:【開發(fā)者分享】使用 PetaLinux自定義ZynqMP平臺(tái)
文章出處:【微信號(hào):FPGA-EETrend,微信公眾號(hào):FPGA開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論