Avant d'essayer ma solution, pensez d'abord à essayer celle de ppparadox.
Avec l'aimable aide de e1000-devel liste de diffusion, voici comment j'ai corrigé le mot de somme de contrôle NVM en utilisant ethtool
.
tl;dr : En gros, j'ai d'abord patché e1000e pour avoir accès à la puce Ethernet sous Linux, puis j'ai utilisé ethtool
pour lire une valeur de la région "checksummed" de la NVM de mon I219-V, puis pour la réécrire. L'opération d'écriture a fixé la somme de contrôle.
Pour avoir accès à ma puce Ethernet depuis Linux, j'ai dû patcher e1000e pour ignorer la validation de la somme de contrôle NVM. Dans le fichier src/netdev.c
, j'ai changé la première ligne de
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;
}
}
dans
for (i = 0; false; i++) {
(Le bloc entier peut également être simplement supprimé ou commenté.)
Ensuite, j'ai installé le module patché. A partir du /src
répertoire que j'ai fait :
sudo make install
sudo modprobe -r e1000e
sudo modprobe e1000e
sudo update-initramfs -u
reboot
Maintenant, la validation de la somme de contrôle a été ignorée et l'Ethernet a commencé à fonctionner.
Avant de fixer le mot Checksum, j'ai examiné les grandes lignes de la NVM de I219 présentées dans la section 10 de la fiche technique d'Intel. L'utilisation du mot Checksum est expliquée dans la section 10.3.2.2.
J'ai noté le mot Checksum avant d'écrire à la NVM :
$ sudo ethtool -e enp0s31f6 offset 0x7e length 2
Offset Values
------ ------
0x007e: 60 13
(enp0s31f6
est le nom de mon interface Ethernet.) Ainsi, la valeur erronée du mot Checksum était 0x1360
.
J'ai regardé le dump de NVM avec sudo ethtool -e enp0s31f6
puis regarda à nouveau l'octet à l'offset 0x10 :
$ sudo ethtool -e enp0s31f6 offset 0x10 length 1
Offset Values
------ ------
0x0010: ff
(Apparemment, n'importe quel emplacement ferait l'affaire, mais on m'a dit que dans mon cas, la valeur au décalage 0x10 n'était pas du tout utilisée, donc cela semblait "plus sûr".)
Pour écrire dans la NVM (EEPROM) avec ethtool
, j'avais besoin d'une "clé magique". J'ai lu Débriquer une interface réseau Intel Pro/1000 (e1000) et j'ai compris que ma clé magique était 0x15708086
en utilisant lspci -nn
:
$ lspci -nn | grep Ethernet
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection I219-V [8086:1570] (rev 21)
Puis j'ai écrit 0xff
retour au décalage 0x10 dans la NVM :
$ sudo ethtool -E enp0s31f6 magic 0x15708086 offset 0x10 value 0xff
Après avoir comparé les dumps de la NVM avant et après l'écriture, j'ai pu voir que, comme prévu, la seule chose qui changeait était le mot Checksum :
$ sudo ethtool -e enp0s31f6 offset 0x7e length 2
Offset Values
------ ------
0x007e: 60 93
La nouvelle valeur était donc 0x9360
.
J'ai démarré un noyau avec un e1000e non corrigé , et le port Ethernet fonctionnait correctement.
PS Je trouve un peu inquiétant que seul le bit le plus élevé du mot Checksum soit erroné.
J'ai utilisé bootutil
pour Linux d'Intel (comme suggéré dans le post de 2011) sur une carte réseau Intel intégrée sur mon Asus Z270-A pour corriger cette erreur, sans la recompilation et les clés magiques décrites dans la réponse votée. Cela a très bien fonctionné. J'ai téléchargé l'outil depuis le site de téléchargement d'Intel
chmod +x ./bootutil64e
sudo ./bootutil64e -NIC 1 -defcfg
J'obtenais la même erreur sur Fedora 24 à partir de e1000e
pilote avec carte mère ASUS ROG MAXIMUS IX HERO dotée d'un adaptateur NIC Intel I219-V.
Je trouve la solution acceptée, qui nécessite de patcher la NVM, trop risquée. Cela peut rendre votre matériel inutile.
Une solution sûre consiste à appliquer la configuration par défaut à la carte réseau à l'aide de l'utilitaire de démarrage Intel Ethernet Connections. Il fonctionne sous Linux prêt à l'emploi, pas besoin de créer une disquette de démarrage :
$ chmod +x bootutil64e
$ sudo ./bootutil64e -NIC=1 -DEFAULTCONFIG
C'est ça. Redémarrez (ou rechargez e1000e
pilote manuellement).