我需要.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