Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| linux:changemacnvramethtool [2026/02/12 07:10] – angelegt devnull | linux:changemacnvramethtool [2026/02/12 17:17] (aktuell) – hinweis devnull | ||
|---|---|---|---|
| Zeile 8: | Zeile 8: | ||
| </ | </ | ||
| + | <WRAP center round tip 60%> | ||
| Da es relativ einfach und gut dokumentiert ist, wird die Anleitung an einer Intel e1000e Netzwerkkarte beschrieben. Andere Geräte arbeiten ähnlich, aber die notwendigen Informationen muss man sich heraussuchen. | Da es relativ einfach und gut dokumentiert ist, wird die Anleitung an einer Intel e1000e Netzwerkkarte beschrieben. Andere Geräte arbeiten ähnlich, aber die notwendigen Informationen muss man sich heraussuchen. | ||
| + | </ | ||
| + | ===== Vorbereitungen ===== | ||
| + | ==== Intel e1000 ==== | ||
| + | Intel e1000 und e1000e haben einen NVM Schreibschutz, | ||
| + | - fahre den Rechner herunter | ||
| + | - starte mit der Kernel Commandline: | ||
| + | |||
| + | -> für andere Module/ | ||
| + | |||
| + | ==== Magic Numbers ==== | ||
| + | Wenn Sie in den NVRAM schreiben wollen, benötigen Sie eine MagicNumber, | ||
| + | Diese Nummer wird vom Hersteller der Netzwerkkarte festgelegt und ist im Zweifel ein Geheimnis. Wenn Sie aber ein taugliches Kernel-Modul für Ihre Netzwerkkarte verwenden, also ein solches mit ethtool Interface, dann können Sie die Magic-Number im Kernel Source zur Ihrem Modul finden. Hier der Pfad zu den Treibern: [[https:// | ||
| + | |||
| + | Magic Numbers werden imm Hexadezimal, | ||
| + | Folgend die bekannten Magic-Numbers bzw. ihre Bildungsregel in einer Tabelle. | ||
| + | |||
| + | ^Hersteller ^Kartentyp ^Kernelmodul ^MagicNumber ^Beispiel ^ | ||
| + | |Intel|e1000, | ||
| + | |||
| + | |||
| + | ===== Vorgang Änderung ===== | ||
| + | |||
| + | |||
| + | - Infos über die Netzwerkkarte zwischenspeichern. Darauf achten, dass man in ein schreibbares und permanent abgelegtes (USB-Stick, lokale Platte) Dateisystem schreibt (wenn man z.B. in von einer LiveCD aus arbeitet) | ||
| + | - Treiber< | ||
| + | grep -i bus-info / | ||
| + | | ||
| + | - aktuelle Mac-Adresse zwischenspeichern< | ||
| + | - EEPROM-Dump ablegen (hier steht idR (zumindest bei Intel) auch die MAC an Adresse 0x0 in den 1. 6 bytes | ||
| + | - lesbar für den Fall das man etwas nachlesen will<sxh bash> | ||
| + | - binär und wiederherstellbar durch direktes schreiben in den NVRAM< | ||
| + | - zum sichergehen noch einmal das Offset suchen, bei Intel ist von Adresse 0 auszugehen, daher läss man sich mal Adresse 0 anzeigen zum prüfen und Vergleichen mit Punkt b.<sxh bash> | ||
| + | Offset Values | ||
| + | ------ ------ | ||
| + | 0x0000: 94 c6 91 16 86 de</ | ||
| + | - zum Schreiben in den NVRAM benötigt man eine Magic-Number, | ||
| + | 00:1f.6 0200: 8086:1570 (rev 21) | ||
| + | </ | ||
| + | - nun nur noch eine neue Mac-Adresse aussuchen. Zum Beispiel diese hier 01: | ||
| + | sudo ethtool -E eth0 magic 0x15708086 offset 0x01 length 1 value 0x02 | ||
| + | sudo ethtool -E eth0 magic 0x15708086 offset 0x02 length 1 value 0x0a | ||
| + | sudo ethtool -E eth0 magic 0x15708086 offset 0x03 length 1 value 0x0b | ||
| + | sudo ethtool -E eth0 magic 0x15708086 offset 0x04 length 1 value 0x0c | ||
| + | sudo ethtool -E eth0 magic 0x15708086 offset 0x05 length 1 value 0x0d</ | ||
| + | Es hat sich herausgestellt, | ||
| + | </ | ||
| + | |||
| + | ===== Hilfe ===== | ||
| + | ===== Bad Address beim Aufruf von ethtool -E ===== | ||
| + | Bis jetzt deutete das immer auf eine fehlerhafte Magic Number hin | ||
| + | |||
| + | ===== Invalid MAC Address ===== | ||
| + | Nachdem man eine neue Mac-Adresse in den NVRAM geschrieben hat und auch keine Fehlermeldung von ethtool bekam, kann es dennoch sein, dass es Quatsch war, was man rein schrieb. | ||
| + | Ich " | ||
| + | Beim nächsten Boot des Systems bemängelte der Kernel: <wrap hi> | ||
| + | |||
| + | Diese Meldung wird von der Methode '' | ||
| + | |||
| + | **Die Lösung sieht wir folgt aus:** | ||
| + | * Kernel als Source herunterladen | ||
| + | * Datei **include/ | ||
| + | * die Methode muss dazu gebracht werden, immer true zurückzugeben, | ||
| + | * is_valid_ether_addr - Determine if the given Ethernet address is valid | ||
| + | * @addr: Pointer to a six-byte array containing the Ethernet address | ||
| + | * | ||
| + | * Check that the Ethernet address (MAC) is not 00: | ||
| + | * a multicast address, and is not FF: | ||
| + | * | ||
| + | * Return: true if the address is valid. | ||
| + | * | ||
| + | * Please note: addr must be aligned to u16. | ||
| + | */ | ||
| + | static inline bool is_valid_ether_addr(const u8 *addr) | ||
| + | { | ||
| + | /* FF: | ||
| + | * explicitly check for it here. */ | ||
| + | return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr); | ||
| + | }</ | ||
| + | * is_valid_ether_addr - Determine if the given Ethernet address is valid | ||
| + | * @addr: Pointer to a six-byte array containing the Ethernet address | ||
| + | * | ||
| + | * Check that the Ethernet address (MAC) is not 00: | ||
| + | * a multicast address, and is not FF: | ||
| + | * | ||
| + | * Return: true if the address is valid. | ||
| + | * | ||
| + | * Please note: addr must be aligned to u16. | ||
| + | */ | ||
| + | static inline bool is_valid_ether_addr(const u8 *addr) | ||
| + | { | ||
| + | return true | ||
| + | }</ | ||
| + | * den Kernel konfigurieren | ||
| + | * den Kernel kompilieren | ||
| + | * die Module kompilieren | ||
| + | * den neuen Kernel booten | ||
| + | * <WRAP center round alert 60%> | ||
| + | Dieser Kernel sollte nicht produktiv verwendet werden, sondern nur für die Reparatur dieses Fehlers. | ||
| + | </ | ||
×
iphelper toolbox
you see this when javscript or css is not working correct
Untested