注意: 雖然 JavaScript 對於本網站並非必不可少,但您與內容的互動將受到限制。請啟用 JavaScript 以獲得完整體驗。

D-Link 澳大利亞使用 Python 控制韌體更新

介紹

D-Link 澳大利亞的 RMA 部門為澳大利亞和亞洲地區提供保修服務。保修服務包括診斷、修復、測試、翻新和包裝安全攝像頭、調變解調器、VoIP 硬體、交換機和路由器產品。

問題描述

在開發以下描述的軟體之前,保修服務期間升級韌體的標準方法是透過 Web 瀏覽器將設定和韌體載入到調變解調器上,並在韌體完全啟動後進行。使用此技術,每臺機器每次只能升級一個調變解調器。要確認韌體升級成功,必須重新啟動調變解調器並透過 Web 瀏覽器再次檢查版本。

韌體損壞、需要轉換為不同本地化區域以及需要升級引導載入程式的調變解調器無法透過這種方式處理。相反,使用單獨的可執行檔案在引導 ROM 級別進行恢復或轉換。在典型的一天中,有數百個需要維修,而且型號各不相同。

解決方案

為了解決其中一些問題,我開始使用終端指令碼來驅動與調變解調器的序列通訊,以便繞過在引導 ROM 級別升級韌體過程中手動使用 Web 瀏覽器,並將調變解調器的啟動次數減少到一次。雖然這種方法消除了許多問題,但仍然存在手動選擇適合調變解調器型號的韌體以及對不同的引導載入程式使用不同命令的步驟。此外,一次只能執行一次升級。這不是一個特別使用者友好的解決方案。

為了改善這種情況,我決定開發自定義軟體來處理升級。我首先考慮使用 Java 來提高效能,但是一旦我查看了複雜的 Java 序列通訊程式碼和語言本身,我選擇了 Python。我不是程式設計師,我覺得我無法使用和理解 Java 程式碼。我相信 Python 會讓我更專注於問題而不是語言。

DSL 韌體恢復系統

這項工作使用的開發環境是 Linux 上的 Eclipse,使用了 pySerial 模組、tftp 和 PyQt3。硬體包含四埠序列和網絡卡以及支援載波檢測的 RS-232 到 TTL 序列介面。

軟體系統的元件包括網路模組、序列 I/O 模組、執行緒管理器和 GUI。埠管理器檢測線上和離線調變解調器,並管理連線和釋放埠。每個執行緒處理一個調變解調器,連線網路和序列介面。一旦調變解調器開啟,將持續監視序列緩衝區,並且會檢測到任何常見錯誤。軟體系統會選擇每個型號升級所需的正確韌體和設定檔案。使用 FTP 命令來控制快閃記憶體儲存區域,使用序列命令來控制啟動過程。正在執行的程序透過易於閱讀的圖形和日誌使用者介面顯示其狀態。使用者介面還提供了簡單的控制元件來啟動、停止和選擇調變解調器的型號。

執行緒模型是軟體中最難開發的部分。我使用了 Qt 提供的執行緒支援,發現它比 Python 的執行緒模組更容易使用。當主 Qt 程式退出時,它也會自動退出仍在執行的任何 qthread。

結果

該專案取得了成功。我是唯一的建立者和開發者,並且對僅用 1200 多行程式碼就取得的成果感到驚訝。開發該系統(包括測試)花費了 2-3 個月。

完成後,DSL 韌體恢復系統在單臺機器上的速度提高了 8 倍,並且可以更輕鬆地新增其他機器和序列卡。有一天,除了正常的日常工作量外,還完成了 1600 個調變解調器韌體轉換。

該軟體還有助於防止錯誤,從而提高了服務質量,並減少了發出的有缺陷的調變解調器數量。

結論

儘管我沒有程式設計經驗,但 Python 使我能夠同時學習程式語言並完成一項複雜的工作。Python 是一種功能強大且易於使用的“邊學邊用、功能豐富的語言”。

關於作者

How Wong 以前在大學程式設計方面不及格,現在是一名 Linux 技術專家。他對使用 Linux 和開源軟體來解決實際問題很感興趣。Wong 先生在各種 IT 職業生涯中以及在業餘時間使用 Python 和 Web 程式設計、多媒體和 Linux 作業系統方面開發了技能。