Update

Der Update Service der D-Serie

  • lädt eine update_info.xml herunter
  • liest die dort beschriebene Versionsinfo
  • startet bei Bedarf das Update System

Wenn aktiv, prüft das Telefon nach jedem Provisioning auf neue Updates. Dazu nutzt es die URL aus der Konfiguration. Der Server muss unter der angegebenen URL eine Datei mit dem Namen update_info.xml anbieten. Die Update-Info XML teilt dem Update-Service die Version des ROM-Files mit, ohne dass ein Download des ROMs notwendig ist. Die Option Updates automatisch installieren erlaubt die direkte Installation einer neuen Firmware.

Das Update System der D-Serie

  • lädt Update-Dateien herunter
  • prüft die Signatur und Größe einer Update-Datei
  • schreibt die Inhalte auf die Partitionen

Soll das Update-System geupdatet werden, so kann dies ab v2.0 auch ueber die update_info.xml passieren.

Diese muss dazu um einen Abschnitt <Updater…/> erweitert werden. Das Update-System wird dann im Hintergrund vom Hauptsystem aus geupdatet - allerdings nur einmalig pro Power-Cycle, um mehrfaches ueberschreiben so gering wie moeglich zu halten (es gibt Versionsnummern, die aber nur bei Neustart aktualisiert werden).

Die update_info.xml sieht wie folgt aus:

update_info.xml
<UpdateInfo>
    <Version name="1.0A-00000" url="http://192.168.1.239/update.rom"/>
</UpdateInfo>

Ab Version 2.0:

update_info.xml
<UpdateInfo>
    <Version name="2.0A-00000" url="http://192.168.1.239/firmware.img"/>
    <Updater name="2.0A-00000" url="http://192.168.1.239/updater.img"/>
</UpdateInfo>

Das folgende XSD validiert solche Dateien:

update_info.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="UpdateInfo">
    <xsd:complexType>
      <xsd:all>
        <xsd:element name="Version">
          <xsd:complexType>
            <xsd:attribute name="name" type="nameType" use="required"/>
            <xsd:attribute name="url" type="xsd:anyURI" use="required"/>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="Updater">
          <xsd:complexType>
            <xsd:attribute name="name" type="nameType" use="required"/>
            <xsd:attribute name="url" type="xsd:anyURI" use="required"/>
          </xsd:complexType>
        </xsd:element>
      </xsd:all>
    </xsd:complexType>
  </xsd:element>
 
  <xsd:simpleType name="nameType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="\d+\.\d+[A-Z]-\d{5}(-\d+-g[0-9a-f]{6,20})?"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>

Wie man den Updater der D-Serie aktualisiert

Manchmal ist es notwendig den Updater des Telefons zu updaten, sodass Bugs gefixt und neue Features unterstuetzt werden. Dies ist beispielsweise der Fall bei den D-600 Geraeten, die sich bereits im Feldtest befinden, da sie so die Faehigkeit erwerben, auch bei WLAN als einzige Netzwerkverbindung geupdated zu werden. In diesem Fall muss der Updater lernen auch die Hauptfirmware updaten zu koennen, wenn keine Netzwerkkabel eingesteckt ist.

Vorbedingungen

Da der Vorgang das Updater-Image zu updaten sich nicht von dem des Updates des Hauptfirmware-Images unterscheidet, benoetigen Sie fast die selben Dinge dafuer:

  • D-600 Geraet, verbunden mit dem Netzwerk
  • das Image des neuen Updaters
  • einen HTTP-Server, der das Update und die Datei update.xml bereitstellt

Da dies der selbe Aufbau ist, wie bei der Verteilung des Hauptfirmware-Image, gehen wir davon aus, dass Sie wissen, wie Sie an ein D-600 kommen und einen solchen HTTP-Server aufsetzen, sodass er als Updateserver dienen kann.

Bezug des Updater-Images

Das Updater-Image kann genau dort gefunden werden, wo auch das Hauptfirmware-Image liegt, nachdem es auf unserem Gitlab-Server gebaut wurde. So liegt beispielsweise das letzte Image aus dem Updater-Update-Branch hier:

 https://git.gds.auernet/d-series/main/-/jobs/236094/artifacts/browse

Sein Name ist - in diesem Falle - lobster-1.7A-00003-15-gf155109-update.img. Benutzen Sie stets das Image, das nicht auf `.unsigned` endet. Wenn Sie keinen Zugriff auf unseren Gitlab-Server haben, fragen Sie einfach unseren Service nach dem Image.

Das Image ausliefern

Die Auslieferung des Updater-Images laeuft analog zur Auslieferung eines Hauptfirmware-Images ab. Sie muessen nur das Image dort ablegen, wo Sie sonst das Hauptfirmware-Image ablegen wuerden und die Datei update.xml anpassen.

 <UpdateInfo>
    <Version name="1.7A-00003" url="lobster-1.7A-00003-15-gf155109-update.img"/>
 </UpdateInfo>

Das naechste Mal, wenn Sie auf dem Telefon ein Update anstossen, wird es neustarten, das Image herunterladen und ueberpruefen, es installieren und wieder ins Hauptsystem booten. Dann ist das Update des Updaters abgeschlossen. Nicht ueberrascht sein, das Update des Updaters braucht erheblich weniger Zeit, als das Update des Hauptsystems, da es naturgemaess deutlich kleiner ist.