我想创建一个BASH脚本,它按字读取二进制文件,字(32位),并将该字传递给名为devmem的应用程序。
现在,我有:
...
for (( i=0; i<${num_words}; i++ ))
do
val=$(dd if=${file_name} skip=${i} count=1 bs=4 2>/dev/null)
echo -e "${val}" # Weird output...
devmem ${some_address} 32 ${val}
done
...
$ {val}有一些奇怪的(ASCII?)格式字符表示,看起来像带有问号的钻石。
如果我将“val =”行替换为:
val=$(dd ... | xxd -r -p)
我得到了我想要的输出。
使用BASH复制xxd功能的最简单方法是什么?
注意:我正在开发一个嵌入式Linux项目,其中的要求不允许我安装xxd。
这个脚本是性能驱动的,如果我的方法错了,请纠正我,但出于这个原因,我选择了(dd - >二进制字 - &gt; devmem)而不是(hexdump - &gt;文件,解析文件 - &gt; devmem)。 - 无论我最终目标的最佳路线如何,这次练习给我带来了一些麻烦,我非常感谢有人帮我弄清楚如何做到这一点。
谢谢!
答案 0 :(得分:0)
我认为你不应该使用'|'或echo,因为它们都是ASCII工具。相反,我认为'&gt;'可以为你工作。
我认为devmem
是一个bash函数或别名,所以我会尝试这样的事情:
for (( i=0; i<${num_words}; i++ ))
do
dd if=${file_name} skip=${i} count=1 bs=4 2>/dev/null 1> binary_file
# echo -e "${val}" # Weird output...
devmem ${some_address} 32 $(cat binary_file)
done
“由于cat只是连接字节流,它也可以用来连接二进制文件,它只会连接字节序列。” wiki
或者你可以改变devmem
接受文件作为输入...我希望这会有所帮助!