ファームウェア開発をしていると、ちょっとしたバイナリファイルを作りたいときがありますよね。よくある方法は、バイナリエディタで作ったり、ちょっと頑張る人ならC言語でプログラム組んだりしますね。
ただ、ちょっとしたバイナリファイルを作成するだけなら、MSYS2@WindowsやLinux、OS Xなら簡単にできますよー。
あの echo コマンドを使うだけです。オプション -en を使えばOKです!
(DOS の echo ではできません、念のため)
echo を使って簡単にバイナリファイルを作成する
例えば、全てのbitが1の 4Byte のファイルを作る場合は下記のようにすればOKです。
ちなみに xxd -g1 は1Byteづつ表示するコマンドです。ついでにおぼえておくと便利ですよ。
$ echo -en "\xff\xff\xff\xff" > hoge.bin $ xxd -g1 hoge.bin 00000000: ff ff ff ff
みんな大好き 0xdeadbeef の場合はこんな感じ。もし「0xdeadbeef について何??」て思った人はこのWikipediaを見てみてくださいね。
$ echo -en "\xde\xad\xbe\xef" > fuga.bin $ xxd -g1 fuga.bin 00000000: de ad be ef
最後にもう一つ。ARMっ子ならご存知の、無限ループ命令ですね。
$ echo -en "\xea\xff\xff\xfe" > forever_loop.bin $ xxd -g1 forever_loop.bin 00000000: ea ff ff fe
以上、ちょっとしたバイナリファイルを簡単に作成する方法でした!
コメント
すごく細かいことなんですが,`echo`コマンドの(というか所謂Unixコマンドの)統一規格であるPOSIXでは`echo`コマンドに`-en`オプションはありません(参考: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html)。実際に,`echo`コマンドの一つの実装であるOpenBSD上の`echo`コマンドには`-e`オプションはありません(参考: http://man.openbsd.org/echo.1)。
替わりに`printf`コマンドを使うといいと思います。但し,これもPOSIX規格でバイナリデータの数値直接指定には8進数しか使えませんので注意が必要です。
例::
$ printf ‘\352\377\377\376’ > forever_loop.bin
尤も,(私は組込みOSに全く詳しくないのでどうとも言えませんが)組込みOSとしての利用が多い?Linuxに搭載されている`echo`コマンドはBashシェル組込みのもの(参考: https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#Bash-Builtins)でもGNU製のもの(参考: https://www.gnu.org/software/coreutils/manual/html_node/echo-invocation.html)でも`-en`オプションは使えますけどね。
すいません。リンクの判定がおかしくなってしまいました。