GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memperbaiki checksum memori non-volatile (NVM) Intel Ethernet Controller I219-V laptop ASUS?

Sebelum mencoba solusi saya, pertimbangkan untuk mencoba yang pertama oleh ppparadox.

Dengan bantuan dari e1000-devel milis, inilah cara saya memperbaiki NVM kata Checksum menggunakan ethtool .

tl;dr: Pada dasarnya, saya pertama kali menambal e1000e untuk memiliki akses ke chip Ethernet di Linux, lalu menggunakan ethtool untuk membaca nilai dari wilayah "checksum" NVM I219-V saya dan kemudian menuliskannya kembali. Operasi penulisan memperbaiki checksum.

Untuk mengakses chip Ethernet saya dari Linux, saya harus menambal e1000e untuk melewatkan validasi checksum NVM. Dalam file src/netdev.c , saya mengubah baris pertama dari

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

ke dalam

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

(Seluruh blok juga bisa dihapus atau dikomentari.)

Kemudian saya menginstal modul yang ditambal. Dari /src direktori yang saya lakukan:

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

Sekarang validasi checksum dilewati dan Ethernet mulai berfungsi.

Sebelum memperbaiki kata Checksum, saya melihat garis besar NVM I219 yang disajikan di Bagian 10 lembar data Intel. Penggunaan kata Checksum dijelaskan di Bagian 10.3.2.2.

Saya mencatat kata Checksum sebelum menulis ke NVM:

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

(enp0s31f6 adalah nama antarmuka Ethernet saya.) Jadi nilai kata Checksum yang salah adalah 0x1360 .

Saya melihat dump NVM dengan sudo ethtool -e enp0s31f6 dan kemudian melihat kembali byte pada offset 0x10:

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

(Tampaknya lokasi mana pun bisa digunakan, tetapi saya diberi tahu bahwa dalam kasus saya, nilai pada offset 0x10 tidak digunakan sama sekali, jadi sepertinya "lebih aman".)

Untuk menulis ke NVM (EEPROM) dengan ethtool , saya membutuhkan "kunci ajaib". Saya membaca Membongkar antarmuka jaringan Intel Pro/1000 (e1000) dan menemukan bahwa kunci ajaib saya adalah 0x15708086 menggunakan lspci -nn :

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

Lalu saya menulis 0xff kembali ke offset 0x10 di NVM:

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

Setelah membandingkan dump NVM sebelum dan sesudah penulisan, saya dapat melihat bahwa, seperti yang diharapkan, satu-satunya hal yang berubah adalah kata Checksum:

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

Nilai barunya adalah 0x9360 .

Saya mem-boot kernel dengan e1000e yang belum ditambal , dan port Ethernet berfungsi dengan baik.

P.S. Saya merasa agak khawatir bahwa hanya bit tertinggi dalam kata Checksum yang salah.


Saya menggunakan bootutil untuk Linux dari Intel (seperti yang disarankan dalam posting 2011) pada Intel NIC terintegrasi pada Asus Z270-A saya untuk memperbaiki kesalahan ini, tanpa kompilasi ulang dan kunci ajaib yang dibahas dalam jawaban yang dipilih. Ini bekerja dengan baik. Saya mengunduh alat dari situs unduhan Intel

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

Saya mendapatkan kesalahan yang sama di Fedora 24 dari e1000e driver dengan motherboard ASUS ROG MAXIMUS IX HERO yang memiliki adaptor Intel I219-V NIC.

Saya menemukan solusi yang diterima, yang membutuhkan patch NVM, terlalu berisiko. Ini dapat membuat perangkat keras Anda tidak berguna.

Salah satu solusi yang aman adalah menerapkan konfigurasi default ke NIC menggunakan Intel Ethernet Connections Boot Utility. Ia bekerja di Linux di luar kotak, tidak perlu membuat boot disk:

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

Hanya itu saja. Nyalakan ulang (atau muat ulang e1000e driver secara manual).


Linux
  1. Linux – Bagaimana Mendapatkan Jumlah Memori Yang Tersedia Secara Portabel di Seluruh Distribusi?

  2. Bagaimana Cara Mengisi 90% Dari Memori Gratis?

  3. Bagaimana Cara Memperbaiki Instalasi?

  1. Cara memverifikasi integritas file dengan md5 checksum

  2. Cara melepaskan halaman besar dari aplikasi yang macet

  3. Bagaimana saya bisa memesan satu blok memori dari kernel Linux?

  1. Bagaimana saya bisa mengukur penggunaan memori sebenarnya dari suatu aplikasi atau proses?

  2. Bagaimana menemukan informasi tentang RAM?

  3. Bagaimana membatasi total sumber daya (memori) dari suatu proses dan anak-anaknya