澳大利亞 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 的 threading 模組更容易使用。當主 Qt 程式退出時,它也會自動退出任何仍在執行的 qthread。
結果
該專案取得了成功。我是唯一的建立者和開發者,對僅用 1200 多行程式碼就取得的成果感到驚訝。該系統耗時 2-3 個月開發,包括測試。
完成後,DSL 韌體恢復系統在單臺機器上快了 8 倍,並且更容易新增額外的機器和序列卡。有一天,除了日常工作量外,還完成了 1600 次調變解調器韌體轉換。
該軟體還有助於防止錯誤,從而提高了服務質量,減少了有缺陷的調變解調器出貨量。
結論
儘管我沒有程式設計經驗,但 Python 讓我在學習程式語言的同時,完成了一項複雜的工作。Python 是一種獨特強大且實用的“邊學邊用、功能豐富的語言”。
關於作者
黃浩之前大學程式設計不及格,現在是一名 Linux 技術專家。他熱衷於使用 Linux 和開源軟體來解決現實世界中的問題。黃先生在多樣化的 IT 職業生涯中,以及業餘時間從事 Python 和網路程式設計、多媒體和 Linux 作業系統方面的工作,積累了技能。
