5

У меня проблема с новым ноутбуком ASUSPRO B8430UA : его Intel Ethernet Connection I219-V не работает под Linux. На самом деле, я попробовал два разных ноутбука этой модели, и у обоих была одна и та же проблема.

Драйвер Linux используется e1000e, он выдает следующие сообщения при загрузке Linux (Ubuntu 16.04):

$ 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 

Я попытался установить последнюю версию 3.3.4 e1000e, но это не помогло (хотя я испортил ядро).

Я задал вопросы по этому поводу в списке рассылки e1000-devel , и мне посоветовали связаться с производителем моего ноутбука, потому что "Контрольная сумма NVM неверна" означает, что содержимое энергонезависимой памяти моего чипа Ethernet повреждено, или, по крайней мере, это не соответствует контрольной сумме (к сожалению, я не специалист и не могу объяснить это более точно).

Я задал вопрос в службу поддержки Intel, и они ответили, что они не заботятся о системах OEM (встроенные чипы Ethernet в ноутбуках) и что мне следует обратиться в ASUS:

К сожалению, так как ваша система является OEM, наши варианты поддержки крайне ограничены. Возможно, производитель ноутбука изменил программное или аппаратное обеспечение, поэтому поддержка и драйверы для таких систем предоставляются непосредственно производителем ноутбука.

Я связался со службой поддержки ASUS, но они ответили, что у них нет инструментов для проверки или восстановления содержимого NVM, и что, если я найду такие инструменты, они будут рады узнать об этом. Они также объяснили, что они должны поддерживать только исходную аппаратную и программную конфигурацию, и эта модель ноутбука продается с Windows 7. Под Windows 7 мой Ethernet работает нормально. Согласно тому, что я узнал, Windows просто не проверяет контрольную сумму NVM.

Я обнаружил, что в одном подобном случае в 2011 году проблему можно было решить с помощью утилиты загрузки Intel Ethernet Connections:

https://thesorcerer.wordpress.com/2011/07/01/guide-intel-82573l-gigabit-ethernet-with-ubuntu-11-04-and-fix-pxe-e05/

Тем не менее, ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ в последнем абзаце предупреждает:

Вам, вероятно, нужно знать, что утилита Intel(R) Ethernet Connections Boot UI НЕ предназначена для использования с встроенными (также известными как OEM) сетевыми картами (для плат PCI), поэтому нет точного способа предсказать его взаимодействие с другие компоненты платы, такие как USB или SOUND контроллеры.

Описание BootUtil версии 1.6.13.0 также говорит о том, что он не предназначен для использования с встроенными контроллерами Ethernet:

Утилита прошивки Intel(R) для флэш-памяти Ethernet (BootUtil) - это утилита, которую можно использовать для программирования дополнительного ПЗУ PCI во флэш-памяти поддерживаемых сетевых адаптеров на основе Intel PCI и PCI-Express, а также для обновления конфигураций.

[...]

OEM-производители могут предоставлять собственные образы прошивки для сетевых адаптеров OEM-производителей. Пожалуйста, обратитесь к инструкциям, данным OEM.

Однако есть параграф, который я не понял:

Комбинации образов PXE+EFI и iSCSI+EFI поддерживаются для всех универсальных адаптеров OEM, однако поддержка ограничена устройствами, которые поддерживают обе технологии в виде дискретных образов.

Кроме того, в комментарии 5 на 2008 вопрос , где NVM получал испорченного из - за драйвера e1000e ошибки, рекомендуется:

Пожалуйста, НЕ запускайте ibautil, так как некоторые сайты в Интернете предлагают решить эту проблему. Скорее всего, вам придется заменить материнскую плату, чтобы вернуть работоспособность локальной сети.

IBAUTIL является одним из предшественников BootUtil.

В любом случае я решил запустить BootUtil из-под Linux без параметров командной строки, чтобы получить «список всех поддерживаемых сетевых портов Intel, найденных в системе». Вот что у меня есть:

$ 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" в этом контексте, и какие у меня есть варианты для исправления контрольной суммы.


Обновление 1. Согласно комментарию, который я получил из списка рассылки e1000-devel о "FLASH Not Present",

Вспышка и NVM - это две разные вещи. Флэш-память обеспечивает такие вещи, как загрузка PXE и iSCSI, тогда как NVM хранит такие вещи, как сетевой адрес.


Обновление 2. Я нашел Intel, техническое описание для I219, раздел 10.3.2.2 Контрольной сумма Слова Расчет говорит:

Слово контрольной суммы (Word 0x3F, байты NVM 0x7E и 0x7F) используется, чтобы убедиться, что базовое изображение NVM является допустимым изображением. Значение этого слова должно быть рассчитано так, чтобы после добавления всех слов (0x00-0x3F) / байтов (0x00-0x7F), включая само слово контрольной суммы, сумма должна была составлять 0xBABA. Начальное значение в 16-битном регистре суммирования должно быть 0x0000, и бит переноса должен игнорироваться после каждого добавления.

6 ответов6

8

С любезной помощью из списка рассылки e1000-devel , вот как я исправил слово NVM Checksum, используя ethtool.

По сути, я сначала исправил e1000e, чтобы иметь доступ к чипу Ethernet в Linux, а затем использовал ethtool чтобы прочитать значение из области "контрольной суммы" NVM моего I219-V и затем записать его обратно. Операция записи исправила контрольную сумму.

Чтобы получить доступ к моему Ethernet-чипу из Linux, мне пришлось пропатчить e1000e, чтобы пропустить проверку контрольной суммы NVM. В файле src/netdev.c я изменил первую строку

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;
    }
}

в

for (i = 0; false; i++) {

(Весь блок также может быть просто удален или закомментирован.)

Затем я установил пропатченный модуль. Из каталога /src я сделал:

sudo make install
sudo modprobe -r e1000e
sudo modprobe e1000e
sudo update-initramfs -u
reboot

Теперь проверка контрольной суммы была пропущена, и Ethernet начал работать.

Прежде чем исправить слово «Контрольная сумма», я изучил схему NVM I219, представленную в разделе 10 спецификации Intel. Использование слова контрольной суммы объясняется в разделе 10.3.2.2.

Перед записью в NVM я заметил слово Checksum:

$ sudo ethtool -e enp0s31f6 offset 0x7e length 2
Offset      Values
------      ------
0x007e:     60 13 

(enp0s31f6 - это имя моего интерфейса Ethernet.) Таким образом, ошибочное значение слова контрольной суммы было 0x1360 .

Я посмотрел на дамп NVM с помощью sudo ethtool -e enp0s31f6 а затем снова посмотрел на байт со смещением 0x10:

$ sudo ethtool -e enp0s31f6 offset 0x10 length 1
Offset      Values
------      ------
0x0010:     ff 

(Очевидно, что любое местоположение подойдет, но мне сказали, что в моем случае значение со смещением 0x10 вообще не использовалось, поэтому оно казалось "более безопасным".)

Для записи в NVM (EEPROM) с помощью ethtool мне понадобился «волшебный ключ». Я прочитал Unbricking сетевой интерфейс Intel Pro/1000 (e1000) и выяснил, что мой магический ключ был 0x15708086 используя lspci -nn:

$ lspci -nn | grep Ethernet
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection I219-V [8086:1570] (rev 21)

Затем я записал 0xff обратно в смещение 0x10 в NVM:

$ sudo ethtool -E enp0s31f6 magic 0x15708086 offset 0x10 value 0xff

После сравнения дампов NVM до и после записи я понял, что, как и ожидалось, единственное, что изменилось, это слово контрольной суммы:

$ sudo ethtool -e enp0s31f6 offset 0x7e length 2
Offset      Values
------      ------
0x007e:     60 93 

Таким образом, новое значение было 0x9360 .

Я загрузил ядро с незапатченным e1000e, и порт Ethernet работал нормально.

PS Я немного волнуюсь, что только самый старший бит в слове контрольной суммы был неправильным.

5

Я использовал bootutil для Linux от Intel (как предложено в посте 2011 года) на интегрированной сетевой карте Intel на моем Asus Z270-A, чтобы исправить эту ошибку, без перекомпиляции и магических ключей, которые обсуждались в ответе с голосованием. Это работало отлично. Я скачал инструмент с сайта загрузки Intel

chmod +x ./bootutil64e
sudo ./bootutil64e -NIC 1 -defcfg
3

Я получал ту же ошибку на Fedora 24 от драйвера e1000e с материнской платой ASUS ROG MAXIMUS IX HERO, в которой установлен адаптер Intel I219-V NIC.

Я считаю принятое решение, которое требует исправления NVM, слишком рискованным. Это может сделать ваше оборудование бесполезным.

Одно безопасное решение - применить конфигурацию по умолчанию к сетевой карте с помощью утилиты загрузки Intel Ethernet Connections. Он работает в Linux из коробки, не нужно создавать загрузочный диск:

$ chmod +x bootutil64e
$ sudo ./bootutil64e -NIC=1 -DEFAULTCONFIG

Вот и все. Просто перезагрузите компьютер (или перезагрузите драйвер e1000e вручную).

1

пытаться:

$ sudo ./bootutil64e -NIC=XXX -BOOTENABLE=DISABLED.

Это должно сработать в последних версиях bootutil64e .

1

У меня была такая же ошибка, и я хотел попробовать все остальное, прежде чем играть с битами NVM.

Я не уверен, что именно это решило проблему, но последнее, что я сделал до того, как это снова волшебным образом заработало, была попытка загрузки по сети с UEFI (IPv4). Тогда какая-то черная магия, должно быть, исправила мой NVM.

Среда

  • Материнская плата: Asus PRIME Z270-A (BIOS 0701)
  • NIC: 00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I219-V [8086:15b8]
0

Мое решение намного проще:

- войти в утилиту UEFI BIOS;
- войти в расширенный режим
- Перейдите в « Advanced\Network Stack Configuration» и просто включите сетевой стек (я только позволил IPv4 безопасно оставаться за своим NAT).

Перезагрузитесь и наслаждайтесь вашей сетевой картой. Очевидно, этого достаточно, чтобы как-то очистить неверную контрольную сумму NVM. Затем вы можете вернуться и отключить указанный стек.
Это под BIOS версии 8001 на материнской плате Asus Prime z270-a (драйвер e1000e в Arch Linux, ядро 4.9.11-1).

Возможно, что вызвало эту проблему, когда я попытался обновить прошивку через Интернет напрямую через утилиту EZ Flash (и не смог сделать это как для режима DHCP, так и для режима статического IP). Я помню, как утилита спрашивала, может ли она включить сетевой стек (который по умолчанию отключен) для попытки обновления.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .