嘿!各位Advantech的夥伴們,還有對我們技術充滿好奇的朋友們,大家好!
身為一家不斷追求技術突破的公司,我們總是在幕後默默耕耘,探索各種能讓我們的產品更強大、更方便的新技術。今天,我們要跟大家分享一個有趣的實驗過程,主角是大家可能聽過,但又不那麼熟悉的「ADB OTA」!
你可能會想,OTA?那不是手機更新軟體用的嗎?沒錯!OTA(Over-The-Air)空中下載技術,就是讓裝置可以透過網路接收並安裝更新,不用插線、不用跑現場,是不是超方便?這項技術在消費性電子領域已經很普及,但在我們的工業級、商業級裝置上,它的應用潛力更是巨大!想像一下,部署在世界各地的數位看板、工業控制器或智慧零售設備,如果都能遠端輕鬆更新系統,那將省下多少人力和時間成本!
而ADB(Android Debug Bridge)呢?簡單來說,它是Android開發者常用的一個工具,可以讓電腦直接跟Android裝置溝通,執行各種指令,就像是工程師的「秘密通道」。這次,我們的工程師團隊就突發奇想:能不能利用這個「秘密通道」來測試和驗證OTA更新流程呢?這不僅能提供一個靈活的測試方法,未來在某些特定的開發或維護情境下,或許也能派上用場!
所以,這次實驗的目的很明確:驗證透過ADB指令,是否能成功地在我們的裝置上執行OTA更新。
實驗大解密:ADB OTA怎麼玩? #
接下來,就讓我們一起看看工程師們是怎麼進行這項實驗的吧!整個過程就像是給裝置來一次「遠端手術」,但別擔心,我們會用最白話的方式來解釋。
首先,我們需要準備好要更新的「新系統」檔案,也就是OTA更新包。這個包裡包含了系統更新所需的各種資料。
- 作業系統image版本:
- OTA版本:
準備好更新包後,接下來就是透過ADB連接裝置並執行更新指令了。
ADB 連線與更新步驟 (工程師視角,白話解釋) #
-
找到裝置的「門牌號碼」(IP位址): 就像寄信需要地址一樣,電腦要連線到裝置,首先要知道它的IP位址。我們透過裝置的設定軟體就能輕鬆找到。
-
建立ADB連線: 在電腦(主機端)上打開命令提示字元或終端機,輸入指令,告訴電腦要連線到哪個IP位址的裝置。
$ adb connect 172.22.16.73:5555 -
取得裝置的「最高權限」(root權限): 為了能把更新檔案放到裝置的系統目錄下,我們需要取得root權限,這就像是電腦上的「管理員權限」。注意,這個步驟在裝置每次重啟後都需要重新執行一次。
$ adb root -
重新連線(如果執行了步驟3): 取得root權限後,ADB連線可能會中斷,需要重新連線一次。
$ adb connect 172.22.16.73:5555 -
解壓縮更新包並傳送檔案: OTA更新包通常是zip格式,裡面有主要的更新資料檔
payload.bin和一個描述檔案payload_properties.txt。我們需要把這兩個檔案解壓縮後,透過ADB傳送到裝置的指定目錄。
傳送檔案的指令如下:
$ adb push payload_properties.txt /data/ $ adb push payload.bin /sdcard/整個連線和傳送檔案的過程在命令列中看起來像這樣:
-
進入裝置的「內部系統」(adb shell): 現在檔案已經傳到裝置裡了,我們需要「登入」到裝置的系統環境中,才能執行更新指令。
$ adb shell -
執行OTA更新指令: 在裝置的系統環境中,我們使用
update_engine_client這個工具來啟動更新程序。指令會告訴工具去哪裡找到更新檔案 (payload.bin) 以及更新的相關資訊 (payload_properties.txt)。rsb3720_a1:/ # export payload=$(cat /data/payload_properties.txt) rsb3720_a1:/ # update_engine_client --payload=file:///sdcard/payload.bin --update --headers="$payload" -
監控更新過程(logcat): 更新指令執行後,裝置就會開始進行更新。我們可以透過
logcat指令來查看系統日誌,監控更新的進度,看看有沒有錯誤發生。rsb3720_a1:/ # logcat日誌會不斷滾動,顯示系統正在做的事情。在這些密密麻麻的日誌中,我們需要尋找與
update_engine相關的訊息,這些訊息會告訴我們更新進行到哪個階段,例如:overall progress 10%,overall progress 20%… 顯示更新進度。ActionProcessor: finished DownloadAction with code ErrorCode::kSuccess表示下載/應用更新檔案成功。ActionProcessor: finished FilesystemVerifierAction with code ErrorCode::kSuccess表示檔案驗證成功。Update successfully applied, waiting to reboot.表示更新已經成功應用,等待重啟。
日誌片段範例:
... (前面是更新過程的日誌) 09-13 07:33:07.344 527 527 I update_engine: [0913/073307.344502:INFO:delta_performer.cc(208)] Completed 895/895 operations (100%), 555278539/555278539 bytes downloaded (100%), overall progress 100% ... (中間是驗證檔案的日誌) 09-13 07:33:22.947 527 527 I update_engine: [0913/073322.947822:INFO:update_attempter_android.cc(454)] Processing Done. 09-13 07:33:22.951 527 527 I update_engine: [0913/073322.951487:INFO:update_attempter_android.cc(462)] Update successfully applied, waiting to reboot. ... (後面是清理和記錄日誌) 09-13 07:33:24.039 527 527 I update_engine: [0913/073324.039591:INFO:metrics_reporter_android.cc(29)] uploading 0 to histogram for metric ota_update_engine_successful_update_reboot_count ...當看到類似
Update successfully applied和ErrorCode::kSuccess的字樣,以及ota_update_engine_successful_update_reboot_count這樣的成功指標時,就代表更新檔案已經成功寫入裝置了! -
重啟裝置: 更新檔案寫入完成後,裝置需要重啟才能載入新的系統。我們在ADB shell環境中輸入
reboot指令來重啟裝置。^C (按Ctrl+C退出logcat) 130|rsb3720_a1:/ # reboot裝置重啟後,就會運行更新後的系統版本了!
實驗成果與價值 #
這次透過ADB進行OTA更新的實驗,結果非常成功!我們驗證了在Advantech的裝置上,可以利用ADB這個工具來執行完整的OTA更新流程,從檔案傳輸到指令執行,一切都如預期般順利。
這項實驗的成功,再次展現了Advantech在軟體和硬體整合上的深厚實力。雖然ADB OTA主要用於開發、測試或特定的維護情境,不像傳統OTA那樣是給終端使用者直接操作的,但它提供了一個強大且靈活的工具,讓我們的工程師和合作夥伴能夠更方便地進行系統調試和驗證。
這也意味著:
- 更高效的開發與測試: 工程師可以快速地將新的系統版本推送到測試裝置上,加速開發週期。
- 靈活的維護選項: 在某些特殊情況下,如果無法使用標準的OTA伺服器進行更新,ADB OTA提供了一個直接的替代方案。
- 展現技術掌握度: 成功實踐ADB OTA,證明我們對底層系統更新機制的深入理解和掌握能力。
結論與未來展望 #
這次ADB OTA的實驗,是Advantech持續投入研發、積極探索新技術的一個縮影。我們不僅提供穩定可靠的硬體平台,更致力於在軟體層面提供更多元、更便捷的解決方案。
未來,我們將繼續深化在OTA技術領域的研究,探索更多自動化、更安全的遠端更新方式,讓我們的客戶無論身在何處,都能輕鬆管理和維護他們的Advantech裝置。我們相信,透過不斷的創新和實驗,Advantech將能為各行各業帶來更多智慧、高效的解決方案!
感謝您的閱讀,如果您對Advantech的技術有任何興趣或疑問,歡迎隨時與我們聯繫!