У меня проблема с ноутбуком ASUSPRO B8430UA: при загрузке это с Ubuntu 16.04 (или NixOS 16.03) порт Ethernet не работает. Используется драйвер 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 порт Ethernet работает нормально: я могу подключиться к Интернету. Согласно Windows у меня есть Intel(R) Ethernet Connection I219- В.

Я искал «официальные» драйверы для Linux, но ни один из них не указан как поддерживающий I219-V. Однако e1000e указан как поддерживающий I218-V, и я получил подтверждение от список рассылки e1000-devel о том, что e1000e должен поддерживать I219-V. На всякий случай я попытался использовать последнюю версию 3.3.4 e1000e, но ошибка была той же: «Контрольная сумма NVM недействительна».

Похоже действительно имеет место несовпадение контрольной суммы энергонезависимой памяти И219-В.

Я попробовал другой ноутбук ASUS той же модели, и ошибка была той же, так что это не похоже на случайное повреждение.

Ни ASUS, ни служба поддержки Intel не смогли предложить никакого решения.

Я обнаружил утилиту загрузки Intel Ethernet Connections, но согласно документация (для версии 1.6.13.0) предназначена только для карт PCI, а не OEM на борту, карт Ethernet . Однако я решил запустить его без параметров, просто чтобы распечатать список сетевых портов 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".

Я задал вопрос на SuperUser.SE об исправлении контрольной суммы NVM. Здесь я спрашиваю, удалось ли и как кому-нибудь успешно установить Linux с работающим Ethernet на ноутбуке ASUSPRO B8430UA или на любых других ноутбуках с контроллерами Intel Ethernet, на которых была ошибка «Контрольная сумма NVM недействительна».

7
Community 20 Мар 2017 в 13:18
Что еще вы знаете о сетевой карте? Кроме того, вывод lspci даст нам некоторую информацию о том, что это за модель.
 – 
grochmal
9 Июл 2016 в 03:24
, я добавил детали. Спасибо за внимание.
 – 
Alexey
9 Июл 2016 в 14:33
Заметил сообщение на tty1 в Ubuntu: «Контрольная сумма NVM недействительна». Не знаю, значит ли это что-нибудь...
 – 
Alexey
9 Июл 2016 в 20:41
Дело не в том, что Intel на самом деле пишет драйверы для Linux, большинство драйверов Intel написано людьми, не связанными с Intel. Было бы полезно иметь две вещи: lspci -v только для контроллера Ethernet (чтобы не загромождать вопрос) и dmesg | grep -i ethernet, чтобы увидеть, что пробовало ядро.
 – 
grochmal
9 Июл 2016 в 22:55
Хорошо, ядро ​​невежественно :). Я бы попробовал этот драйвер, он предназначен для i210/i211, но есть большая вероятность, что он работает, так как в нем указан i218-v (только одна версия чипа отключена). Я проверил его компиляцию, и он отлично скомпилировался даже с ядром 4.x (которое, по его словам, не поддерживает)
 – 
grochmal
10 Июл 2016 в 00:23

3 ответа

Лучший ответ

Мне удалось исправить контрольную сумму. Теперь Ethernet отлично работает под 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, и после того, как я получил доступ к чипу Ethernet, я записал в его NVM с помощью ethtool, что автоматически зафиксировало контрольную сумму.

2
Community 20 Мар 2017 в 13:18
Хорошо, я не думал об использовании ethtool для перезаписи реальной NVM.
 – 
grochmal
30 Июл 2016 в 03:01
Мне помог e1000-devel.
 – 
Alexey
30 Июл 2016 в 08:50

Драйвер e1000e может запускать I2xx Ethernet-контроллеры Intel. И последний драйвер e1000e (на момент написания этой статьи) может работать с чипом I219.

Сообщение The NVM Checksum Is Not Valid во время загрузки мешало загрузке старых драйверов. В других ОС (особенно MS Windows) эта ошибка игнорируется. Но Linux кажется более строгим.

NVM — это ПЗУ (память только для чтения) в микросхеме, которая подвергается проверке контрольной суммы, и более старая версия драйвера 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;
}

И это заставит контрольную сумму всегда быть успешной.


Дополнительные (более или менее) заслуживающие доверия ссылки:

6
grochmal 11 Июл 2016 в 19:00
Я нацелил ответ на людей, которые могут найти вопрос через поиск здесь или через Google. Тем не менее, я считаю, что это пояснение того, что происходит с водителем.
 – 
grochmal
11 Июл 2016 в 05:52
«Драйвер e1000 — это тот, который может запускать Ethernet-контроллеры Intel I2xx», кроме I210 и I211, согласно этому README.
 – 
Alexey
11 Июл 2016 в 10:35
- Упс, да, я имел в виду e1000e. Простите за это. Кроме того, если драйвер будет «исправлен» для I219, все, что будет добавлено, — это функция исправления, подобная *_validate_nvm_checksum_ich8lan, которая обновляет данные, считанные из ПЗУ (NVM), перед вызовом контрольной суммы. Если карта работает на Windows и NixOS, я бы просто взломал драйвер, чтобы он всегда говорил, что контрольная сумма верна (фактически игнорируя ошибку).
 – 
grochmal
11 Июл 2016 в 18:19
Он не работает на NixOS, как и на Ubuntu. Что ж, я вернусь к проблеме Ethernet после того, как мне удастся настроить остальные (двойная загрузка NixOS и Ubuntu).
 – 
Alexey
11 Июл 2016 в 18:35
- Я погуглил, что такое NixOS (да, я не знал, что это такое), и теперь я знаю, что неправильно понял ваш вопрос, когда вы сказали, что загрузили NixOS. NixOS использует ядро ​​​​Linux, поэтому у него точно такая же проблема. Я добавил две забавные ссылки, которые также являются результатом моего недавнего гугления. Сбивает с толку исправление RedHat, в котором код ошибки просто закомментирован (комментарий №12).
 – 
grochmal
11 Июл 2016 в 19:05

Вот подробное руководство Ubuntu 18.04.1 LTS - поддержка Intel I219-V

  1. Загрузите драйвер с
    https://downloadcenter.intel.com/download/15817/Intel-Network-Adapter-Driver-for-PCI-E-Gigabit-Network-Connections-under-Linux-?product=71307 (Тест на версии 3.4.0.2)

  2. Распаковать zip в папку по вашему выбору

  3. Перейдите в каталог src драйвера,
    например cd e1000e-3.4.2.1/src/

  4. Перед загрузкой нового модуля убедитесь, что все старые драйверы e1000e удалены из ядра. sudo rmmod e1000e

  5. Скомпилируйте модуль драйвера: sudo make install

  6. Загрузите модуль с помощью команды modprobe: sudo modprobe e1000e Бинарный файл будет установлен как: /lib/modules//updates/drivers/net/ethernet/intel/e1000e/e1000e.ko

  7. Убедитесь, что интерфейс работает. Введите следующее, где IP_адрес это IP-адрес другого компьютера в той же подсети, что и интерфейс который тестируется: пинг

  8. Сделать драйвер постоянным sudo dpkg-reconfigure linux-image-$(uname -r)

Я думаю, что это то, что делает pkt 8::.... Примечание. Для некоторых дистрибутивов, таких как (но не ограничиваясь ими) RedHat Enterprise Linux 7 и Ubuntu, после установки драйвера может потребоваться обновить файл initrd/initramfs, чтобы предотвратить ОС загружает старые версии драйвера e1000e. Для Ubuntu: # update-initramfs -u

0
Rui F Ribeiro 12 Окт 2018 в 12:25
Насколько я понял, неверная контрольная сумма NVM предотвратит загрузку любого драйвера Ethernet.
 – 
Alexey
8 Окт 2018 в 20:56
Я не могу комментировать это, я просто рискнул и использовал последний драйвер, и он работает безупречно для меня.
 – 
Jesper Martin Schumacher
10 Окт 2018 в 10:59
Вы уверены, что в выходных данных dmesg появилось сообщение «Контрольная сумма NVM недействительна»?
 – 
Alexey
10 Окт 2018 в 11:09
Если нет, то ваш ответ совершенно не по теме.
 – 
Alexey
8 Апр 2021 в 23:03