zynq linux 雙網絡卡實現

2022-09-07 03:24:08 字數 1619 閱讀 7069

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

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上找到了一些線索:

原來是gem1_clk_ctrl這個暫存器搞的鬼,由於gem1 是通過emio接到外部phy的,因此在配置時鐘的時候需要跟預設配置不一樣。

由於我一直使用剛開始的fsbl.elf,vivado工程更新為雙網絡卡後並沒有更新fsbl導致初始化暫存器的時候沒有設定暫存器gem1_clk_ctrl!!!

血的教訓,切記vivado工程改變的時候重新生成fsbl.elf。 包括ddr等一些外設介面的暫存器設定都是在fsbl階段完成的,因此需要修改完vivado工程,根據vivado工程自動生成fsbl.elf。

虛機實現雙網絡卡

1 手動建立乙個新的port,並attach到虛機上 2 更改虛機兩個port的屬性 neutron port update no security groups no allowed address pairs port security enbaled false 有的是只更改security ...

android雙網絡卡

rx bytes 0 0.0 b tx bytes 0 0.0 b 不知道它有什麼作用,查了一下,sit是ipv6 in ipv4 tunnel inte ces,這個inte ces 介面或是介面 也稱作sitx,sit是 internet transition 的縮寫.它可以將ipv6的資料報塞...

centos6實現雙網絡卡繫結

首先確保主機上已經有涼快網絡卡並且網絡卡都已生效 然後分別編寫eth0 eth1的網絡卡配置檔案,如下圖所示 在 etc sysconfig network scripts目錄下新建ifcfg bond0檔案,檔案內容如下圖 在 etc modprobe.d目錄下新建modprobe.conf檔案,...