0

我想创建一个 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 -> binary word -> devmem) 而不是 (hexdump -> file, parse file -> devmem)。- 不管我的最终目标的最佳路线是什么,这个练习给我带来了一些麻烦,我非常感谢有人帮助我弄清楚如何做到这一点。

谢谢!

4

1 回答 1

0

正如我所见,你不应该使用 '|' 或 echo,因为它们都是 ASCII 工具。相反,我认为'>' 可以为你工作。
我认为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 只是连接字节流,它也可以用于连接二进制文件,它只会连接字节序列。” 维基

或者您可以更改devmem以接受文件作为输入...我希望这会有所帮助!

于 2013-08-29T10:25:38.000 回答