我有一个问题华硕 B8430UA 笔记本电脑:当我使用 Ubuntu 16.04(或 NixOS 16.03)启动它时,以太网端口无法工作。使用的驱动程序是e1000e,它报告:
$ 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
在 Windows 7 下以太网端口工作正常:我可以连接到互联网。根据Windows,我有英特尔(R) 以太网连接 I219-V。
我搜索过“官方”Linux驱动程序,但没有被列为支持 I219-V。但是,e1000e 被列为支持 I218-V,并且我已得到来自e1000-开发邮件列表表明 e1000e 应支持 I219-V。以防万一,我尝试使用 e1000e 的最新版本 3.3.4,但错误是相同的:“NVM 校验和无效。”
看来I219-V的非易失性存储器的校验和确实不匹配。
我尝试过另一台同型号的华硕笔记本电脑,错误是相同的,所以这看起来不像是意外损坏。
华硕和英特尔客户支持都无法提出任何解决方案。
我发现了英特尔以太网连接启动实用程序,但根据文档(对于版本 1.6.13.0)它仅适用于 PCI,不适用于 OEM 板载以太网卡。但是,我决定不带参数运行它,只是为了打印英特尔网络端口列表,这就是我得到的:
$ sudo ./bootutil64e
Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.6.13.0
Copyright (C) 2003-2016 Intel Corporation
Type BootUtil -? for help
Port Network Address Location Series WOL Flash Firmware Version
==== =============== ======== ======= === ============================= =======
1 D017C2201F59 0:31.6 Gigabit N/A FLASH Not Present
我不太明白“FLASH Not Present”在这里是什么意思。
我提出了一个问题关于修复 NVM 校验和的 SuperUser.SE。在这里,我想问是否以及如何有人设法在 ASUSPRO B8430UA 笔记本电脑或任何其他具有 Intel 以太网控制器且出现“NVM 校验和无效”错误的笔记本电脑上成功安装具有工作以太网的 Linux。
答案1
该e1000e
驱动程序是可以运行英特尔以太网控制器的驱动程序I2xx
。还有最新的 e1000e 驱动程序(截至撰写本文时)能够运行I219
芯片。
引导期间的消息The NVM Checksum Is Not Valid
是阻止加载旧驱动程序的原因。在其他操作系统(尤其是 MS Windows)上,该错误将被忽略。但Linux似乎更严格。
NVM是芯片中的ROM(只读存储器),需要进行校验和,旧版本的驱动程序e1000
不知道新芯片的NVM内容。由于该卡可在忽略该错误的其他操作系统上运行,因此另一种可能性可能是强制驱动程序忽略该错误。
nvm.c
尽管其他几个模型提供了之前运行的自己的fix_checksum
函数,但校验和是在内部执行的e1000e_validate_nvm_checksum_generic
。
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;
}
NVM_SUM
被定义在里面define.h
#define NVM_SUM 0xBABA
如果您确信该卡可以运行(并且仅由于 NVM 校验和而失败),您可以尝试将校验和函数编辑为:
s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
return 0;
}
并且它将强制校验和始终成功。
额外(或多或少)值得信赖的参考资料:
答案2
我设法修复了校验和。现在以太网在 Linux 下工作得很好。我在我的文章中解释了详细信息回答我的 SuperUser.SE 问题。
基本上,我首先修补e1000e
以跳过 NVM 校验和验证
for (i = 0;; i++) {
if (e1000_validate_nvm_checksum(&adapter->hw) >= 0)
break;
if (i == 2) {
dev_err(pci_dev_to_dev(pdev),
"The NVM Checksum Is Not Valid\n");
err = -EIO;
goto err_eeprom;
}
}
在 中src/netdev.c
,在我访问以太网芯片后,我用 写入其 NVM ethtool
,它会自动修复校验和。
答案3
这是Ubuntu 18.04.1 LTS-支持Intel I219-V的详细指南
从以下位置下载驱动程序
https://downloadcenter.intel.com/download/15817/Intel-Network-Adapter-Driver-for-PCI-E-Gigabit-Network-Connections-under-Linux-?product=71307 (3.4.0.2版本测试)将 zip 解压到您选择的文件夹
更改到驱动程序 src 目录,
例如cd e1000e-3.4.2.1/src/
确保在加载新模块之前从内核中删除所有旧版 e1000e 驱动程序
sudo rmmod e1000e
编译驱动模块:
sudo make install
使用 modprobe 命令加载模块:
sudo modprobe e1000e
二进制文件将安装为:/lib/modules//updates/drivers/net/ethernet/intel/e1000e/e1000e.ko验证接口是否正常工作。输入以下内容,其中 IP_address 是与正在测试的接口位于同一子网上的另一台计算机的 IP 地址: ping
让司机坚持不懈
sudo dpkg-reconfigure linux-image-$(uname -r)
我认为这就是 pkt 8 所做的::.... 注意:对于某些发行版,例如(但不限于)RedHat Enterprise Linux 7 和 Ubuntu,安装驱动程序后,可能需要更新 initrd/initramfs 文件以防止操作系统加载旧版本的 e1000e 驱动程序。对于 Ubuntu:# update-initramfs -u