summaryrefslogtreecommitdiff
path: root/de/preparing/bios-setup/arm.xml
blob: 293aabb2cfa4c1859a82f20c73f51690deda0341 (plain)
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>