.bin
ファームウェアをアップグレードするには、モデムに転送してファイルを送信する必要がありますXModem
。
モデムがローカルコンピュータに接続されている場合、コマンドは次のようになります。
sz -X -k -b -vvv - file_to_transfer.BIN > /dev/ttyUSB0 < /dev/ttyUSB0
ファイルを受け取るためにモジュール側で必要なコマンドも作成しました。
問題は、内部的にこれらのモデムがあるリモートホストでこれを行う必要があることです。ホストコンピュータにファイルを保存するメモリが不足しているため、ファイルをデバイスに転送できません。
最後のアイデアは、ファイルをsz
コマンドにパイプすることです。次のコマンドを使用してローカルで試しました。
cat file_to_transfer.BIN | sz -X -k -b -vvv - > /dev/ttyUSB0 < /dev/ttyUSB0
このコマンドは、次のエラーメッセージを表示します。
Sending s2382.lsz, 0 blocks: Give your local XMODEM receive command now.
Xmodem sectors/kbytes sent: 0/ 0kRetry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Timeout on sector ACK
Retry 0: Retry Count Exceeded
なぜこれがうまくいかないのか、この問題を解決するためのより良いアイデアがあるのかを説明してください。
答え1
少し遅れているようですが、同様の問題が発生しました。
fifo(名前付きパイプ)を使用します。バラよりhttps://linux.die.net/man/3/mkfifo
# Create a temporary fifo
mkfifo /tmp/sz_fifo
# Write the file to the fifo and place in the background
# (Replace "cat" with some other command to stream over the network)
cat file_to_transfer.BIN > /tmp/sz_fifo &
# sz will read the file from the fifo
sz -X -k -b -vvv - /tmp/sz_fifo > /dev/ttyUSB0 < /dev/ttyUSB0
# Clean up
rm /tmp/sz_fifo