如何解决与驱动相关的Linux网络问题
生活随笔
收集整理的這篇文章主要介紹了
如何解决与驱动相关的Linux网络问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
linux機器上與網絡有關的問題很難解決,因為這已經超出Linux所信任的環境 之外了。但是作為Linux管理員,你可以通過使用正確的技術幫助網絡管理員解決難題。在本文中,TechTarget中國的特約專家Sander van Vugt將介紹如何解決與驅動相關的網絡問題。
要確定你遇到的問題與網絡相關很簡單:如果你的計算機不能與其他計算機通信,網絡就有問題。但是很難找到問題根源。你需要從分析網絡通信里包含的各種 元素入手。
如果你的主機需要與網絡中的其他主機通信,必須具備以下條件:
1.安裝了網卡并能用于操作系統,例如載入了正確驅動。
2.網卡分配有IP地址。
3.計算機能與同個網絡中的其他主機通信。
4.計算機能與其他網絡中的其他主機通信。
5.計算機能使用其主機名與其他主機通信。
解決網絡驅動問題
要與網絡上的其他計算機通信,你的計算機需要一個網絡接口。計算機要獲取網絡接口的方式設計得很好。在系統啟動期間,內核探測不同的可用接口,一般位 于PCI bus上,找到一個網卡。接下來確定需要哪個驅動記錄網卡,驅動是否可用,它將記錄網卡。隨后,udev daemon(udevd)在計算機的初始啟動階段啟動,并創建網絡設備。在只有一個網絡接口的計算機里,這一般是eth0設備,不過隨后其他設備也能使 用。一旦載入接口,下一步驟為網卡獲取IP地址就可以跳過。
正如我們所討論的,為網卡正確載入驅動包含以下一些條款:
1.內核探測PCI bus。
2.基于信息查找載入到PCI bus的驅動。
3.Udev創建網絡接口。
要修復網絡問題,通過確定網卡是否真的在PCI-bus上開始。可以使用lspci命令進行確認。下面是lspci的例子:
JBO:~ # lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:07.7 System peripheral: VMware Inc Virtual Machine Communication Interface (rev 10)
00:0f.0 VGA compatible controller: VMware Inc Abstract SVGA II Adapter
00:10.0 SCSI storage controller: LSI Logic /
Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
02:00.0 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB
02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)
02:02.0 Multimedia audio controller: Ensoniq ES1371 [AudioPCI-97] (rev 02)
02:03.0 USB Controller: VMware Inc Abstract USB2 EHCI Controller
JBO:~ #
在這里,以太網網卡上找到了PCI地址02:01.0。這個網卡是AMD 79c970(括號之間),并且需要PCnet32 kernel內核模塊定位這個網卡。
下一步是檢查反映在/sys架構里的硬件配置。每個PCI設備都在這里存儲了自己的配置,本例中還包括網卡配置,它存儲在目錄/sys/bus /pci/devices/0000:02:01.0里,這反映了設備在PCI bus上地址。下面是該目錄內容的例子:
JBO:/sys/bus/pci/devices/0000:02:01.0 # ls -l
total 0
-rw-r--r-- 1 root root 4096 Oct 18 07:08 broken_parity_status
-r--r--r-- 1 root root 4096 Oct 17 07:50 class
-rw-r--r-- 1 root root 256 Oct 17 07:50 config
-r--r--r-- 1 root root 4096 Oct 17 07:50 device
lrwxrwxrwx 1 root root 0 Oct 17 07:51 driver -> ../../../../bus/pci/drivers/pcnet32
-rw------- 1 root root 4096 Oct 18 07:08 enable
lrwxrwxrwx 1 root root 0 Oct 18 07:08 firmware_node ->
../../../LNXSYSTM:00/device:00/PNP0A03:00/device:06/device:08
-r--r--r-- 1 root root 4096 Oct 17 07:50 irq
-r--r--r-- 1 root root 4096 Oct 18 07:08 local_cpulist
-r--r--r-- 1 root root 4096 Oct 18 07:08 local_cpus
-r--r--r-- 1 root root 4096 Oct 17 07:53 modalias
-rw-r--r-- 1 root root 4096 Oct 18 07:08 msi_bus
drwxr-xr-x 3 root root 0 Oct 17 07:50 net
-r--r--r-- 1 root root 4096 Oct 18 07:08 numa_node
drwxr-xr-x 2 root root 0 Oct 18 07:08 power
-r--r--r-- 1 root root 4096 Oct 17 07:50 resource
-rw------- 1 root root 128 Oct 18 07:08 resource0
-r-------- 1 root root 65536 Oct 18 07:08 rom
lrwxrwxrwx 1 root root 0 Oct 17 07:50 subsystem -> ../../../../bus/pci
-r--r--r-- 1 root root 4096 Oct 17 07:51 subsystem_device
-r--r--r-- 1 root root 4096 Oct 17 07:51 subsystem_vendor
-rw-r--r-- 1 root root 4096 Oct 17 07:51 uevent
-r--r--r-- 1 root root 4096 Oct 17 07:50 vendor
JBO:/sys/bus/pci/devices/0000:02:01.0 #
檢修中最有趣的條款是到驅動目錄的鏈接文件。本例中指向pcnet32驅動,并使用lspci提供的信息,我們知道這是正確的驅動。
多數情況下,Linux安裝的驅動運行得很好。有些情況下則不好。當使用Broadcom網卡配置Dell服務器,我發現一些問題,用于巨型幀包的 ping命令可能引起內核異常。這樣的話,首先懷疑用于網卡的相同內核驅動。一種好的檢修方式是從你所使用的驅動版本開始。通過在驅動本身使用 modinfo命令查找。下面是在 pcnet32驅動上使用modinfo的例子:
JBO:/ # modinfo pcnet32
filename: /lib/modules/2.6.27.19-5-pae/kernel/drivers/net/pcnet32.ko
license: GPL
description: Driver for PCnet32 and PCnetPCI based ethercards
author: Thomas Bogendoerfer
srcversion: 261B01C36AC94382ED8D984
alias: pci:v00001023d00002000sv*sd*bc02sc00i*
alias: pci:v00001022d00002000sv*sd*bc*sc*i*
alias: pci:v00001022d00002001sv*sd*bc*sc*i*
depends: mii
supported: yes
vermagic: 2.6.27.19-5-pae SMP mod_unload modversions 586
parm: debug:pcnet32 debug level (int)
parm: max_interrupt_work:pcnet32 maximum events handled per interrupt (int)
parm: rx_copybreak:pcnet32 copy breakpoint for copy-only-tiny-frames (int)
parm: tx_start_pt:pcnet32 transmit start point (0-3) (int)
parm: pcnet32vlb:pcnet32 Vesa local bus (VLB) support (0/1) (int)
parm: options:pcnet32 initial option setting(s) (0-15) (array of int)
parm: full_duplex:pcnet32 full duplex setting(s) (1) (array of int)
parm: homepna:pcnet32 mode for 79C978 cards
(1 for HomePNA, 0 for Ethernet, default Ethernet (array of int)
modinfo命令將為每個模塊提供不同的有用信息。如果包括版本號,查看可用的升級版,下載并安裝。
當與一些硬件使用時,你也應該檢查使用的是何種模塊。如果模塊是開源的,通常可用通過Linux社區徹底檢查開源模塊。如果是這樣,你的內核顯示受到 “污染”。受感染的內核是載入了一些模塊的內核,不由Linux內核社區控制。要查找這是否出現在你的系統上,可以檢查/proc/sys/kernel /tainted文件里的內容。如果這個文件內容為0,沒有載入私有模塊。如果有1個,那么載入了專有模塊,并且如果你將私有模塊替換成開源模塊,就可能 修復問題。
要確定你遇到的問題與網絡相關很簡單:如果你的計算機不能與其他計算機通信,網絡就有問題。但是很難找到問題根源。你需要從分析網絡通信里包含的各種 元素入手。
如果你的主機需要與網絡中的其他主機通信,必須具備以下條件:
1.安裝了網卡并能用于操作系統,例如載入了正確驅動。
2.網卡分配有IP地址。
3.計算機能與同個網絡中的其他主機通信。
4.計算機能與其他網絡中的其他主機通信。
5.計算機能使用其主機名與其他主機通信。
解決網絡驅動問題
要與網絡上的其他計算機通信,你的計算機需要一個網絡接口。計算機要獲取網絡接口的方式設計得很好。在系統啟動期間,內核探測不同的可用接口,一般位 于PCI bus上,找到一個網卡。接下來確定需要哪個驅動記錄網卡,驅動是否可用,它將記錄網卡。隨后,udev daemon(udevd)在計算機的初始啟動階段啟動,并創建網絡設備。在只有一個網絡接口的計算機里,這一般是eth0設備,不過隨后其他設備也能使 用。一旦載入接口,下一步驟為網卡獲取IP地址就可以跳過。
正如我們所討論的,為網卡正確載入驅動包含以下一些條款:
1.內核探測PCI bus。
2.基于信息查找載入到PCI bus的驅動。
3.Udev創建網絡接口。
要修復網絡問題,通過確定網卡是否真的在PCI-bus上開始。可以使用lspci命令進行確認。下面是lspci的例子:
JBO:~ # lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:07.7 System peripheral: VMware Inc Virtual Machine Communication Interface (rev 10)
00:0f.0 VGA compatible controller: VMware Inc Abstract SVGA II Adapter
00:10.0 SCSI storage controller: LSI Logic /
Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
02:00.0 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB
02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)
02:02.0 Multimedia audio controller: Ensoniq ES1371 [AudioPCI-97] (rev 02)
02:03.0 USB Controller: VMware Inc Abstract USB2 EHCI Controller
JBO:~ #
在這里,以太網網卡上找到了PCI地址02:01.0。這個網卡是AMD 79c970(括號之間),并且需要PCnet32 kernel內核模塊定位這個網卡。
下一步是檢查反映在/sys架構里的硬件配置。每個PCI設備都在這里存儲了自己的配置,本例中還包括網卡配置,它存儲在目錄/sys/bus /pci/devices/0000:02:01.0里,這反映了設備在PCI bus上地址。下面是該目錄內容的例子:
JBO:/sys/bus/pci/devices/0000:02:01.0 # ls -l
total 0
-rw-r--r-- 1 root root 4096 Oct 18 07:08 broken_parity_status
-r--r--r-- 1 root root 4096 Oct 17 07:50 class
-rw-r--r-- 1 root root 256 Oct 17 07:50 config
-r--r--r-- 1 root root 4096 Oct 17 07:50 device
lrwxrwxrwx 1 root root 0 Oct 17 07:51 driver -> ../../../../bus/pci/drivers/pcnet32
-rw------- 1 root root 4096 Oct 18 07:08 enable
lrwxrwxrwx 1 root root 0 Oct 18 07:08 firmware_node ->
../../../LNXSYSTM:00/device:00/PNP0A03:00/device:06/device:08
-r--r--r-- 1 root root 4096 Oct 17 07:50 irq
-r--r--r-- 1 root root 4096 Oct 18 07:08 local_cpulist
-r--r--r-- 1 root root 4096 Oct 18 07:08 local_cpus
-r--r--r-- 1 root root 4096 Oct 17 07:53 modalias
-rw-r--r-- 1 root root 4096 Oct 18 07:08 msi_bus
drwxr-xr-x 3 root root 0 Oct 17 07:50 net
-r--r--r-- 1 root root 4096 Oct 18 07:08 numa_node
drwxr-xr-x 2 root root 0 Oct 18 07:08 power
-r--r--r-- 1 root root 4096 Oct 17 07:50 resource
-rw------- 1 root root 128 Oct 18 07:08 resource0
-r-------- 1 root root 65536 Oct 18 07:08 rom
lrwxrwxrwx 1 root root 0 Oct 17 07:50 subsystem -> ../../../../bus/pci
-r--r--r-- 1 root root 4096 Oct 17 07:51 subsystem_device
-r--r--r-- 1 root root 4096 Oct 17 07:51 subsystem_vendor
-rw-r--r-- 1 root root 4096 Oct 17 07:51 uevent
-r--r--r-- 1 root root 4096 Oct 17 07:50 vendor
JBO:/sys/bus/pci/devices/0000:02:01.0 #
檢修中最有趣的條款是到驅動目錄的鏈接文件。本例中指向pcnet32驅動,并使用lspci提供的信息,我們知道這是正確的驅動。
多數情況下,Linux安裝的驅動運行得很好。有些情況下則不好。當使用Broadcom網卡配置Dell服務器,我發現一些問題,用于巨型幀包的 ping命令可能引起內核異常。這樣的話,首先懷疑用于網卡的相同內核驅動。一種好的檢修方式是從你所使用的驅動版本開始。通過在驅動本身使用 modinfo命令查找。下面是在 pcnet32驅動上使用modinfo的例子:
JBO:/ # modinfo pcnet32
filename: /lib/modules/2.6.27.19-5-pae/kernel/drivers/net/pcnet32.ko
license: GPL
description: Driver for PCnet32 and PCnetPCI based ethercards
author: Thomas Bogendoerfer
srcversion: 261B01C36AC94382ED8D984
alias: pci:v00001023d00002000sv*sd*bc02sc00i*
alias: pci:v00001022d00002000sv*sd*bc*sc*i*
alias: pci:v00001022d00002001sv*sd*bc*sc*i*
depends: mii
supported: yes
vermagic: 2.6.27.19-5-pae SMP mod_unload modversions 586
parm: debug:pcnet32 debug level (int)
parm: max_interrupt_work:pcnet32 maximum events handled per interrupt (int)
parm: rx_copybreak:pcnet32 copy breakpoint for copy-only-tiny-frames (int)
parm: tx_start_pt:pcnet32 transmit start point (0-3) (int)
parm: pcnet32vlb:pcnet32 Vesa local bus (VLB) support (0/1) (int)
parm: options:pcnet32 initial option setting(s) (0-15) (array of int)
parm: full_duplex:pcnet32 full duplex setting(s) (1) (array of int)
parm: homepna:pcnet32 mode for 79C978 cards
(1 for HomePNA, 0 for Ethernet, default Ethernet (array of int)
modinfo命令將為每個模塊提供不同的有用信息。如果包括版本號,查看可用的升級版,下載并安裝。
當與一些硬件使用時,你也應該檢查使用的是何種模塊。如果模塊是開源的,通常可用通過Linux社區徹底檢查開源模塊。如果是這樣,你的內核顯示受到 “污染”。受感染的內核是載入了一些模塊的內核,不由Linux內核社區控制。要查找這是否出現在你的系統上,可以檢查/proc/sys/kernel /tainted文件里的內容。如果這個文件內容為0,沒有載入私有模塊。如果有1個,那么載入了專有模塊,并且如果你將私有模塊替換成開源模塊,就可能 修復問題。
轉載于:https://blog.51cto.com/tonyzeng/327467
總結
以上是生活随笔為你收集整理的如何解决与驱动相关的Linux网络问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 诺顿本月将发布儿童网络安全软件
- 下一篇: 推荐一个短小精干的JavaScript对