當前位置:首頁 » 操作系統 » ethtool源碼

ethtool源碼

發布時間: 2023-02-28 04:12:08

⑴ 如何在linux中獲取網卡信息

查看 linux 的網卡信息步驟如下:工具原料:linux操作系統①啟動 linux 操作系統,進入到桌面;②啟動終端;③終端輸入命令 ifconfig eth0,回車;④linux 的網卡信息解讀:1.查看網卡生產廠商和信號:查看基本信息:lspci查看詳細信息:lspci -vvv # 3個小寫的v查看網卡信息:lspci | grep Ethernet;2.查看網卡驅動:查看網卡驅動信息:lspci -vvv # 找到網卡設備的詳細信息,包括網卡驅動# lsmod 列出載入的所有驅動,包括網卡驅動;3.查看網卡驅動版本查看模塊信息:modifo<mole name> # 其中包含version信息或 # ethtool-i <device name>;4.查看網路介面隊列數查看網卡介面的中斷信息:#cat /proc/interrupts | grep eth0或 # ethtool-S eth0;5.查看網卡驅動源碼的版本號解壓Intel網卡驅動源碼,打開解壓縮目錄下的*.spec文件查看驅動的版本;

⑵ 大家好,關於Linux下RTL8169的網卡驅動編譯與安裝

出一個irda 0:

鏈接:乙太網hwaddr eth概括:圖書:00:1d24:6a:第七版

了廣播組播系列:1500:1

接收數據包:0錯誤:0:0:0:0的超支

發送數據包:0錯誤:0:0:0:0的超支

碰撞:0txqueuelen:1000

接收的位元組:0(0)-0(0)位元組

中斷:16基地地址:16

ethtool eth 0:

設置eth 0:

支持埠:[體]

支持的連接模式:10baset /半/全10baset

100100/半/全

1000baset /全部

支持自動協商:是的

廣告鏈接模式:10baset10baset /半/全

100100/半/全

1000baset /全部

暫停幀使用:沒有廣告

廣告自動協商:是的

速度:高速的

全雙工

港口:雙絞線

phyad:0

收發器:內部

自動協商:關

交叉網線:未知

支持wake-on:pumbg

wake-on:克

目前的消息級別的33(51):000000

鏈路檢測:無

重新啟動網路服務

正在關閉介面eth 0:錯誤:斷開設備' '(eth 0/組織/電子教鞭/網路管
理員/設備/0)失敗:這個裝置是不活躍的

⑶ 如何在linux下安裝網卡驅動

一、查看網卡型號和機器位數

1、查看網卡型號

linux系統下通過以下命令,可以查看當前的網卡驅動信息;

[box color="white" icon="none"]

[root@localhost zhangy]# lspci |grep -i eth

03:00.0 Ethernet controller: Realtek Semiconctor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

[/box]

2、查看機器位數

驅動程序是要區分系統是32位系統還是64位系統的, 所以通過以下linux命令,就可以知道操作系統的位數了;

[box color="white" icon="none"]

[root@localhost ~]# uname -a

Linux localhost.localdomain 2.6.18-308.13.1.el5PAE #1 SMP Tue Aug 21 17:50:26 EDT 2012 i686 i686 i386 GNU/Linux

[/box]

下載前先看一下你的網卡驅動,如果是最新的就不用在重新裝了。

[box color="white" icon="none"]

[root@localhost zhangy]# ethtool -i eth0

driver: r8169

version: 2.3LK-1-NAPI

firmware-version:

bus-info: 0000:03:00.0

[/box]

RTL8111/8168B就是網卡的型號,這樣你可以網卡的型號來找一下網卡驅動的官方網站,然後下載最新的網卡驅動,驅動分64位和32位的,i386,i686是32位的機器,x86_64表示是64位的機器,不要選錯驅動了。

二、下載驅動,並安裝

1、解壓

[box color="white" icon="none"]

[root@localhost download]# tar jxvf r8168-8.032.00.tar.bz2

[/box]

2、安裝

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# make && make install

[/box]

如果報以下錯誤

make -C /lib/moles/2.6.18-308.8.2.el5PAE/build SUBDIRS=/home/zhangy/r8168-8.032.00/src INSTALL_MOD_DIR=kernel/drivers/net moles_install

make: *** /lib/moles/2.6.18-308.8.2.el5PAE/build: 沒有那個文件或目錄。 停止。

make: *** [install] 錯誤 2

說明你kernel源碼沒有安裝。安裝kernel源碼

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# yum install kernel-xen kernel-xen-devel kernel

> kernel-PAE kernel-PAE-devel kernel-devel kernel-headers

[/box]

安裝完以後,一定要重啟機器。不然下面操作就過不去了,會報FATAL: Mole r8168 not found.

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# depmod -a

[root@localhost r8168-8.032.00]# modprobe r8168

[/box]

編輯配置文件/etc/modprobe.cof,如果以前沒有添加alias eth0 r8168,如果已經有了修改一下成alias eth0 r8168。

查一下驅動是不是載入了,如果有以下內容說明驅動安裝成功了。

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# lsmod |grep r8168

r8168 231132 0

[/box]

必須重新啟動一下機器,用ethtool查看驅動才會改變,不然還是老樣子。下面是新的驅動。

[box color="white" icon="none"]

[root@localhost ~]# ethtool -i eth0

driver: r8168

version: 8.032.00-NAPI

firmware-version:

bus-info: 0000:02:00.0

[/box]

⑷ linux下如何查看網卡驅動版本信息

Linux下查看網卡驅動和版本信息
查看網卡生產廠商和信號
查看基本信息:lspci
查看詳細信息:lspci -vvv # 3個小寫的v
查看網卡信息:lspci | grep Ethernet
查看網卡驅動
查看網卡驅動信息:lspci -vvv # 找到網卡設備的詳細信息,包括網卡驅動
# lsmod 列出載入的所有驅動,包括網卡驅動

查看網卡驅動版本
查看模塊信息:modifo<mole name> # 其中包含version信息
或 # ethtool-i <device name>
RHEL 6.3中的網卡驅動版本:
# modinfo igb
filename: /lib/moles/2.6.32-279.el6.x86_64/kernel/drivers/net/igb/igb.ko
version: 3.2.10-k
license: GPL
description: Intel(R) Gigabit Ethernet Network Driver
# modinfo e1000e
filename: /lib/moles/2.6.32-279.el6.x86_64/kernel/drivers/net/e1000e/e1000e.ko
version: 1.9.5-k
license: GPL
description: Intel(R) PRO/1000 Network Driver
author: Intel Corporation,<[email protected]>
# modinfo e1000
filename: /lib/moles/2.6.32-279.el6.x86_64/kernel/drivers/net/e1000/e1000.ko
version: 8.0.35-NAPI
license: GPL
description: Intel(R) PRO/1000 Network Driver
# modinfo ixgbe
filename: /lib/moles/2.6.32-279.el6.x86_64/kernel/drivers/net/ixgbe/ixgbe.ko
version: 3.6.7-k
license: GPL
description: Intel(R) 10 Gigabit PCI Express NetworkDriver
# modinfo r8169
filename: /lib/moles/2.6.32-279.el6.x86_64/kernel/drivers/net/r8169.ko
version: 2.3LK-NAPI
license: GPL
description: RealTek RTL-8169 Gigabit Ethernet driver
查看網路介面隊列數
查看網卡介面的中斷信息:#cat /proc/interrupts | grep eth0
或 # ethtool-S eth0
查看網卡驅動源碼的版本號
解壓Intel網卡驅動源碼,打開解壓縮目錄下的*.spec文件查看驅動的版本。
例如:解壓e1000-8.0.35.tar.gz網卡驅動後,查看e1000.spec文件。
Name:e1000
Summary:Intel(R) Gigabit Ethernet Connection
Version: 8.0.35
Release:1
Source:%{name}-%{version}.tar.gz
Vendor:Intel Corporation
License:GPL
ExclusiveOS:linux
Group:System Environment/Kernel
在驅動源碼src目錄中查找:
#grep DRV_VERSION * # forLinux
#findstr DRV_VERSION * # for Windows
在e1000_main.c中也能找到定義驅動版本的一行:
#define DRV_VERSION"8.0.35" DRV_NAPI DRV_DEBUG DRV_HW_PERF
在e1000e中src目錄下netdev.c文件:
#define DRV_VERSION"3.0.4.1" DRV_EXTRAVERSION
igb_main.c:
#define MAJ 5
#define MIN 2
#define BUILD 9.4
#define DRV_VERSION__stringify(MAJ) "." __stringify(MIN) "."\
ixgbe_main.c:
#define DRV_VERSION __stringify(3.22.3) DRIVERIOVDRV_HW_PERF FP GA \

⑸ 關於 Linux 網路,你必須知道這些

我們一起學習了文件系統和磁碟 I/O 的工作原理,以及相應的性能分析和優化方法。接下來,我們將進入下一個重要模塊—— Linux 的網路子系統。

由於網路處理的流程最復雜,跟我們前面講到的進程調度、中斷處理、內存管理以及 I/O 等都密不可分,所以,我把網路模塊作為最後一個資源模塊來講解。

同 CPU、內存以及 I/O 一樣,網路也是 Linux 系統最核心的功能。網路是一種把不同計算機或網路設備連接到一起的技術,它本質上是一種進程間通信方式,特別是跨系統的進程間通信,必須要通過網路才能進行。隨著高並發、分布式、雲計算、微服務等技術的普及,網路的性能也變得越來越重要。

說到網路,我想你肯定經常提起七層負載均衡、四層負載均衡,或者三層設備、二層設備等等。那麼,這里說的二層、三層、四層、七層又都是什麼意思呢?

實際上,這些層都來自國際標准化組織制定的開放式系統互聯通信參考模型(Open System Interconnection Reference Model),簡稱為 OSI 網路模型。

但是 OSI 模型還是太復雜了,也沒能提供一個可實現的方法。所以,在 Linux 中,我們實際上使用的是另一個更實用的四層模型,即 TCP/IP 網路模型。

TCP/IP 模型,把網路互聯的框架分為應用層、傳輸層、網路層、網路介面層等四層,其中,

為了幫你更形象理解 TCP/IP 與 OSI 模型的關系,我畫了一張圖,如下所示:

當然了,雖說 Linux 實際按照 TCP/IP 模型,實現了網路協議棧,但在平時的學習交流中,我們習慣上還是用 OSI 七層模型來描述。比如,說到七層和四層負載均衡,對應的分別是 OSI 模型中的應用層和傳輸層(而它們對應到 TCP/IP 模型中,實際上是四層和三層)。

OSI引入了服務、介面、協議、分層的概念,TCP/IP借鑒了OSI的這些概念建立TCP/IP模型。

OSI先有模型,後有協議,先有標准,後進行實踐;而TCP/IP則相反,先有協議和應用再提出了模型,且是參照的OSI模型。

OSI是一種理論下的模型,而TCP/IP已被廣泛使用,成為網路互聯事實上的標准。

有了 TCP/IP 模型後,在進行網路傳輸時,數據包就會按照協議棧,對上一層發來的數據進行逐層處理;然後封裝上該層的協議頭,再發送給下一層。

當然,網路包在每一層的處理邏輯,都取決於各層採用的網路協議。比如在應用層,一個提供 REST API 的應用,可以使用 HTTP 協議,把它需要傳輸的 JSON 數據封裝到 HTTP 協議中,然後向下傳遞給 TCP 層。

而封裝做的事情就很簡單了,只是在原來的負載前後,增加固定格式的元數據,原始的負載數據並不會被修改。

比如,以通過 TCP 協議通信的網路包為例,通過下面這張圖,我們可以看到,應用程序數據在每個層的封裝格式。

這些新增的頭部和尾部,增加了網路包的大小,但我們都知道,物理鏈路中並不能傳輸任意大小的數據包。網路介面配置的最大傳輸單元(MTU),就規定了最大的 IP 包大小。在我們最常用的乙太網中,MTU 默認值是 1500(這也是 Linux 的默認值)。

一旦網路包超過 MTU 的大小,就會在網路層分片,以保證分片後的 IP 包不大於 MTU 值。顯然,MTU 越大,需要的分包也就越少,自然,網路吞吐能力就越好。

理解了 TCP/IP 網路模型和網路包的封裝原理後,你很容易能想到,Linux 內核中的網路棧,其實也類似於 TCP/IP 的四層結構。如下圖所示,就是 Linux 通用 IP 網路棧的示意圖:

我們從上到下來看這個網路棧,你可以發現,

這里我簡單說一下網卡。網卡是發送和接收網路包的基本設備。在系統啟動過程中,網卡通過內核中的網卡驅動程序注冊到系統中。而在網路收發過程中,內核通過中斷跟網卡進行交互。

再結合前面提到的 Linux 網路棧,可以看出,網路包的處理非常復雜。所以,網卡硬中斷只處理最核心的網卡數據讀取或發送,而協議棧中的大部分邏輯,都會放到軟中斷中處理。

我們先來看網路包的接收流程。

當一個網路幀到達網卡後,網卡會通過 DMA 方式,把這個網路包放到收包隊列中;然後通過硬中斷,告訴中斷處理程序已經收到了網路包。

接著,網卡中斷處理程序會為網路幀分配內核數據結構(sk_buff),並將其拷貝到 sk_buff 緩沖區中;然後再通過軟中斷,通知內核收到了新的網路幀。

接下來,內核協議棧從緩沖區中取出網路幀,並通過網路協議棧,從下到上逐層處理這個網路幀。比如,

最後,應用程序就可以使用 Socket 介面,讀取到新接收到的數據了。

為了更清晰表示這個流程,我畫了一張圖,這張圖的左半部分表示接收流程,而圖中的粉色箭頭則表示網路包的處理路徑。

了解網路包的接收流程後,就很容易理解網路包的發送流程。網路包的發送流程就是上圖的右半部分,很容易發現,網路包的發送方向,正好跟接收方向相反。

首先,應用程序調用 Socket API(比如 sendmsg)發送網路包。

由於這是一個系統調用,所以會陷入到內核態的套接字層中。套接字層會把數據包放到 Socket 發送緩沖區中。

接下來,網路協議棧從 Socket 發送緩沖區中,取出數據包;再按照 TCP/IP 棧,從上到下逐層處理。比如,傳輸層和網路層,分別為其增加 TCP 頭和 IP 頭,執行路由查找確認下一跳的 IP,並按照 MTU 大小進行分片。

分片後的網路包,再送到網路介面層,進行物理地址定址,以找到下一跳的 MAC 地址。然後添加幀頭和幀尾,放到發包隊列中。這一切完成後,會有軟中斷通知驅動程序:發包隊列中有新的網路幀需要發送。

最後,驅動程序通過 DMA ,從發包隊列中讀出網路幀,並通過物理網卡把它發送出去。

多台伺服器通過網卡、交換機、路由器等網路設備連接到一起,構成了相互連接的網路。由於網路設備的異構性和網路協議的復雜性,國際標准化組織定義了一個七層的 OSI 網路模型,但是這個模型過於復雜,實際工作中的事實標准,是更為實用的 TCP/IP 模型。

TCP/IP 模型,把網路互聯的框架,分為應用層、傳輸層、網路層、網路介面層等四層,這也是 Linux 網路棧最核心的構成部分。

我結合網路上查閱的資料和文章中的內容,總結了下網卡收發報文的過程,不知道是否正確:

當發送數據包時,與上述相反。鏈路層將數據包封裝完畢後,放入網卡的DMA緩沖區,並調用系統硬中斷,通知網卡從緩沖區讀取並發送數據。

了解 Linux 網路的基本原理和收發流程後,你肯定迫不及待想知道,如何去觀察網路的性能情況。具體而言,哪些指標可以用來衡量 Linux 的網路性能呢?

實際上,我們通常用帶寬、吞吐量、延時、PPS(Packet Per Second)等指標衡量網路的性能。

除了這些指標,網路的可用性(網路能否正常通信)、並發連接數(TCP 連接數量)、丟包率(丟包百分比)、重傳率(重新傳輸的網路包比例)等也是常用的性能指標。

分析網路問題的第一步,通常是查看網路介面的配置和狀態。你可以使用 ifconfig 或者 ip 命令,來查看網路的配置。我個人更推薦使用 ip 工具,因為它提供了更豐富的功能和更易用的介面。

以網路介面 eth0 為例,你可以運行下面的兩個命令,查看它的配置和狀態:

你可以看到,ifconfig 和 ip 命令輸出的指標基本相同,只是顯示格式略微不同。比如,它們都包括了網路介面的狀態標志、MTU 大小、IP、子網、MAC 地址以及網路包收發的統計信息。

第一,網路介面的狀態標志。ifconfig 輸出中的 RUNNING ,或 ip 輸出中的 LOWER_UP ,都表示物理網路是連通的,即網卡已經連接到了交換機或者路由器中。如果你看不到它們,通常表示網線被拔掉了。

第二,MTU 的大小。MTU 默認大小是 1500,根據網路架構的不同(比如是否使用了 VXLAN 等疊加網路),你可能需要調大或者調小 MTU 的數值。

第三,網路介面的 IP 地址、子網以及 MAC 地址。這些都是保障網路功能正常工作所必需的,你需要確保配置正確。

第四,網路收發的位元組數、包數、錯誤數以及丟包情況,特別是 TX 和 RX 部分的 errors、dropped、overruns、carrier 以及 collisions 等指標不為 0 時,通常表示出現了網路 I/O 問題。其中:

ifconfig 和 ip 只顯示了網路介面收發數據包的統計信息,但在實際的性能問題中,網路協議棧中的統計信息,我們也必須關注。你可以用 netstat 或者 ss ,來查看套接字、網路棧、網路介面以及路由表的信息。

我個人更推薦,使用 ss 來查詢網路的連接信息,因為它比 netstat 提供了更好的性能(速度更快)。

比如,你可以執行下面的命令,查詢套接字信息:

netstat 和 ss 的輸出也是類似的,都展示了套接字的狀態、接收隊列、發送隊列、本地地址、遠端地址、進程 PID 和進程名稱等。

其中,接收隊列(Recv-Q)和發送隊列(Send-Q)需要你特別關注,它們通常應該是 0。當你發現它們不是 0 時,說明有網路包的堆積發生。當然還要注意,在不同套接字狀態下,它們的含義不同。

當套接字處於連接狀態(Established)時,

當套接字處於監聽狀態(Listening)時,

所謂全連接,是指伺服器收到了客戶端的 ACK,完成了 TCP 三次握手,然後就會把這個連接挪到全連接隊列中。這些全連接中的套接字,還需要被 accept() 系統調用取走,伺服器才可以開始真正處理客戶端的請求。

與全連接隊列相對應的,還有一個半連接隊列。所謂半連接是指還沒有完成 TCP 三次握手的連接,連接只進行了一半。伺服器收到了客戶端的 SYN 包後,就會把這個連接放到半連接隊列中,然後再向客戶端發送 SYN+ACK 包。

類似的,使用 netstat 或 ss ,也可以查看協議棧的信息:

這些協議棧的統計信息都很直觀。ss 只顯示已經連接、關閉、孤兒套接字等簡要統計,而 netstat 則提供的是更詳細的網路協議棧信息。

比如,上面 netstat 的輸出示例,就展示了 TCP 協議的主動連接、被動連接、失敗重試、發送和接收的分段數量等各種信息。

接下來,我們再來看看,如何查看系統當前的網路吞吐量和 PPS。在這里,我推薦使用我們的老朋友 sar,在前面的 CPU、內存和 I/O 模塊中,我們已經多次用到它。

給 sar 增加 -n 參數就可以查看網路的統計信息,比如網路介面(DEV)、網路介面錯誤(EDEV)、TCP、UDP、ICMP 等等。執行下面的命令,你就可以得到網路介面統計信息:

這兒輸出的指標比較多,我來簡單解釋下它們的含義。

其中,Bandwidth 可以用 ethtool 來查詢,它的單位通常是 Gb/s 或者 Mb/s,不過注意這里小寫字母 b ,表示比特而不是位元組。我們通常提到的千兆網卡、萬兆網卡等,單位也都是比特。如下你可以看到,我的 eth0 網卡就是一個千兆網卡:

其中,Bandwidth 可以用 ethtool 來查詢,它的單位通常是 Gb/s 或者 Mb/s,不過注意這里小寫字母 b ,表示比特而不是位元組。我們通常提到的千兆網卡、萬兆網卡等,單位也都是比特。如下你可以看到,我的 eth0 網卡就是一個千兆網卡:

我們通常使用帶寬、吞吐量、延時等指標,來衡量網路的性能;相應的,你可以用 ifconfig、netstat、ss、sar、ping 等工具,來查看這些網路的性能指標。

小狗同學問到: 老師,您好 ss —lntp 這個 當session處於listening中 rec-q 確定是 syn的backlog嗎?
A: Recv-Q為全連接隊列當前使用了多少。 中文資料里這個問題講得最明白的文章: https://mp.weixin.qq.com/s/yH3PzGEFopbpA-jw4MythQ

看了源碼發現,這個地方講的有問題.關於ss輸出中listen狀態套接字的Recv-Q表示全連接隊列當前使用了多少,也就是全連接隊列的當前長度,而Send-Q表示全連接隊列的最大長度

⑹ 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/

【完】

熱點內容
國家開放大學默認密碼是多少 發布:2025-08-14 17:46:04 瀏覽:458
sql拼接sql 發布:2025-08-14 17:46:01 瀏覽:144
c語言實現的萬年歷 發布:2025-08-14 17:37:58 瀏覽:947
我的世界網易伺服器老是崩潰怎麼辦 發布:2025-08-14 17:32:50 瀏覽:149
小米路由存儲分享 發布:2025-08-14 17:32:48 瀏覽:244
a3伺服器ip地址連接不了 發布:2025-08-14 17:19:58 瀏覽:809
mac查看系統文件夾 發布:2025-08-14 17:17:56 瀏覽:341
代碼段加密 發布:2025-08-14 17:06:30 瀏覽:959
我的世界嗨皮伺服器怎麼關服了 發布:2025-08-14 16:48:55 瀏覽:420
怎麼可以修改手機配置 發布:2025-08-14 16:44:09 瀏覽:311