通过串行控制台发送文件的最快方法是什么?

通过串行控制台发送文件的最快方法是什么?

我必须通过 UART 控制台将二进制文件写入嵌入式设备。我了解 SLIP、PPP 和 ZModem,但该设备只有极少的 busybox,无法安装其他服务或程序。

我目前正在使用 Python 串行库将十六进制转义的字节写入设备:

printf '\x00\x01\x02' >> file.bin

由于文件很大,我无法一次打印整个文件,因为它超出了写入缓冲区的大小,所以我必须分块进行。看来我还必须在每次写入后读取控制台的输出(我输入的命令的反馈),否则缓冲区会再次变满(不确定这是因为 Python 串行库还是因为设备)。

所有这些导致我必须写入超过 4 倍的文件大小,以及读取相同数量的字节才能成功传输我的文件。这显然非常缓慢且效率低下。

在这种情况下,还有其他方法可以用来更快地传输二进制文件吗?

答案1

Busybox 通常包含 awk。如果你有这个,那你就走运了。在源上,使用 base64 对文件进行编码,然后将其 cat 到 xclip 中以将其放在剪贴板上:

cat file.bin | base64 > file.bin.base64
cat file.bin.base64 | xclip -sel clip

在目标上,您需要将 stdin cat 到一个文件:

cat - > file.bin.base64

当串行控制台停止滚动时,按 Ctrl-D 终止流。

那么你需要一个用 awk 编写的 base64 解码器

vim 将其放入一个文件中,保存它,然后使用它来解码您传输的 base64 编码文件。

这是精简版的饮食方案。这里有一篇更全面的文章,介绍如何将文件粘贴复制到裸串行控制台上

披露:我写了所引用的文章。

相关内容