歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> Linux下網卡設置常見問題(5)

Linux下網卡設置常見問題(5)

日期:2017/2/27 14:22:56   编辑:更多Linux
  Alpha/AXP的PCI板上的Linux以太網卡     對於v2.0,只有3c509、depca、de4x5、pcnet32和所有8390驅動程序(wd、smc-ultra、ne、3c503等等)是編寫成“結構無關”的,所以它們可以運行在基於DEC的Alpha CPU系統上。其它一些從Donald的WWW主頁上下載的更新過的PCI驅動程序也可以工作,因為它們也是按照結構無關的思想編寫的。     注意,使驅動程序與結構無關所需要進行的改動並不很復雜。只需要如下進行:     --把所有與jiffies有關的值都乘以HZ/100,得到Alpha使用的不同的HZ值。(即timeout=2;變成timeout=2*HZ/100;)     --把所有I/O內存(從640k到1MB)的指針引用替換為相應的readb() writeb() readl() writel()調用,如下例所示。       --------------------------------------------------------------------------------     - int *mem_base = (int *)dev->mem_start;   - mem_base[0] = 0xba5eba5e;   + unsigned long mem_base = dev->mem_start;   + writel(0xba5eba5e, mem_base);       --------------------------------------------------------------------------------     --把所有使用I/O內存作為源或目的地址的memcpy()調用替換為相應的memcpy_fromio()或者memcpy_toio()調用。     以結構無關的方式處理內存訪問的細節在近期的內核所附的文件linux/Documentation/IO-mapping.txt中進行了說明。       SUN/Sparc硬件上的Linux以太網卡   要得到最新的Sparc信息,可以訪問以下URL:     Linux Sparc     注意,有些Sparc的以太網硬件從主機獲得其MAC地址,因此可能會有多個接口具有相同的MAC地址。如果想在同一個網絡上使用多個接口,可以使用ifconfig的hw選項以分配唯一的MAC地址。     把PCI驅動程序移植到Sparc平台上與上面提到的AXP平台相似。可能的差異出在endian上,因為Sparc是big endian,而AXP和ix86是little endian。       其它硬件上的Linux以太網卡   還有一些其它硬件平台可以運行Linux,比如Atari/Amiga(m68k)。就象Sparc一樣,最好是訪問每個Linux支持的平台主頁,以了解當前都支持哪些硬件。(歡迎提供這樣的站點連接――把它們發給我!)       不使用Hub連接10/100BaseT   可以不使用Hub連接基於10/100BaseT(RJ45)的系統嗎?     如果不使用額外的設備或機械裝置,可以很容易地連接兩台這樣的機器,但不可能再多。參閱雙絞線――解釋了如何做到這一點。而且你不可能簡單地交叉幾根線或其它什麼就弄出一個Hub,不復制Hub也無法正確完成沖突信號。       SIOCSIFxxx: No sUCh device   在啟動時出現了一大堆“SIOCSIFxxx: No such device”信息,後面還有一條“SIOCADDRT: Network is unreachable”,怎麼回事?     你的以太網設備在啟動/插入模塊時沒有被檢測到,當ifconfig和route運行時,它們沒有可用的設備。使用dmesg more來浏覽啟動信息,看看有沒有檢測以太網卡的信息。       SIOCSFFLAGS: Try again   在運行“ifconfig”時出現“SIOCSFFLAGS: Try again”――怎麼回事?     某些其它的設備使用了以太網卡想用的IRQ,所以以太網卡無法使用該IRQ。你不必重新啟動來解決這個問題,因為某些設備只是在需要時才獲取IRQ,在完成後就釋放了。例如某些聲卡、串口、軟盤驅動器等。你可以鍵入cat /proc/interrupts來看看哪些中斷正在被使用。絕大多數Linux以太網卡驅動程序只有在用“ifconfig”打開時才獲取IRQ。如果你能讓其它設備“放開”所需的IRQ中斷線,那麼你就可以用ifconfig來“再試一下”了。       使用“ifconfig”得到的連接為UNSPEC,而硬件地址是00:00:00:00:00:00   在不帶參數運行ifconfig時,報告說連接為UNSPEC(而不是10Mbs以太網),而且硬件地址都是零。     這是因為運行的“ifconfig”程序版本比內核的版本高。在與老版本的內核一起運行時,新版本的ifconfig無法報告這些特性。你可以升級內核,或者“降級”ifconfig,或者干脆不理會這個錯誤。內核知道硬件地址,所以即使ifconfig無法讀出它也沒有關系。     如果使用的ifconfig程序比使用的內核舊很多的話,也會出現一些奇怪的信息。       大量的RX和TX錯誤   在不帶參數運行ifconfig時,報告大量的接收和發送數據包錯誤。但看起來工作正常――怎麼回事?     再看一遍。報告是說RX packets big number 停頓 errors 0 停頓 dropped 0 停頓 overrun 0。所以你看到的那個大數字是機器接收和發送的數據包總數。如果還覺得不可思議,鍵入cat /proc/net/dev試試。       /dev/下以太網卡的入口   /dev/eth0象是個到/dev/xxx的連接。這樣對嗎?     與你聽過的正好相反,/dev/*下的文件沒被使用。你可以刪除掉任何/dev/wd0, /dev/ne0以及類似的入口。       Linux與“trailers”   在“ifconfig”網卡時,需要禁止trailers嗎?     不能禁止trailers,而且也沒必要。“trailers”是避免在網絡層復制數據的工具。其想法是使用一個大小為“H”的固定大小的頭,把可變大小的頭信息放在包的尾部,並把所有包定位在頁開始之前的“H”字節。這只是個好想法,在實際中工作得並不好。如果有人建議使用“-trailers”,那不過是找個替罪羊罷了。這對解決問題沒有任何意義,但如果問題真的自行解決了,那麼他就可以吹噓自己的神奇本領了。       訪問原始以太網設備   在Linux下怎樣不通過TCP/IP之類的東西訪問原始的以太網設備?       --------------------------------------------------------------------------------     int s=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL));       --------------------------------------------------------------------------------     這樣就可以得到一個接收所有協議類型的socket。對它執行recvfrom()調用,它就會用sa_family裡的設備類型和sa_data數組裡的設備名來填充sockaddr。我不知道是誰最早在Linux裡使用SOCK_PACKET,但它確實是個非常好的東西。你也可以通過sendto()調用發送原始數據包。當然,在這樣做時你必須擁有root的權限。




Copyright © Linux教程網 All Rights Reserved