1. 程式人生 > >安裝ubuntu16.04 LTS後無網路連線的解決方法

安裝ubuntu16.04 LTS後無網路連線的解決方法

本文適用情況:1.系統安裝後無法識別有線網絡卡(Windows是正常的) 2. I219-V網絡卡或者I218網絡卡

解決方法一:

1、檢視是否安裝網絡卡驅動      開啟終端,輸入ifconfig –a,如果出現“本地環回”字樣,說明網絡卡驅動未安裝。 

 2、檢視網絡卡型號      終端輸入lspci,檢視網絡卡型號,本文只針對I219-V網絡卡驅動。  

3、下載e1000e網絡卡驅動,下載地址https://downloadcenter.intel.com/zh-cn/download/15817?_ga=1.159975677.114505945.1484457019      因官網i219-V驅動無法安裝成功,google發現e1000e可以支援I2xx網絡卡(見參考資料1)。 

 4、拷貝下載的tar.gz檔案至選擇的目錄,如使用 "/home/< 使用者名稱 >/e1000E”或“ /usr/local/src/e1000E”。 

 5、解壓縮檔案,<x.x.x>, 其中是驅動程式 tar 檔案的版本號:      tar zxf E1000E-<x.x.x>.tar.gz 

 6、切換到驅動程式 src 目錄下, 其中 x.x.x<> 是驅動程式 tar 檔案的版本號:      cd e1000E-x.x.x<>/src/ 

 7、編譯驅動程式模組(需root使用者):      make install  

8、使用 modprobe 命令載入模組:      modprobe e1000e

9、 如果不行,可進入驅動的目錄 sudo insmod /lib/modules/3.16.0-30-generic/updates/drivers/net/ethernet/intel/ethernet/intel/e1000e/e1000e.ko

解決方法二:

    該方法是在上面方法仍然無法奏效的情況,這種情況比較極端,但是本人遇到了,是網絡卡晶片內部有問題。

1、在insmod 驅動之後無反應。

$ dmesg | grep e1000e
[    5.643760] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    5.643761] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    5.644308] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[    5.877838] e1000e 0000:00:1f.6: The NVM Checksum Is Not Valid
[    5.907340] e1000e: probe of 0000:00:1f.6 failed with error -5
檢視除錯資訊可以看到報出了一個錯誤 The NVM Checksum is not valid。

2、我們去看這個驅動的原始碼 nvm.c 

s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
	s32 ret_val;
	u16 checksum = 0;
	u16 i, nvm_data;

	for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) {
		ret_val = e1000_read_nvm(hw, i, 1, &nvm_data);
		if (ret_val) {
			e_dbg("NVM Read Error\n");
			return ret_val;
		}
		checksum += nvm_data;
	}

	if (checksum != (u16)NVM_SUM) {
		e_dbg("NVM Checksum Invalid\n");
		return -E1000_ERR_NVM;
	}

	return 0;
}

修改這個函式 ,直接強制返回0
s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
	s32 ret_val;
	u16 checksum = 0;
	u16 i, nvm_data;

	return 0;
}

從新編譯驅動在src資料夾中make ,把e1000e.ko考到上面那個驅動資料夾中 ,先rmmod e1000e.ko  再insmod e1000e.ko;就可以解決這個問題。

總結一下:這個問題是由於網絡卡晶片內部一部分記憶體有問題導致的,程式碼修改之後就不會再去檢查這片記憶體。開源系統linux的好處之一就是可以自己去修改程式碼。

參考連結:1、http://www.mamicode.com/info-detail-1710888.html

2、https://unix.stackexchange.com/questions/294753/intel-ethernet-connection-i219-v-not-working-under-linux-on-an-asuspro-b-laptop