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 Australien 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, nach dem vollständigen Hochfahren der Firmware Einstellungen und Firmware über einen Webbrowser auf ein Modem zu laden. Mit dieser Technik konnte von jedem Rechner aus nur ein Modem gleichzeitig 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-Korruption, 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 ein separates ausführbares Programm verwendet, um auf Boot-ROM-Ebene wiederherzustellen oder zu konvertieren. An einem typischen Tag waren Hunderte davon servicebedürftig, mit 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 Modem-Neustarts auf einen zu reduzieren. Obwohl diese Methode viele der Probleme beseitigte, blieb der manuelle Schritt der Auswahl der für das Modemmodell 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 zur Abwicklung der Upgrades zu entwickeln. Ich begann mit der Überlegung von Java wegen der Leistung, aber als ich den komplexen Java-Code für die serielle Kommunikation und die Sprache selbst betrachtete, wählte ich stattdessen Python. Ich war kein Programmierer und hatte das Gefühl, dass ich Java-Code nicht würde verstehen und damit arbeiten können. Ich glaubte, dass Python es mir erlauben 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, unter Verwendung des pySerial-Moduls, tftp und PyQt3. Die Hardware enthielt 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 seriellen Schnittstellen. Sobald ein Modem eingeschaltet war, wurde der serielle Puffer kontinuierlich überwacht und häufige Fehler wurden erkannt. Die korrekte Firmware und die Konfigurationsdateien, 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 Log an. Die Benutzeroberfläche bot auch einfache Steuerelemente zum Starten, Stoppen und Auswählen von Modellen für die Modems.

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

Ergebnisse

Das Projekt war ein Erfolg. Ich war der einzige 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 Fertigstellung war das DSL Firmware Recovery System auf einem einzelnen Rechner 8x schneller, und es wurde einfacher, zusätzliche Rechner und serielle Karten hinzuzufügen. An einem Tag wurden 1.600 Modem-Firmware-Konvertierungen durchgeführt, zusätzlich zur normalen täglichen Arbeitslast.

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

Schlussfolgerung

Obwohl ich keine Programmiererfahrung hatte, erlaubte mir Python, gleichzeitig eine Programmiersprache zu lernen und eine komplexe Aufgabe zu bewältigen. Python ist eine einzigartig leistungsstarke und nutzbare "learn-as-you-go feature-rich language".

Über den Autor

How Wong scheiterte zuvor an der Universität an der Programmierung und arbeitet jetzt als Linux-Technologe. Er interessiert sich für den Einsatz von Linux und Open-Source-Software zur Lösung realer Probleme. Herr Wong entwickelte seine Fähigkeiten im Laufe einer abwechslungsreichen IT-Karriere und in seiner Freizeit durch die Arbeit mit Python und Web-Programmierung, Multimedia und Linux OS.