Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| linux:changemacnvramethtool [2026/02/12 07:30] – erster Draft devnull | linux:changemacnvramethtool [2026/02/12 17:17] (aktuell) – hinweis devnull | ||
|---|---|---|---|
| Zeile 12: | Zeile 12: | ||
| </ | </ | ||
| + | ===== Vorbereitungen ===== | ||
| + | ==== Intel e1000 ==== | ||
| Intel e1000 und e1000e haben einen NVM Schreibschutz, | Intel e1000 und e1000e haben einen NVM Schreibschutz, | ||
| - | 1. fahre den Rechner herunter | + | - fahre den Rechner herunter |
| - | 2. starte mit der Kernel Commandline: | + | |
| - | -> für andere Module muss man sich die Kernel Dokumentation zu dem Modul anschauen (Im Kernel Source unter Documentation) | + | -> für andere Module/ |
| - | 1. Infos über die Netzwerkkarte zwischenspeichern. Darauf achten, dass man in schreibbares | + | ==== Magic Numbers ==== |
| - | a. Treiber | + | Wenn Sie in den NVRAM schreiben wollen, benötigen Sie eine MagicNumber, |
| - | + | Diese Nummer wird vom Hersteller der Netzwerkkarte festgelegt | |
| - | sudo ethtool -i eth0 > /var/log/eth0_info.bup | + | |
| - | grep -i bus-info / | + | Magic Numbers werden imm Hexadezimal, |
| - | bus-info: 0000:00:1f.6 | + | Folgend die bekannten Magic-Numbers bzw. ihre Bildungsregel in einer Tabelle. |
| - | b. aktuelle Mac-Adresse zwischenspeichern | + | ^Hersteller ^Kartentyp ^Kernelmodul ^MagicNumber ^Beispiel ^ |
| + | |Intel|e1000, | ||
| - | sudo ethtool -P eth0 > / | ||
| - | c. EEPROM-Dump ablegen (hier steht idR (zumindest bei Intel) auch die MAC an Adresse 0x0 in den 1. 6 bytes | + | ===== Vorgang Änderung ===== |
| - | - lesbar für den Fall das man etwas nachlesen will | ||
| - | | ||
| - | sudo ethtool -e eth0 > / | ||
| - | | + | - 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> |
| + | | ||
| + | | ||
| Offset Values | Offset Values | ||
| ------ ------ | ------ ------ | ||
| - | 0x0000: 94 c6 91 16 86 de | + | 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, | ||
| + | </ | ||
| - | e. zum Schreiben in den NVRAM benötigt man eine Magic-Number, ein Passwort sozusagen. Diese ist Herstellerspezifisch. Bei Intel-Karten ist das idR die Kombination 0x(lspci -n : | + | ===== Hilfe ===== |
| - | Die Magic Number | + | ===== Bad Address beim Aufruf von ethtool |
| - | FÜr Intel-Karten, | + | Bis jetzt deutete |
| - | + | ||
| - | lspci -n | grep -i 1f.6 | + | |
| - | 00:1f.6 0200: 8086:1570 (rev 21) | + | |
| + | ===== 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> | ||
| - | Daher ist die Magic-Number: 0x15708086 | + | Diese Meldung wird von der Methode '' |
| - | 2. nun nur noch eine neue Mac-Adresse aussuchen. Zum Beispiel diese hier 01:02:0a:0b:0c:0d und mit folgendem Befehl auf in den EEProm schrieben. Achte darauf, das du hexadezimale Werte nimmst, sonst zerstörst du das MAC-Format welches später von der KernelFunktion: is_valid_ether_addr() | + | **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 | ||
| + | * @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:FF:FF:FF:FF:FF is a multicast address so we don't need to | ||
| + | * 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: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. | ||
| + | </ | ||
| - | sudo ethtool -E eth0 magic 0x15708086 offset 0x0 value 0x01 0x02 0x0a 0x0b 0x0c 0x0d | ||
×
iphelper toolbox
you see this when javscript or css is not working correct
Untested