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 作業系統方面開發了技能。