如何以最簡單的方式傳輸檔案到開發板上-lrzsz-ZModem

月舞纱雨日發表於2024-10-22

在某魚上閒逛的時候,看到樹莓派A+這個型號的板子,很便宜30來塊錢,有6ULL的效能。
但是既沒有網口、也沒有WiFi,只有一個usb,電腦和它傳資料豈不是非常麻煩?

其實有一個非常好用的協議叫ZModem,它的設計就是主要為了能在串列埠這種幾乎無需配置的連線協議上傳輸檔案。類似的還有XModem 和 YModem,但是正如他們的名字順序一樣,ZModem最為強大。rz、sz就可以在串列埠上用ZModem協議傳輸資料

基於網路的遠端檔案傳輸的工具有很多,例如scp、sftp、ftp等。如果開發板沒網口、或者電腦與開發板ping通需要大量繁瑣的網路配置,串列埠幾乎是唯一互動方式的情況下,使用rz、sz傳輸更為方便。(其實還有USB虛擬網路卡)

  • Xmodem:這種古老的傳輸協議速度較慢,但由於使用了CRC錯誤偵測方法,傳輸的準確率可高達99.6%
  • Ymodem:這是Xmodem的改良版,使用了1024位區段傳送,速度比Xmodem要快。
  • Zmodem:Zmodem採用了串流式(streaming)傳輸方式,傳輸速度較快,而且還具有自動改變區段大小和斷點續傳、快速錯誤偵測等功能,是目前最流行的檔案傳輸協議

ZModem強大在於它的穩定與可靠性

  • 自動重傳:在出現傳輸錯誤時,可以自動重傳資料。
  • 檔案恢復:支援在斷點處恢復檔案傳輸,避免從頭開始。
  • 動態緩衝:能夠根據網路狀況自動調整資料傳輸速度。
  • 支援長檔名:可以處理比其他協議更長的檔名。

我們常用的終端都支援ZModem傳輸,以下我會使用MobaXterm、XShell、Tabby三個終端舉例

安裝lrzsz

先在開發板上安裝lrzsz,rz和sz分別是傳送與接收的兩個工具

sudo apt install lrzsz
  • 接收檔案
rz
  • 傳送檔案
sz filename

MobaXterm

我使用的版本如上圖,本身自帶ZModem功能,有的老版本有可能需要安裝外掛。

輸入rz,代表你要傳送檔案

此時介面會卡死, Ctrl+C終止都沒用,也千萬不要點選鍵盤傳送任何字元,不然就只能等著強制斷電重啟

調出右鍵選單,選中Send File Using Z-modem

我的習慣是右鍵設定為貼上,左鍵選中複製,所以需要按住Ctrl+右鍵,調出右鍵選單,

顯示的上傳的很快,但是其實並沒那麼快,要等到它跑完,過程是無法打斷的

只有出現上面傳輸完成的字樣後,按下回車就回到了系統。

使用sz filename來傳送檔案到電腦

還是一樣的操作,這次選擇Recieve file using Z-modem

可以看到傳輸過程中還是出現了錯誤,但是由於ZModem強大的錯誤校驗自動重傳功能,我們的檔案還是完好的儲存了下來

X Shell

xshell簡單很多,輸入rz自動開啟檔案選擇框,傳輸就行了

sz也是一樣的

Tabby

和xshell一樣很方便,會自動彈出檔案選擇框

tabby和moba一樣會顯示假速度,需要等到文字提示完成才算完成。

出現Sent字樣就代表完成了

下載檔案顯示的是真實的速度

傳輸完成

總結

我個人更喜歡Xshell,傳輸速度顯示正確,終端穩定性和多開padding也很方便。唯一的缺點就是在vim和menuconfig的時候總是持續性卡頓,所有操作都慢一拍,不懂是我的問題還是它的問題。

相關文章