Hinweis: Obwohl JavaScript für diese Website nicht unbedingt erforderlich ist, werden Ihre Interaktionsmöglichkeiten mit den Inhalten eingeschränkt sein. Bitte aktivieren Sie JavaScript für das volle Erlebnis.

D-Link Australia nutzt Python zur Steuerung von Firmware-Updates

Einleitung

Die RMA-Abteilung von D-Link Australia bietet Garantieleistungen für Australasien an. Zu den Garantieleistungen gehören die Diagnose, Reparatur, Prüfung, Aufarbeitung und Verpackung von Sicherheitskameras, Modems, VoIP-Hardware, Switches und Routern.

Problembeschreibung

Vor der Entwicklung der nachfolgend beschriebenen Software bestand die Standardmethode zur Aktualisierung der Firmware während des Garantieservices darin, Einstellungen und Firmware über einen Webbrowser auf ein Modem zu laden, nachdem die Firmware vollständig hochgefahren war. Mit dieser Technik konnte jeweils nur ein Modem pro Rechner aktualisiert werden. Um die erfolgreiche Aktualisierung der Firmware zu bestätigen, musste das Modem neu gestartet und die Version erneut über einen Webbrowser überprüft werden.

Modems mit Firmware-Beschädigung, solche, die in eine andere Lokalisierungsregion konvertiert werden mussten, und solche, die einen aktualisierten Bootloader benötigten, konnten auf diese Weise nicht behandelt werden. Stattdessen wurde eine separate ausführbare Datei verwendet, um auf Boot-ROM-Ebene wiederherzustellen oder zu konvertieren. An einem typischen Tag waren Hunderte dieser Geräte servicebedürftig, und das bei vielen verschiedenen Modellen.

Die Lösung

Um einige dieser Probleme zu lösen, begann ich mit einem Terminal-Skript zur Steuerung der seriellen Kommunikation mit den Modems, um die manuelle Nutzung des Webbrowsers beim Aktualisieren der Firmware auf Boot-ROM-Ebene zu umgehen und die Anzahl der erforderlichen Neustarts des Modems auf einen zu reduzieren. Obwohl diese Methode viele Probleme beseitigte, blieb der manuelle Schritt der Auswahl der für das Modell des Modems geeigneten Firmware und die Verwendung unterschiedlicher Befehle für verschiedene Bootloader bestehen. Darüber hinaus konnte nur ein Upgrade gleichzeitig durchgeführt werden. Es war keine besonders benutzerfreundliche Lösung.

Um die Situation zu verbessern, beschloss ich, eine benutzerdefinierte Software für die Aktualisierungen zu entwickeln. Ich begann mit der Überlegung von Java wegen der Leistung, aber nachdem ich mir den komplexen Java-Code für die serielle Kommunikation und die Sprache selbst angesehen hatte, entschied ich mich stattdessen für Python. Ich war kein Programmierer und hatte das Gefühl, dass ich nicht in der Lage sein würde, mit Java-Code zu arbeiten und ihn zu verstehen. Ich glaubte, dass Python es mir ermöglichen würde, mich mehr auf das Problem als auf die Sprache zu konzentrieren.

DSL Firmware Recovery System

Die Entwicklungsumgebung für diese Arbeit war Eclipse unter Linux mit dem pySerial-Modul, tftp und PyQt3. Die Hardware umfasste Quad-Port-Serien- und Netzwerkkarten sowie eine RS-232-zu-TTL-Serienschnittstelle, die Carrier Detect unterstützt.

Die Komponenten des Softwaresystems waren das Netzwerkmodul, das serielle I/O-Modul, ein Thread-Manager und die GUI. Ein Port-Manager erkannte Online- und Offline-Modems und verwaltete das Verbinden und Freigeben von Ports. Jeder Thread bearbeitete ein Modem und verband die Netzwerk- und serielle Schnittstellen. Sobald ein Modem online war, wurde der serielle Puffer kontinuierlich überwacht und häufige Fehler erkannt. Die korrekte Firmware und die Einstellungsdateien, die für das Upgrade jedes Modells benötigt wurden, wurden vom Softwaresystem bezogen. FTP-Befehle wurden zur Steuerung des Flashings von Speicherbereichen verwendet und serielle Befehle zur Steuerung des Bootvorgangs. Laufende Prozesse zeigten ihren Status über die leicht lesbare grafische Benutzeroberfläche und das Protokoll an. Die Benutzeroberfläche bot auch einfache Bedienelemente zum Starten, Stoppen und Auswählen von Modellen für die Modems.

Das Threading-Modell war der schwierigste zu entwickelnde Teil der Software. Ich nutzte die von Qt bereitgestellte Threading-Unterstützung und fand sie einfacher zu verwenden als das Threading-Modul von Python. Wenn das Haupt-Qt-Programm beendet wird, werden auch alle noch laufenden qthreads automatisch beendet.

Ergebnisse

Das Projekt war ein Erfolg. Ich war der alleinige Ersteller und Entwickler und war erstaunt über die Ergebnisse, die mit etwas mehr als 1.200 Codezeilen erzielt wurden. Die Entwicklung des Systems, einschließlich Tests, dauerte 2-3 Monate.

Nach der Fertigstellung war das DSL Firmware Recovery System 8x schneller auf einem einzigen Rechner und ermöglichte die einfachere Hinzufügung weiterer Rechner und serieller Karten. An einem Tag wurden 1.600 Modem-Firmware-Konvertierungen durchgeführt, zusätzlich zur normalen täglichen Arbeitsbelastung.

Die Software half auch, Fehler zu vermeiden, wodurch die Servicequalität stieg und weniger defekte Modems ausgeliefert wurden.

Schlussfolgerung

Obwohl ich keine Programmiererfahrung hatte, ermöglichte mir Python, gleichzeitig eine Programmiersprache zu lernen und eine komplexe Aufgabe zu bewältigen. Python ist eine einzigartig mächtige und nutzbare "Learn-as-you-go Feature-rich Language".

Autor

How Wong scheiterte zuvor an der Programmierung an der Universität und arbeitet nun als Linux-Technologe. Er ist daran interessiert, Linux und Open-Source-Software zur Lösung realer Probleme einzusetzen. Herr Wong entwickelte im Laufe einer vielfältigen IT-Karriere und in seiner Freizeit durch Arbeit in Python und Webprogrammierung, Multimedia und Linux-Betriebssystemen Fähigkeiten.