Программирование ARM: решение проблем, FAQ CCS tiobj2bin failed Thu, July 02 2020  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

CCS tiobj2bin failed Печать
Добавил(а) microsin   

Проблема при создании двоичного файла с помощью командного файла tiobj2bin в среде Code Composer Studio (CCS). Выводится сообщение об ошибке примерно такого вида:

...
Finished building: "HelloWorld.out"
 
"C:/ti/ccs1010/ccs/utils/tiobj2bin/tiobj2bin.bat" "HelloWorld.out" "HelloWorld.bin"
tiobj2bin.bat failed on ofd470
Please see http://processors.wiki.ti.com/index.php/Tiobj2bin_Failed
tiobj2bin.bat failed on hex470
Please see http://processors.wiki.ti.com/index.php/Tiobj2bin_Failed
mkhex4bin failure occurred.  Giving up.
 
"C:\Users\derai\workspace_v10\HelloWorld\Debug\armofd" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
"mkhex4bin" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
 
**** Build Finished ****

Подобная проблема может возникать либо в среде Windows при запуске tiobj2bin.bat, либо в Linux при запуске аналогичного скрипта.

Некоторые автономно запускающиеся встраиваемые системы требуют, чтобы исполняемый код был запрограммирован в память flash. ПО, которое программирует flash, не могут записать исполняемый объектный файл (т. е. выходной файл с расширением .out в ELF-формате, предназначенный для отладки), генерируемый линкером. Вместо этого нужен простой двоичный файл. Утилита tiobj2bin преобразует исполняемый объектный файл в такой двоичный файл. Шаг post-build проекта CCS запускает tiobj2bin с необходимыми аргументами.

Подробности, как работает скрипт tiobj2bin, лучше всего прочитать в его комментариях. На данный момент достаточно знать о том, какие важные шаги в нем выполняются, и какие инструменты для этого используются:

OFD. Это сокращение от Object File Display, обозначает утилиту расшифровки объектного файла. Имя исполняемого файла armofd.exe, он находится в директории ccs\tools\compiler\ti-cgt-arm_20.2.1.LTS\bin каталога установки CCS.

HEX. Утилита преобразования HEX. Имя исполняемого файла armhex.exe, он также находится в директории ccs\tools\compiler\ti-cgt-arm_20.2.1.LTS\bin каталога установки CCS.

MKHEX. Утилита, автоматически генерирующая файл hex-команд. Имя исполняемого файла mkhex4bin.exe. Поставляется от Code Generation Tools XML Processing Scripts [2]. Находится в директории ccs\utils\tiobj2bin каталога установки CCS, в той же папке находится и файл tiobj2bin.bat.

Примечание: здесь пути указаны для платформы Windows, по умолчанию каталог установки CCS это c:\ti\ccs1010.

[Что может пойти не так]

Утилиты компилятора TI ARM поменяли имена своих исполняемых файлов начиная с релиза 5.0.0. Вместе с другими изменениями ofd470.exe поменялся на armofd.exe, и hex470.exe поменялся на armhex.exe. Рассмотрим, что произойдет, когда компилируется старый проект CCS, и у него настроен шаг post-build, использующий tiobj2bin. Этот шаг будет вызывать утилиты OFD и HEX по именам ofd470.exe и hex470.exe. К счастью, скрипт tiobj2bin автоматически может это определить, и поменять имя ofd470.exe на armofd.exe. То же самое делается и для hex470.exe и armhex.exe.

Если Вы увидели сообщение об ошибке, наподобие показанного выше, то система изменения имен вызова этих исполняемых утилит потерпела неудачу. Имя команды, показанное в диагностике, является исходной формой этой команды перед любым изменением. По неизвестным причинам могут быть не найдены ofd470.exe и/или armofd.exe. Если предоставлен полный путь до исполняемого файла утилит, то будет произведен поиск в этой директории. Если же не предоставлен полный путь, то для поиска используются системные пути поиска (на Windows это пути, прописанные в переменной окружения %PATH%).

Пример правильной настройки шагов post-build для генерации файла app, предназначенного для загрузки с карты с помощью загрузчика MLO:

Шаг 1, получение двоичного файла HelloWorld.bin:

"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat" "${BuildArtifactFileName}"
   "${BuildArtifactFileBaseName}.bin" armofd.exe armhex.exe
   "${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe"

Шаг 2, добавление к файлу HelloWorld.bin заголовка:

Шаг 2, добавление к файлу HelloWorld.bin заголовка:
"c:\ti\AM335X_StarterWare_02_00_01_01\tools\ti_image\tiimage.exe"
   0x80000000 NONE "${BuildArtifactFileBaseName}.bin" "${CWD}\app"

[Переход с компилятора TI ARM на компилятор GCC ARM]

Одна из причин ошибки: переход с компилятора TI ARM на компилятор GCC ARM. Например, проект CCS начинали разрабатывать с помощью компилятора TI ARM. Затем с какого-то момента перешли на компилятор GCC ARM. Это изменение могло быть применено к существующей конфигурации сборки, или путем добавления новой конфигурации сборки. Так или иначе, обновленная или новая конфигурация сборки наследует многие свойства первоначальной конфигурации сборки. Одно из этих свойств относится к armofd, это строка ${CG_TOOL_ROOT}/bin/armofd или что-то подобное. Когда меняется конфигурация сборки, переменная CG_TOOL_ROOT меняется с пути до компилятора TI на путь до компилятора GCC. В месте расположения компилятора GCC может не быть ни armofd, ни armhex. Так что смотрите сообщение диагностики об ошибке.

Одно из решений проблемы - поменять способ, как создается двоичный файл. Можно не использовать больше tiobj2bin, и вместо него использовать GCC objcopy. Удалите шаг post-build, и вместо него используйте GNU-утилиту objcopy для преобразования .out в двоичный файл.

[Ссылки]

1. Tiobj2bin Failed site:ti.com.
2. Code Generation Tools XML Processing Utilities site:ti.com.
3AM335X StarterWare: загрузка и прошивка.

 

Добавить комментарий


Защитный код
Обновить

Top of Page