ZYNQ+Linux網(wǎng)口調(diào)試筆記(三):PL-ETH網(wǎng)絡(luò)接口調(diào)試
一、概述
在ZYNQ平臺(tái)上使用gigE Vision協(xié)議的網(wǎng)絡(luò)接口相機(jī),網(wǎng)絡(luò)接口的調(diào)試是項(xiàng)目成功的關(guān)鍵之一。本文將重點(diǎn)闡述PL(Processing Layer)側(cè)網(wǎng)口調(diào)試的步驟和注意事項(xiàng)。

二、調(diào)通PS側(cè)網(wǎng)口GEM0
PS側(cè)網(wǎng)口GEM0是Xilinx BSP默認(rèn)配置好的,通過(guò)簡(jiǎn)單的設(shè)置即可使用。這一步主要是確認(rèn)網(wǎng)絡(luò)接口的基本配置,確保網(wǎng)絡(luò)通信正常。
三、調(diào)通PS側(cè)網(wǎng)口GEM1
PS側(cè)網(wǎng)口GEM1的調(diào)試方法可以參考前一篇開(kāi)發(fā)筆記(一)。這一步是為了確保在ZYNQ平臺(tái)上擁有更多的網(wǎng)絡(luò)接口選擇,提高系統(tǒng)的靈活性和可靠性。
四、調(diào)通PL側(cè)網(wǎng)口

這是本文的重點(diǎn)。在PL側(cè),我們需要根據(jù)具體的硬件設(shè)計(jì)和配置進(jìn)行相應(yīng)的調(diào)試。根據(jù)《xapp1082》文檔,PL側(cè)的PHY支持1000Base-X和SGMII兩種配置。我們的項(xiàng)目使用的是1000Base-X的配置。我們需要按照這一配置進(jìn)行調(diào)試。
導(dǎo)入FPGA設(shè)計(jì)同事提供的hdf文件。在彈出的圖形界面中,進(jìn)入Subsystem AUTO Hardware Settings——Ethernet Settings——Primary Ethernet。確認(rèn)可以看到PL側(cè)網(wǎng)絡(luò)設(shè)備axi_ethernet_0,這表明hdf文件中已經(jīng)包含了必要的網(wǎng)口硬件信息。
在這里,我們默認(rèn)選擇ps7_ethernet_0,即使用GEM0作為首選網(wǎng)口。如果需要用到PL側(cè)網(wǎng)口,比如連接更多的網(wǎng)絡(luò)設(shè)備或者提高網(wǎng)絡(luò)性能,就需要對(duì)PL側(cè)網(wǎng)口進(jìn)行配置和調(diào)試。
五、驗(yàn)證Jumbo Frame特性和gigE Vision協(xié)議
在完成PL側(cè)網(wǎng)口的調(diào)試后,我們需要驗(yàn)證網(wǎng)口的Jumbo Frame特性,并在應(yīng)用層適配gigE Vision協(xié)議。這一步是為了確保網(wǎng)絡(luò)接口不僅能正常通信,還能滿足特定的項(xiàng)目需求,如傳輸大數(shù)據(jù)包等。

ZYNQ平臺(tái)的網(wǎng)絡(luò)接口調(diào)試是一個(gè)復(fù)雜但必要的過(guò)程。通過(guò)以上的步驟和注意事項(xiàng),我們可以更加高效地進(jìn)行調(diào)試,確保項(xiàng)目的順利進(jìn)行。啟用Xilinx AXI Ethernet驅(qū)動(dòng)指南
一、選擇驅(qū)動(dòng)配置
1. 進(jìn)入Device Drivers - Network device support
在這里,你需要選中Xilinx AXI Ethernet以及Xilinx Ethernet GEM(這是PS側(cè)網(wǎng)口的驅(qū)動(dòng))。確保這兩個(gè)選項(xiàng)都被正確啟用。
二、配置網(wǎng)絡(luò)支持

2. 進(jìn)入Networking support
隨后,選擇Random ethaddr if unset。這一設(shè)置是為了確保網(wǎng)絡(luò)設(shè)備的MAC地址在未被設(shè)定時(shí)能夠自動(dòng)隨機(jī)生成,避免地址沖突。
三、啟用PHY設(shè)備支持
3. 進(jìn)入Device Drivers - Network device support - PHY Device support and infrastructure
在這里,啟用Drivers for xilinx PHYs。這個(gè)選項(xiàng)是為了支持Xilinx的物理層設(shè)備,確保網(wǎng)絡(luò)通信的正常運(yùn)行。

四、禁用Xilinx AXI DMAS Engine
4. 進(jìn)入Device Drivers - DMA Engine Support
在DMA Engine Support選項(xiàng)中,禁用Xilinx AXI DMAS Engine(對(duì)應(yīng)的配置項(xiàng)名為 CONFIG_XILINX_DMA)。這一步是為了避免潛在的沖突和錯(cuò)誤。
五、注意事項(xiàng)與問(wèn)題排查
5. 設(shè)備樹(shù)節(jié)點(diǎn)的修改與文件路徑

注意:根據(jù)Xilinx Wiki的信息,設(shè)備樹(shù)節(jié)點(diǎn)的引用可能存在錯(cuò)誤(如&axi_ethernet),導(dǎo)致編譯報(bào)錯(cuò)。應(yīng)改為正確的引用,如&axi_ethernet_0。PL-ETH驅(qū)動(dòng)所在路徑為`
還需要注意以下幾點(diǎn):
(1)啟用ethtool和tcpdump進(jìn)行調(diào)試(非必需)。這些工具可以幫助你更好地監(jiān)控和診斷網(wǎng)絡(luò)問(wèn)題。
(3)上電后,使用ifconfig命令查看網(wǎng)口信息,確認(rèn)MAC地址與設(shè)置的一致,并能夠成功激活網(wǎng)口。你可以使用命令“ifconfig eth1 192.168.1.11 up”來(lái)測(cè)試。
(4)測(cè)試網(wǎng)絡(luò)通路。通過(guò)ping命令測(cè)試與目標(biāo)PC的連通性,如果成功,說(shuō)明網(wǎng)口工作正常。

(5)如果遇到Linux下eth1(即PL-ETH)的MAC地址錯(cuò)誤的問(wèn)題,需要檢查驅(qū)動(dòng)配置和設(shè)備樹(shù)設(shè)置,確保MAC地址的正確解析。如果在開(kāi)機(jī)時(shí)打印出錯(cuò)誤的MAC地址(如解析出的是GEM0的MAC地址),需要根據(jù)錯(cuò)誤提示進(jìn)行相應(yīng)的調(diào)整與修復(fù)。探索系統(tǒng)配置中的MAC地址與設(shè)備樹(shù)
一、關(guān)于local-mac-address的解析問(wèn)題
在我們對(duì)system-user.dtsi文件的試驗(yàn)中,即便不寫(xiě)入local-mac-address,系統(tǒng)仍然解析出的是GEM0的MAC地址。這一現(xiàn)象揭示了系統(tǒng)對(duì)于MAC地址解析的某種默認(rèn)機(jī)制。也就是說(shuō),即便在特定的配置文件中沒(méi)有明確指出,系統(tǒng)仍能通過(guò)其他途徑獲取并解析MAC地址。
二、關(guān)于pl-mac-address的更改解析
當(dāng)我們將system-user.dtsi文件中的local-mac-address更名為pl-mac-address,并在驅(qū)動(dòng)中同步更改解析字符串時(shí),系統(tǒng)能夠正確解析出MAC地址。這表明,系統(tǒng)的MAC地址解析功能對(duì)于特定的命名約定有一定的依賴(lài)性。通過(guò)遵循特定的命名規(guī)則,我們可以確保系統(tǒng)正確讀取并應(yīng)用所需的MAC地址。

三、設(shè)備樹(shù)與U-Boot中的MAC地址傳遞
在Device Tree Blob(DTB)和U-Boot中,我們可以通過(guò)更改環(huán)境變量和設(shè)備樹(shù)設(shè)置來(lái)為每個(gè)板子設(shè)置一個(gè)獨(dú)特的MAC地址。這一功能使得我們?cè)谟布橄髮樱℉AL)和設(shè)備驅(qū)動(dòng)中更加靈活地管理網(wǎng)絡(luò)設(shè)備的配置。通過(guò)這種方式,我們可以確保每個(gè)板子都具有獨(dú)特的網(wǎng)絡(luò)標(biāo)識(shí),從而更好地進(jìn)行網(wǎng)絡(luò)管理和配置。
四、U-Boot環(huán)境變量對(duì)Linux網(wǎng)卡MAC地址的影響
在U-Boot環(huán)境中,環(huán)境變量ethaddr會(huì)覆蓋設(shè)備樹(shù)里pl-eth的local-mac-addr字段,從而影響Linux啟動(dòng)后的網(wǎng)卡MAC地址。這意味著,我們可以通過(guò)修改U-Boot的環(huán)境變量來(lái)動(dòng)態(tài)地更改網(wǎng)卡的MAC地址。U-Boot里的環(huán)境變量ipaddr并不會(huì)對(duì)Linux啟動(dòng)后的配置產(chǎn)生任何影響,因?yàn)樵O(shè)備樹(shù)中并沒(méi)有關(guān)于IP地址的配置。這一特性使得網(wǎng)絡(luò)配置更加靈活和動(dòng)態(tài)。
五、關(guān)于phy-mode與中斷號(hào)的問(wèn)題

phy-mode顯示為sgmii,這可能是由硬件或官方提供的BSP設(shè)置決定的。對(duì)于phy-mode的具體工作原理和原因,需要進(jìn)一步深入研究。設(shè)備樹(shù)中的中斷號(hào)順序可能影響功能,但具體如何影響還需要根據(jù)實(shí)際的應(yīng)用場(chǎng)景和硬件環(huán)境來(lái)判斷。關(guān)于讀出的IRQ號(hào)不對(duì)的問(wèn)題,這是因?yàn)樽x到的IRQ號(hào)是系統(tǒng)映射后的軟件IRQ number,而非硬件中斷號(hào)。兩者并無(wú)直接的線性關(guān)系。關(guān)于Linux上網(wǎng)口eth0、eth1的順序問(wèn)題,似乎是按照phy地址從小到大來(lái)排布的,但這需要進(jìn)一步研究和驗(yàn)證。
第一章: Xilinx Zynq Ethernet概述
Xilinx的Zynq系列芯片是結(jié)合了FPGA和ARM處理器的強(qiáng)大硬件平臺(tái)。其以太網(wǎng)(Ethernet)功能是其重要的特性之一。關(guān)于Xilinx Wiki上的Zynq PL Ethernet的介紹,讓我們對(duì)Zynq的以太網(wǎng)功能有了初步的了解。對(duì)于工程師和開(kāi)發(fā)者來(lái)說(shuō),深入了解其工作原理和性能至關(guān)重要。
第二章:Linux驅(qū)動(dòng)探索
對(duì)于Zynq的以太網(wǎng)性能,Linux驅(qū)動(dòng)起著至關(guān)重要的作用。在Xilinx Wiki上,我們可以找到關(guān)于Linux驅(qū)動(dòng)的相關(guān)資料。特別是Macb驅(qū)動(dòng),它是實(shí)現(xiàn)以太網(wǎng)通信的關(guān)鍵。深入了解并優(yōu)化這些驅(qū)動(dòng),對(duì)于提升Zynq的以太網(wǎng)性能至關(guān)重要。

第三章:Ethernet性能優(yōu)化
為了提升Zynq的以太網(wǎng)性能,我們需要關(guān)注一些關(guān)鍵參數(shù)的設(shè)置。例如,Jumbo frame MTU的定義,當(dāng)前值為9000。我們是否可以將其改大一些?這是提升網(wǎng)絡(luò)性能的一個(gè)潛在方向。通過(guò)調(diào)整這些參數(shù),我們可以更好地優(yōu)化網(wǎng)絡(luò)性能。
第四章:Zynq Openamp調(diào)試方法探究
Openamp的開(kāi)發(fā)相對(duì)復(fù)雜,調(diào)試過(guò)程也存在挑戰(zhàn)。經(jīng)過(guò)多次嘗試,我總結(jié)出了一些調(diào)試方法。官方文檔中的調(diào)試方法主要針對(duì)單個(gè)系統(tǒng),要么是遠(yuǎn)程端,要么是主端。對(duì)于主端應(yīng)用的調(diào)試,我們可以采用傳統(tǒng)的Gdb調(diào)試方式,但這種方式無(wú)法分析遠(yuǎn)程端的運(yùn)行狀態(tài)。我還探索了一種基于attach to running target的調(diào)試方法,這種方法在系統(tǒng)通信問(wèn)題的情況下尤為有效。
第五章:總結(jié)與展望

通過(guò)以上的探討,我們對(duì)Zynq的以太網(wǎng)性能和Openamp的調(diào)試方法有了更深入的了解。未來(lái),我們還可以進(jìn)一步探索其他優(yōu)化方法,如更深入地研究Linux驅(qū)動(dòng)、調(diào)整更多網(wǎng)絡(luò)參數(shù)等,以提升Zynq的以太網(wǎng)性能。我們也期待Xilinx在未來(lái)能提供更多優(yōu)化工具和資源,幫助開(kāi)發(fā)者更輕松地開(kāi)發(fā)和優(yōu)化Zynq平臺(tái)。
遠(yuǎn)程應(yīng)用的調(diào)試方法
在軟件開(kāi)發(fā)過(guò)程中,調(diào)試是一個(gè)至關(guān)重要的環(huán)節(jié)。針對(duì)遠(yuǎn)程應(yīng)用,我們有兩種調(diào)試方法:?jiǎn)为?dú)調(diào)試遠(yuǎn)程應(yīng)用和使用attach to running target功能。這兩種方法為我們提供了調(diào)試遠(yuǎn)程應(yīng)用的便捷途徑。Tcf調(diào)試Linux主端應(yīng)用
對(duì)于Linux主端應(yīng)用的調(diào)試,Tcf調(diào)試是一種便捷的方法。在單獨(dú)調(diào)試Linux應(yīng)用時(shí),推薦使用此方法。詳細(xì)的調(diào)試流程和操作指南,可以參考《Vitis Debug Linux基礎(chǔ)篇》。OS Aware Debug:系統(tǒng)級(jí)的調(diào)試方式
OS Aware Debug是一種基于系統(tǒng)的調(diào)試方式,能夠在系統(tǒng)和應(yīng)用運(yùn)行時(shí),將調(diào)試代碼與運(yùn)行信息緊密結(jié)合,從而實(shí)現(xiàn)高效的調(diào)試。本章以O(shè)penamp rpc demo為例,詳細(xì)介紹如何同時(shí)調(diào)試主端和遠(yuǎn)程端的應(yīng)用。遺憾的是,目前全網(wǎng)關(guān)于這方面的詳細(xì)說(shuō)明并不多。在target(zynq)中的雙系統(tǒng)單步調(diào)試

zynq平臺(tái)Linux系統(tǒng)phy 88e1512驅(qū)動(dòng)配置詳解
在Zynq平臺(tái)上配置Linux系統(tǒng)中的PHY 88E1512驅(qū)動(dòng),需要遵循一定的步驟。確保硬件連接正確并識(shí)別為網(wǎng)絡(luò)設(shè)備,可以通過(guò)`ifconfig -a`查看。在內(nèi)核配置中啟用Ethernet PHY支持,檢查設(shè)備樹(shù)(DTS)或內(nèi)核配置文件,確保相關(guān)配置已定義。然后,在設(shè)備樹(shù)(DTS)文件中添加PHY 88E1512描述,指定其兼容性及地址,可能還需添加其他屬性。完成這些配置后,編譯內(nèi)核并加載設(shè)備樹(shù)(DTB)文件至系統(tǒng)中,確保在系統(tǒng)啟動(dòng)后,驅(qū)動(dòng)能夠自動(dòng)加載。使用`ethtool -i eth0`檢查驅(qū)動(dòng)加載情況及PHY信息。這一步驟適用于Zynq平臺(tái)上的Linux系統(tǒng),具體配置可能因平臺(tái)和內(nèi)核版本不同而有所差異。 以上就是關(guān)于遠(yuǎn)程應(yīng)用調(diào)試和Zynq平臺(tái)Linux系統(tǒng)phy 88e1512驅(qū)動(dòng)配置的相關(guān)介紹。在進(jìn)行調(diào)試和配置時(shí),可能會(huì)遇到一些問(wèn)題,建議查閱相關(guān)資料并參考本文提供的參考資料,以便更好地解決問(wèn)題。 參考資料:OpenAMP on ZYBO(Zynq) 1回目:とりあえずサンプルを動(dòng)かす- Qiita
本文使用 Zhihu On VSCode創(chuàng)作并發(fā)布