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).