web-dev-qa-db-ja.com

Intel Ethernet Connection I219-VがASUSPRO Bラップトップ上のLinuxで動作しない、e1000eドライバーが報告する:「NVMチェックサムが無効です」

ASUSPRO B8430UAラップトップ で問題があります。Ubuntu16.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によると、私は Intel(R)Ethernet Connection I219-V を使用しています。

「公式」 Linuxドライバー を検索しましたが、I219-Vをサポートするものとしてリストされていません。ただし、e1000eはI218-Vをサポートするものとしてリストされており、e1000eがI219-Vをサポートする必要があることを e1000-devel メーリングリストから確認しています。 e1000eの最新バージョン3.3.4を使用してみたが、エラーは同じだった場合:「NVMチェックサムが無効です。」

確かに、I219-Vの不揮発性メモリのチェックサムが一致していないようです。

同じモデルの別のASUSラップトップを試しましたが、エラーは同じでしたので、これは偶発的な破損のようには見えません。

ASUSもIntelのカスタマーサポートもソリューションを提案できませんでした。

私は Intel Ethernet Connections Boot Utility を発見しましたが、 documentation (バージョン1.6.13.0の場合)によると、これはPCIのみを対象としており、OEMオンボードのイーサネットカードを対象としていません。ただし、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」の意味がよくわかりません。

NVMチェックサムの修正について question をSuperUser.SEに提示しました。ここで、ASUSPRO B8430UAラップトップ、または「NVMチェックサムが無効です」というエラーが発生したIntelイーサネットコントローラーを搭載したその他のラップトップに、イーサネットを使用してLinuxを正常にインストールできたかどうか、またどのようにしてインストールしたかを尋ねます。

6
Alexey

私はなんとかチェックサムを修正しました。 Linuxでイーサネットが正常に動作するようになりました。 SuperUser.SEの質問に answer で詳細を説明しました。

基本的に、私は最初にパッチを適用しました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、そしてイーサネットチップにアクセスした後、チェックサムを自動的に修正するethtoolを使用してNVMに書き込みました。

2
Alexey

e1000eドライバーは、I2xxインテルイーサネットコントローラーを実行できるドライバーです。そして この記事の執筆時点での最新のe1000eドライバーI219チップを実行できます。

ブート中のThe NVM Checksum Is Not Validメッセージは、古いドライバーのロードを妨げていたものです。他のOS(特にMSウィンドウ)では、そのエラーは無視されます。しかし、Linuxはより厳しいようです。

NVMは、チェックサムを受けるチップ内のROM(読み取り専用メモリ)であり、古いバージョンのe1000ドライバは、新しいチップのNVMの内容を認識していませんでしたこのカードはエラーを無視する他のOSで機能するため、別の可能性として、ドライバーにエラーを無視させることが考えられます。

チェックサムは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_SUMdefine.h内で定義されています

#define NVM_SUM                         0xBABA

カードが実行されていると確信している(そしてNVMチェックサムのために失敗するだけの)場合は、チェックサム関数を編集して次のことを試みることができます。

s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
        return 0;
}

そして、チェックサムが常に成功するように強制します。


追加の(多かれ少なかれ)信頼できる参照:

5
grochmal

詳細なガイドは、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のTestet)

  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_addressは、テスト対象のインターフェースと同じサブネット上の別のマシンのIPアドレスです。ping

  8. ドライバーを永続的にするSudo dpkg-reconfigure linux-image-$(uname -r)

これはpkt 8が行うことだと思います:: ....注:RedHat Enterprise Linux 7やUbuntuなどの特定のディストリビューションでは、ドライバーがインストールされたら、initrd/initramfsファイルを更新して、 OSが古いバージョンのe1000eドライバーをロードしている。 Ubuntuの場合:#update-initramfs -u