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

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

引言

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

問題描述

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

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

解決方案

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

為了改善這種情況,我決定開發定製軟體來處理升級。我首先考慮了 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 和網路程式設計、多媒體和 Linux 作業系統方面的工作中培養了技能。