1. ZYNQ+linux網口調試筆記(3)PL-ETH
在ZYNQ上使用gigE Vision協議的網路介面相機。
第一步:調通PS側網口GEM0(Xilinx BSP默認配好)。
第二步:調通PS側網口GEM1(見前一篇文檔:開發筆記(1))。
第三步:調通PL側網口(本文闡述)。
第四步:在PL側網口上驗證Jumbo Frame特性,並在應用層適配gigE Vision協議。
根據《xapp1082》可知,PL側的PHY支持1000Base-X和SGMII兩種配置,這兩種配置對應兩種不同的PHY引腳介面(連接到MAC)。而我們的hdf文件使用的是1000Base-X的配置。
關於網口的Linux驅動,我們在官網找到一份資料: Xilinx Wiki - Zynq PL Ethernet 。資料很長,我們只看與我們相關的2.4.1 PL Ethernet BSP installation for 1000Base-X」這一章節就可以了。
首先導入FPGA設計同事提供的hdf文件:
在彈出的圖形界面里,進入Subsystem AUTO Hardware Settings——Ethernet Settings——Primary Ethernet,確認可以看到PL側網路設備axi_ethernet_0,說明hdf文件里已包含了必要的網口硬體信息:
上圖中被選中的網口將成為Linux上的設備eth0。這里我們默認選擇ps7_ethernet_0,即使用GEM0作為首選網口。
啟用Xilinx AXI Ethernet驅動
進入Device Drivers -- Network device support – 選中Xilinx AXI Ethernet(以及Xilinx Ethernet GEM,這是PS側網口的驅動)
進入Networking support – 選中 Random ethaddr if unset
進入Device Drivers -- Network device support -- PHY Device support and infrastructure – 啟用Drivers for xilinx PHYs
進入~~~~Device Drivers -- DMA Engine Support -– 禁用~~~~Xilinx AXI DMAS Engine~~~ (對應的配置項名為 ~~ CONFIG_XILINX_DMA ~~~)
注意: Xilinx Wiki里對設備樹節點的引用有誤(&axi_ethernet),導致編譯報錯,應改為&axi_ethernet_0。
註:PL-ETH驅動所在路徑:<project>/build/tmp/work-shared/plnx_arm/kernel-source/drivers/net/ethernet/xilinx/xilinx_axienet_main.c和xilinx_axienet_mdio.c。對應的內核配置項為CONFIG_NET_VENDOR_XILINX和CONFIG_XILINX_AXI_EMAC。
啟用ethtool和tcpmp(調試用,非必須):
然後將生成的BOOT.BIN和image.ub拷貝到SD卡根目錄下,將SD卡插入板子上,上電運行。
上電後,使用ifconfig eth1查看網口信息,觀察MAC地址與設置的一致,且ifconfig eth1 192.168.1.11 up沒有報錯。
測試網路通路:ping PC是通的。說明網口工作正常。
Linux下eth1(即PL-ETH)的MAC地址有誤
問題描述:
開機列印:
注意:
MAC地址是錯的,驅動里解析出的是GEM0的MAC地址。
試驗發現,即使在system-user.dtsi里不寫local-mac-address,也照樣解析出的是GEM0的MAC。
而將system-user.dtsi里的local-mac-address改名為pl-mac-address,並將驅動里解析的字元串也對應更改為pl-mac-address,則可以正確解析出來:
Passing MAC address to kernel via Device Tree Blob and U-Boot:
http://zedboard.org/content/passing-mac-address-kernel-device-tree-blob
通過更改u-boot環境變數和設備樹,為每個板子設置一個獨特的MAC地址:
https://www.xilinx.com/support/answers/53476.html
U-Boot里的環境變數ethaddr會覆蓋掉設備樹里pl-eth的local-mac-addr欄位,從而影響Linux啟動後的網卡MAC地址;
但U-Boot里的環境變數ipaddr不會對Linux啟動後的配置產生任何影響。因為設備樹里根本就沒有關於IP地址的配置。
phy-mode怎麼會是sgmii?查了下官方的提供的BSP里,也是「sgmii」。說明這個沒問題。具體原因不清楚。
@TODO: 設備樹里的中斷號的順序如何影響功能?
為何讀出來的IRQ號不對呢?這是因為這里讀到的不是硬體的中斷號,而是經過系統映射之後的軟體IRQ number。兩者不具有線性關系。
關於中斷號的疑問:
Linux上的網口eth0、eth1的順序,似乎是按照phy地址從小到大來排布的。
Xilinx xapp1082-zynq-eth.pdf (v5.0) July 16, 2018
https://www.xilinx.com/support/documentation/application_notes/xapp1082-zynq-eth.pdf
Xilinx Wiki - Zynq PL Ethernet:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841633/Zynq+PL+Ethernet
Xilinx Wiki - Linux Drivers:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841873/Linux+Drivers
Xilinx Wiki - Linux Drivers - Macb Driver:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver
Xilinx Wiki - Zynq Ethernet Performance:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841743/Zynq+Ethernet+Performance
查到關於Jumbo frame MTU的定義,當前值為9000,可否改大一些?
驅動源碼里關於jumbo frame的說明:
設置MTU為9000,發現ping包最大長度只能設為ping 192.168.1.10 -s 1472
https://lore.kernel.org/patchwork/patch/939535/
【完】
2. 如何用linux建立eth1
cp ifcfg-eth0 ifcfg-eth1
然後 vi ifcfg-eth1
按照 裡面的 參數 設置 就可以
最簡單 方法 如果你有 安裝upset
用upset吧
3. 新安裝的Linux系統,沒有eth0
1、用ifconfig eth0 up命令開啟下網卡。
#ifconfig eth0 up
2、更改eth0配置:
#vi/etc/sysconfig/network-scripts/ifcfg-eth0下顯示:
DEVICE=eth0
ONBOOT=no //開機啟動網卡
BOOTPROTO=static
IPADDR=192.168.1.8 //自己設置有效ip地址
NETMASK=255.255.255.0 //子網掩碼
GATEWAY=192.168.1.1 //有效網關地址
HWADDR=00:0C:29:96:38:F8
注意其中的ONBOOT=no將其改為yes,網卡激活。
3、重啟服務。
#service network restart
重啟後配置生效。
4. linux配置中eth0和eth1做什麼用的
都是上網用的,只是名稱不同。
eth0,eht1相當於windows的本地連接1本地連接2,就是告訴你現在又兩塊網卡,一塊叫eth0,另一塊叫eth1。
例如:
目錄etc/sysconfig/network-scripts下面,ifcfg-eth0就代表eth0的配置,把文件改成了eth1,文件內容做下修改, 那就是eth1了。
當然,這種配置方法並不適用於所有的linux系統,但對RHEL是適用的。
使用注意事項
子網卡在這里並不是實際上的網路介面設備,但是可以作為網路介面在系統中出現,如eth0:1、eth1:2這種網路介面。它們必須要依賴於物理網卡,雖然可以與物理網卡的網路介面同時在系統中存在並使用不同的IP地址,而且也擁有它們自己的網路介面配置文件。但是當所依賴的物理網卡不啟用時(Down狀態)這些子網卡也將一同不能工作。
如果將一個物理網卡通過vconfig命令添加到多個VLAN當中去的話,就會有多個VLAN虛擬網卡出現,他們的信息以及相關的VLAN信息都是保存在/proc/net/vlan/config這個臨時文件中的,而沒有獨自的配置文件。它們的網路介面名是eth0.1、eth1.2這種名字。
5. 如何在Linux中為eth0增加一個路由
Linux下網卡命名規律:eth0,eth1。第一塊乙太網卡,第二塊。lo為環回介面,它的IP地址固定為127.0.0.1,掩碼8位。它代表你的機器本身。1、ifconfig是查看網卡的信息ifconfig[Interface]Interface是可選項,如果不加此項,則顯示系統中所有網卡的信息。如果添加此選項則顯示所指定的網卡信息.例如:ifconfigeth0eth0Linkencap:EthernetHWaddr00:0C:29:F3:3B:F2inetaddr:192.168.0.10Bcast:192.168.0.255Mask:255.255.255.:1500Metric:1RXpackets:78errors:0dropped:0overruns:0frame:0TXpackets:104errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:100RXbytes:11679(11.4Kb)TXbytes:14077(13.7Kb)Interrupt:10Baseaddress:0x1080可以看到:第一行:連接類型:Ethernet(乙太網)HWaddr(硬體mac地址)第二行:網卡的IP地址、子網、掩碼第三行:UP(代表網卡開啟狀態)RUNNING(代表網卡的網線被接上)MULTICAST(支持組播)MTU:1500(最大傳輸單元):1500位元組第四、五行:接收、發送數據包情況統計第七行:接收、發送數據位元組數統計信息。(1)配置eth0的IP地址,同時激活該設備。#ifconfigeth0192.168.1.10netmask255.255.255.0up(2)配置eth0別名設備eth0:1的IP地址,並添加路由。#ifconfigeth0:1192.168.1.3#routeadd–host192.168.1.3deveth0:1(3)激活設備。#ifconfigeth0:1up(4)禁用設備。#ifconfigeth0:down(5)查看指定的網路介面的配置。#ifconfigeth0(6)查看所有的網路介面配置。#ifconfig2、route命令來配置並查看內核路由表的配置情況例如:(1)添加到主機的路由。#routeadd–host192.168.1.2deveth0:0#routeadd–host10.20.30.148gw10.20.30.40(2)添加到網路的路由。#routeadd–net10.20.30.40netmask255.255.255.248eth0#routeadd–net10.20.30.48netmask255.255.255.248gw10.20.30.41#routeadd–net192.168.1.0/24eth1(3)添加默認網關。#routeadddefaultgw192.168.1.1(4)查看內核路由表的配置。#route(5)刪除路由。#routedel–host192.168.1.2deveth0:0#routedel–host10.20.30.148gw10.20.30.40#routedel–net10.20.30.40netmask255.255.255.248eth0#routedel–net10.20.30.48netmask255.255.255.248gw10.20.30.41#routedel–net192.168.1.0/24eth1#routedeldefaultgw192.168.1.1對於1和2兩點可使用下面的語句實現:Ifconfigeth0172.16.19.71netmask255.255.255.0Route0.0.0.0gw172.16.19.254Servicenetworkrestart3、traceroute命令顯示數據包到達目的主機所經過的路由例如:#traceroute.cn4、ping命令來測試網路的連通性例如:#ping.cn#ping–c4192.168.1.125、netstat命令來顯示網路狀態信息
6. linux配置中eth0和eth1做什麼用的
是一種光纖乙太網介面卡,按照乙太網通信協議進行信號傳輸。一般通過光纜與光纖乙太網交換機連接。
Eth0和eth1用於區分網卡名。它們的含義與windows本地連接1和本地連接2相同。
這里的子網卡不是一個實用的網路介面,但是它可以作為一個集合介面在系統中閃現,比如eth0:1,eth1:2。
(6)linux同步以太坊擴展閱讀:
Linux操作系統嵌入了TCP/IP協議棧,協議軟體具有路由轉發功能。路由和轉發依賴於在主機中安裝多個網卡作為路由器。
當某一網卡接收到度包時,系統內核會根據度包的目的IP地址查詢路由表,然後根據查詢結果將度包發送到另一網卡,最後通過該網卡發送度包。主機的進程是路由器的核心功能。
路由功能是通過修改Linux內核參數來實現的。sysctl命令用於配置和顯示/proc/sys目錄中的內核參數。
出於安全原因,Linux內核默認禁止數據包路由和轉發。在Linux系統中,有臨時和永久兩種方法啟用轉發功能。
7. linux怎麼配置eth0
eth0和eth1這是網卡設備,只是個名稱不必糾結,不是那誰說的一個普通網卡一個無線網卡,他什麼都不懂。
通常伺服器會有多個網卡的,所以就有eth0 eth1 eth2 這樣的名稱,
而且在一些系統中對於無線網卡會命名為wlan0 wlan1。。。。
具體的你可以看看目錄etc/sysconfig/network-scripts下面,
ifcfg-eth0就代表eth0的配置,你把文件改成了eth1,文件內容做下修改, 那就是eth1了。。
當然,這種配置方法並不適用於所有的linux系統,但對RHEL是適用的。
8. linux 怎麼重新載入eth0
臨時解決方法一:
使用命令ifconfig eth0 192.168.1.x可以正常設置eth0的IP,該方法僅為臨時處理辦法,系統重啟後即失效了。
永久解決方法二:
1、在/etc/sysconfig/network-scripts/目錄下新建ifcfg-eth0文件;
2、正確設置ifcfg-eth0的DEVICE、BOOTPROTO、ONBOOT、IPADDR、GATEWAY、DNS1、DOMAIN、NETMASK、NETWORK、NAME等等,比如:
DEVICE=eth0 物理設備名稱
IPADDR=192.168.1.x IP地址
NETMASK=255.255.255.0 子網掩碼
NETWORK=192.168.1.0 指定網路,通過IP地址和子網掩碼自動計算得到
GATEWAY=192.168.1.1 網關地址
BROADCAST=192.168.1.255 廣播地址,通過IP地址和子網掩碼自動計算得到
ONBOOT=[yes|no] 引導時是否激活設備
USERCTL=[yes|no] 非ROOT用戶是否可以控制該設備
BOOTPROTO=[none|static|bootp|dhcp] 引導時不使用協議|靜態分配|BOOTP協議|dhcp協議
HWADDR=00:13:D3:27:9F:80 MAC地址
NAME=eth0 名稱
3、經過以上設置,正常情況下是可以成功的,如果仍有問題,在文件/etc/rc.d/rc.local最後加入ifup eth0(/etc/rc.local腳本是在所有其它初始化腳本執行完畢後執行)。
4、重啟電腦,OK。
其它網路控制命令:
ifdown eth0、ifconfig eth0 down //關閉網路
ifup eth0、ifconfig eth0 up //開啟網路
-------------------------------------------------------
設置DNS 配置文件位置/etc/resolv.conf
-------------------------------------------------------
service network start //啟動網路服務
service network stop //停止網路服務
srvice network restart //重啟網路服務
service network status //查看網路服務狀態
9. linux系統怎麼挖以太坊
如何使用Linux系統挖礦,要使用到哈魚礦工的服務,只需要兩步,就可以在Linux系統上挖礦。
打開 網站,輸入手機號,選擇你要使用多少CPU來挖礦,默認為使用50%的CPU進行挖礦,點擊生成你的專屬命令並復制
只需要兩步,你就可以在Linux系統上挖礦,你所挖的錢只需要到哈魚礦工網站上,輸入你的手機號即可提現。
10. linux雙網卡 如何配置實現 eth0與eth1的通信. eth0的IP是10.*.*.* eth1的IP是192.*.*.*
打開本機的路由功能 1.永久打開vim /etc/sysctl.conf 修改參數net.ipv4.ip_forward = 1 sysctl -p
2.臨時打開(每次重啟機器就不在生效) echo 1 > /proc/sys/net/ipv4/ip_forward
然後互相ping一下試試