zynq linux 雙網卡實現


  Vivado:2016.4

  Linux:Ubuntu16.4

  ZYNQ:xc7z020

  

  下載文件名稱

  2016.4-zed-release.tar.xz

  device-tree-xlnx-xilinx-v2016.4.zip

  linux-xlnx-xilinx-v2016.4.zip

  u-boot-xlnx-xilinx-v2016.4.zip

  arm_ramdisk.image.gz

  參考鏈接:http://www.fpgadeveloper.com/2016/05/multi-port-ethernet-in-petalinux.html

 

  ZYNQ下PS端有兩個網口,GEM0、GEM1,GEM0默認通過MIO端口接到外部PHY。GEM1通過EMIO連接芯片外部PHY。

  一、FPGA在搭建block design的時候選中eth1,同時選中eth1的MDIO。

  二、系統識別GEM1的時候,根據DT可能需要訪問MDIO,也可能不需要訪問。

    1. 如果需要訪問MDIO的話,在uboot啟動完成后需加載FPGA的bit文件,由於正常生成的FPGA文件過大,因此此處重新生成 一個簡化版的FPGA系統,只包括了ARM部分的block design,然后選中壓縮bit文件,生成的bit文件大概500多k,加上fsbl.elf+uboot 不超過1M,在范圍內,這樣的話在uboot啟動后EMIO部分在FPGA中的硬件就連通可以訪問了。

    2. 如果不需要訪問MDIO的話,linux啟動完成后再去加載FPGA即可。

  三、設備樹種關於兩個網口的描述

    

    Note:注意phy1的compatible描述,只能是按照id這種描述,之前照貓畫虎的按照marvell的描述成“ICPlus,IP1001"死活都識別不了,后來發現時Marvell的PHY支持的特別好,在White list中,因此沒問題,但是別的PHY只能是按照id去描述!!!

    在Of_mdio.c中函數of_get_phy_id可以看到是按照id去匹配的。

    

 

  2. 編譯內核的時候,make menuconfig將ICPlus的驅動選中,如下圖:

  

 

  以上,修改完設備樹和內核后,一切正常的話,系統起來后你會在啟動日志中發現gem1已經加載成功了,ifconfig eth1也會出現網卡了。

  Note:

    加載完成后linux系統下發現了eth1,但是ping的時候死活ping不通,后來發現ARM可以發送數據包到PC,PC發數據包ARM收不到!折騰許久,最后還是Google上找到了一些線索:

    https://forums.xilinx.com/t5/Embedded-Processor-System-Design/Problem-with-xapp1082-ethernet-on-gem1-and-zc706/td-p/642704

    https://lists.yoctoproject.org/pipermail/meta-xilinx/2016-March/001519.html

    原來是gem1_clk_ctrl這個寄存器搞的鬼,由於GEM1 是通過EMIO接到外部PHY的,因此在配置時鍾的時候需要跟默認配置不一樣。

    由於我一直使用剛開始的FSBL.elf,Vivado工程更新為雙網卡后並沒有更新FSBL導致初始化寄存器的時候沒有設置寄存器gem1_clk_ctrl!!!

    血的教訓,切記Vivado工程改變的時候重新生成FSBL.elf。 包括DDR等一些外設接口的寄存器設置都是在FSBL階段完成的,因此需要修改完Vivado工程,根據Vivado工程自動生成FSBL.elf。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM