目的
インテルHEXファイル(*.hex)をバイナリーファイル(*.bin)に変換することがあったのだが,少し困っていたので備忘録として記載する.
要件として必要なのは,以下の3点とする:
名称 | 規格 | 製造会社 | 備考 |
---|---|---|---|
オペレーティングシステム | Windows 10 Pro 64ビット,22H2 | マイクロソフト | |
HEXファイル変換ツール | HEXファイルツール | Mario | 社内でかつて使われていたツール |
Linux OS | Ubuntu,22.04.3 LTS | Canonical | 他のLinuxでもよい.cat /etc/os-release にて確認 |
変換コマンド | objcopy,2.38 | GNU | objcopy --version にて確認 |
結論
変換前のインテルHEXファイルをsource.hex
,変換後のバイナリーファイルをsource.bin
とすると,以下のコマンドでsource.hex
をsource.bin
に変換できる:
objcopy --input-target=ihex --gap-fill 0xFF --output-target=binary source.hex source.bin
--gap-fil
オプションがない場合は,セクション間のギャップは0x00で埋まる.変換前のファイル,変換後のファイルの順番さえあっていれば,オプションの順序は問わない.
また,オプションはもちろん短縮形でもよく,同じ記載の場合
objcopy -I ihex --gap-fill 0xFF -O binary source.hex source.bin
となる.
その他
バイナリーファイルの生成について
今回の記事のきっかけは,HEW(High-performance Embedded Workshop)でのビルド生成物であるインテルHEXファイルをバイナリーファイルに変換したかったことによる.HEWのツールチェイン設定の最適化リンカタブのカテゴリ:出力の設定において、出力形式をHEX(ELF/DWARFアブソリュート付き)
からバイナリ(ELF/DWARFアブソリュート付き)
に変更することもできるのだが,こちらではセクション間のギャップが必ず0x00にしかできなかった.
HEXファイルツールについて
Windows10(64ビット),Windows7(32ビット)で起動すると,GUIが異常でそもそも使えない状態だった:
また,Windows XP(32ビット)では正常なGUI表示となるが,インテルHEXファイルが大きいとバイナリーが途中から0x00になり,サイズが小さい異常なバイナリーファイルができなかった.
objcopyについて
できればLinuxまわりのインストールが必要なく進めたかったため,Git Bashで試してみたが,Git Bashにはobjcopyがデフォルトでは入っていなかった.
今回はWSL(Windows Subsystem for Linux)上のUbuntuで試してみて,こちらではデフォルトでobjcopyが実施できた*2.
改訂履歴
# | 日付 | 内容 |
---|---|---|
1 | 2024/07/08 | objcopy の短縮形のオプションの場合を追記 |
参考サイト
- binary - Converting from *.hex to *.bin for ARM on Linux - Stack Overflow(2024/07/06現在)
- Use objcopy --gap-fill only for special section - Stack Overflow(2024/07/06現在)
*1:当たり前だけど,HEXファイルツールにて問題があった.
*2:VirtualBox上のUbuntuでも実行できるはず.