當軟體工具不夠用時#
除錯嵌入式系統和系統軟體時,有時需要檢視和分析整個運算堆疊——從硬體到應用。在大多數情況下,IDE、tracing 和 logging 就夠用了,但當軟體碰觸硬體時,這些工具可能無能為力。
Logic Analyzer#
Logic analyzer 是一個通用工具,能以每秒數百萬 samples 的速度擷取、儲存和分析數位訊號。現在 USB 版本大約 100 美元就能買到。它可以監控:
- 硬體板上的任意數位訊號
- 各種通訊協定(SPI、I2C、serial、CAN、JTAG、USB 等)
Protocol Analyzer 和 Bus Analyzer#
如果你專精於特定技術,可以投資專用的 protocol analyzer 或 bus analyzer。例如 CAN bus(controller area network)的獨立分析模組,可以插入匯流排來過濾、顯示和記錄流量。
這類硬體設備相比軟體方案的優勢:
- 保證在真正的線路速率下工作
- 支援同時監控多條通道
- 可以根據封包深處的 bit patterns 設定觸發條件和篩選器
土法煉鋼也有效#
如果缺乏專用除錯硬體,不要害怕即興發揮。書中有個精彩案例:為了重現一個網頁表單資料遺失的問題,作者用錫箔紙包裹 USB 無線 modem 來模擬不穩定的網路連線,立刻就看到了問題。
嵌入式軟體的除錯技巧#
當裝置缺乏完善的 I/O 時:
- 用狀態燈或蜂鳴器的編碼閃爍/聲響來表示軟體狀態(甚至用 Morse Code)
- 將 log 寫入非揮發儲存裝置(如 USB 隨身碟),帶回工作站分析
- 實作簡易 serial data encoder,透過未使用的 I/O pin 輸出資料
- 如果裝置有網路連線,透過 HTTP 或 DNS request 與外界溝通
網路封包監控#
使用 Wireshark(開源封包分析工具)監控網路封包。幾種常見情境:
- 同機監控:直接在執行應用的主機上啟動 Wireshark
- Managed switch:設定 port mirroring,將目標伺服器的流量鏡射到 Wireshark 所在的 port
- Ethernet hub:hub 會將封包廣播到所有 port(比 switch 便宜但已不常見)
- Command-line 擷取:用
tcpdump遠端登入目標主機擷取封包,加上-w選項寫入檔案後用 Wireshark 分析 - Bridge 模式:設定一台有兩個網路介面的電腦做為橋接器,攔截並分析流經的封包
類似的 bridge 裝置還可以用來模擬各種網路情境:不同來源的封包、traffic shaping、頻寬限制、防火牆設定等,Linux 上使用
iptables來實現。
重點回顧#
- Logic、bus 或 protocol analyzer 可以幫助你精確定位硬體層級的問題
- 土法煉鋼的裝置也能幫助你調查硬體相關的問題
- 使用 Wireshark 搭配 Ethernet hub、managed switch 或 command-line 擷取來監控網路封包