1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
<!-- retain these comments for translator revision tracking -->
<!-- original version: 69220 -->
<sect2 arch="arm" id="arm-firmware-overview"><title>ARM-Firmware</title>
<para>
Wie bereits vorher erwähnt, gibt es unglücklicherweise keinen
Standard für System-Firmware auf ARM-Systemen. Sogar das Verhalten
verschiedener Systeme, die nominal die gleiche Firmware verwenden,
kann ziemlich unterschiedlich sein. Dies liegt an der Tatsache,
dass ein großer Teil der Geräte, die die ARM-Architektur nutzen,
eingebettete (embedded) Systeme sind, für die die Hersteller
üblicherweise stark angepasste Firmware-Versionen erstellen
und gerätespezifische Patches integrieren.
Unglücklicherweise melden die Hersteller oft ihre Änderungen
nicht zurück an die ursprünglichen Firmware-Entwickler, so dass
die Änderungen nicht in neuere Versionen der Original-Firmware
einfließen.
</para>
<para>
Als Ergebnis daraus verwenden sogar neu verkaufte Systeme oft eine
Firmware, die auf einer mehrere Jahre alten, durch den Hersteller
angepassten Version einer Firmware basiert, deren Original-Codebasis
sich in der Zwischenzeit erheblich weiterentwickelt hat und
zusätzliche Funktionalitäten enthält oder bei bestimmten Aspekten
ein verändertes Verhalten zeigt.
Zusätzlich dazu ist die Benamung von Onboard-Geräten nicht
konsistent zwischen hersteller-modifizierten Versionen der gleichen
Firmware, daher ist es nahezu unmöglich, nützliche geräteunabhängige
Dokumentation für ARM-basierte Systeme bereitzustellen.
</para>
</sect2>
<sect2 arch="arm" id="uboot-macsetting">
<title>Setzen der Ethernet-MAC-Adresse in U-Boot</title>
<para>
Die MAC-Adresse jeder Ethernet-Schnittstelle sollte eigentlich
global eindeutig sein, und technisch muss sie innerhalb ihrer
Ethernet-Broadcast-Domain eindeutig sein.
Um dies zu erreichen, reserviert der Hersteller normalerweise
einen Block von MAC-Adressen aus einem zentral administrierten
Pool (für den eine Gebühr gezahlt werden muss) und vergibt dann
eine dieser Adressen an jedes verkaufte Gerät.
</para>
<para>
Im Falle von Development-Boards wollen Hersteller manchmal
die Zahlung der Gebühr vermeiden und stellen daher keine global
eindeutigen Adressen bereit. In diesen Fällen muss der Benutzer
selbst MAC-Adressen für seine Systeme vergeben. Wenn für eine
Ethernet-Schnittstelle keine MAC-Adresse festgelegt ist, generieren
einige Netzwerktreiber eine zufällige MAC-Adresse, die sich dann
bei jedem Neustart ändern kann, und dabei wäre ein Netzwerkzugriff
möglich, ohne dass der Benutzer händisch eine Adresse festgelegt
hat; wenn jedoch z.B. die IP-Adressen über DHCP aus der MAC-Adresse
des anfordernden Clients abgeleitet werden, würde dies
natürlich nicht zuverlässig funktionieren.
</para>
<para>
Um Konflikte mit vorhandenen offiziell vergebenen MAC-Adressen
zu vermeiden, gibt es einen Adress-Pool, der für sogenannte
<quote>lokal administrierte</quote> Adressen reserviert ist.
Er wird über den Wert von zwei speziellen Bits im ersten Byte
der Adresse definiert (der Artikel <quote>MAC address</quote>
in der englisch-sprachigen Wikipedia enthält hierzu eine gute
Beschreibung). In der Praxis bedeutet dies, dass z.B. jede
Adresse, die mit dem hexadezimalen Wert ca beginnt (wie
ca:ff:ee:12:34:56), als lokal administrierte Adresse
verwendet werden kann.
</para>
<para>
Auf Systemen, die U-Boot als System-Firmware nutzen, ist die
Ethernet-MAC-Adresse in der Umgebungsvariablen <quote>ethaddr</quote>
abgelegt. Sie kann über den U-Boot-Befehlsprompt mit dem
Befehl <quote>printenv ethaddr</quote> überprüft und mit
<quote>setenv ethaddr ca:ff:ee:12:34:56</quote> gesetzt werden.
Nach dem Ändern des Wertes wird mit dem Befehl
<quote>saveenv</quote> diese Einstellung fest abgespeichert.
</para>
</sect2>
<sect2 arch="arm" id="uboot-relocation-issues">
<title>Probleme bei der Speicherzuweisung für Kernel/Initrd/Gerätebaum in U-Boot</title>
<para>
Auf einigen Systemen mit älteren U-Boot-Versionen können Probleme
bei der korrekten Speicherzuweisung für Linux-Kernel, Initial-Ramdisk
und Gerätebaum-Abbild während des Boot-Prozesses
auftreten. In diesem Fall zeigt U-Boot die Meldung <quote>Starting
kernel ...</quote> an, aber das System friert danach ohne weitere
Ausgabe ein. Diese Probleme wurden in neueren U-Boot-Versionen
ab v2014.07 aufwärts behoben.
</para>
<para>
Falls das System im Originalzustand eine U-Boot-Version älter als
v2014.07 genutzt hat und dann auf eine neuere Version aktualisiert
wurde, könnte das Problem auch nach dem Upgrade von U-Boot noch
auftreten. Das Aktualisieren von U-Boot modifiziert üblicherweise
nicht die vorhandenen Umgebungsvariablen und der Fix zur Fehlerbehebung
erfordert das Setzen einer zusätzlichen Umgebungsvariable (bootm_size),
was jedoch nur bei frischen Neuinstallationen ohne vorhandene
Umgebungsdaten von U-Boot automatisch erledigt wird. Es ist
möglich, bootm_size händisch auf den neuen U-Boot-Standardwert
zu setzen, indem <quote>env default bootm_size; saveenv</quote>
am U-Boot-Prompt ausgeführt wird.
</para>
<para>
Eine andere Möglichkeit, solche Probleme bei Speicherzuweisungen
zu verhindern, wäre die Ausführung von
<quote>setenv fdt_high ffffffff; setenv initrd_high 0xffffffff;
saveenv</quote> am U-Boot-Prompt; damit wird die
dynamische Speicherzuweisung für Initial-Ramdisk und
Gerätebaum-Abbild vollständig deaktiviert.
</para>
</sect2>
|