0

バイナリ ファイルを単語 (32 ビット) ごとに読み取り、その単語を devmem というアプリケーションに渡す BASH スクリプトを作成したいと考えています。

今、私は持っています:

...
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 をインストールすることはできません。

このスクリプトはパフォーマンス主導型です。私のアプローチが間違っている場合は修正してください。ただし、この理由から、(hexdump -> file、parse file -> devmem) の代わりに (dd -> binary word -> devmem) を選択しました。- 私の最終目標への最適なルートに関係なく、このエクササイズは私にいくつかのトラブルをもたらしました.

ありがとう!

4

1 に答える 1

0

ご覧のとおり、「|」は使用しないでください。どちらも 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 に答える