我必须通过 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 编码文件。
这是精简版的饮食方案。这里有一篇更全面的文章,介绍如何将文件粘贴复制到裸串行控制台上。
披露:我写了所引用的文章。