tdi@013h 0 8 февраля, 2011 Опубликовано 8 февраля, 2011 (изменено) · Жалоба Здравствуйте уважаемые форумчане. Свалилась на меня задача обновления комплекса ПО (Eclipse 3.5.1+Codeosurce 4.5.1+OpenOCD всё крутится под Calculate Linux). Есть железка на stm32f107 и проект под неё написанный. На соседнем компьютере с аналогичным ПО (версии эклипса, кодсоурса по древнее будут) проект собирается, линкуется, заливается в контроллер и всё работает. С обновлением на стадии линковки начинают лезть ошибки. Проект, все файлы в нём и скрипт линковки идентичны. Ошибки такие section .ARM.extab.text.__gxx_personality_v0 loaded at [0802e5d0,0802e5f3] overlaps section .init_array loaded at [0802e5d0,0802e5d7] section .fini_array loaded at [0802e5d8,0802e5db] overlaps section .ARM.extab.text.__gxx_personality_v0 loaded at [0802e5d0,0802e5f3] section .init loaded at [0802db0c,0802db17] overlaps section .data loaded at [0802db0c,0802e5cf] Пробовал скормить стандартный сценарий generic.ld из состава Codesource, предварительно изменив количество памяти в тексте сценарии. Проект линкуется, создаёт объект, но на стадии заливки начинаются проблемы (section too long, если не изменяет память, чуть позже скину точный лог). Кусочно объединить "родной" скрипт и generic.ld не удалось, ошибки. Текст родного скрипта. Linker Script В силу слабого знакомства с предметом темы вообще слабо представлю логику происходящего(кроме того, что с адресацией памяти косяк). Вопроса два: Что поправить в "родном" скрипте? Где бы найти картинку под мой stm32f107 аналогичную этой? Изменено 8 февраля, 2011 пользователем tdi@013h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 8 февраля, 2011 Опубликовано 8 февраля, 2011 · Жалоба Вот тут лежит рабочий скрипт для 107. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tdi@013h 0 8 февраля, 2011 Опубликовано 8 февраля, 2011 (изменено) · Жалоба Со скриптом из предыдущего поста получается вот так. Тоже на стадии линковки. opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-abort.o): In function `abort': abort.c:(.text+0xa): undefined reference to `_exit' /opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-sbrkr.o): In function `_sbrk_r': sbrkr.c:(.text+0x12): undefined reference to `_sbrk' /opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-signalr.o): In function `_kill_r': signalr.c:(.text+0x14): undefined reference to `_kill' /opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-signalr.o): In function `_getpid_r': signalr.c:(.text+0x2c): undefined reference to `_getpid' /opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-writer.o): In function `_write_r': writer.c:(.text+0x16): undefined reference to `_write' /opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-closer.o): In function `_close_r': closer.c:(.text+0x12): undefined reference to `_close' /opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-fstatr.o): In function `_fstat_r': fstatr.c:(.text+0x14): undefined reference to `_fstat' /opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-isattyr.o): In function `_isatty_r': isattyr.c:(.text+0x12): undefined reference to `_isatty' /opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-lseekr.o): In function `_lseek_r': lseekr.c:(.text+0x16): undefined reference to `_lseek' /opt/codesource/arm-none-eabi/lib/thumb2/libc.a(lib_a-readr.o): In function `_read_r' Решилось добавлением строк _sbrk = .; _write = .; _close = .; _fstat = .; _isatty = .; _lseek = .; _read = .; _exit = .; _kill = .; _getpid = .; В секцию .text Спасибо за линк на рабочий скрипт. Изменено 8 февраля, 2011 пользователем tdi@013h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 8 февраля, 2011 Опубликовано 8 февраля, 2011 · Жалоба Решилось добавлением строк _sbrk = .; _write = .; _close = .; _fstat = .; _isatty = .; _lseek = .; _read = .; _exit = .; _kill = .; _getpid = .; В секцию .text Ну это не совсем корректный метод. Раз _sbrk() подцепился, значит где-то есть вызов malloc(). И значит программа рухнет при этом вызове. Вот тут я приаттачивал минимальный набор системных заглушек. Добавьте этот файл к своему проекту, тогда всё будет правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tdi@013h 0 9 февраля, 2011 Опубликовано 9 февраля, 2011 · Жалоба Добавил syscalls, не взлетело. Жалуется на отсутствие всё тех же вызовов. Пока собрал по своему варианту. Через jtag цепляется, пишет скорости, пишет что всё стерто. На этапе заливки начинает ругаться такими словами source /home/edd/workspace/OB7_NEW/target.ini target extended-remote localhost:3333 Remote 'g' packet reply is too long: 753c7eb02f295aa5f532d266a4fdbf0e0eb4a4759e90273038c749e82d4d20465c1b8931542c8b12 1215b052acec5ae862e89d40fcffffffffffffffffffffff000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000020000001 monitor soft_reset_halt "monitor" command not supported by this target. monitor reset halt "monitor" command not supported by this target. working_area 0 0x20000000 0x5000 nobackup Undefined command: "working_area". Try "help". monitor sleep 500 "monitor" command not supported by this target. monitor stm32x mass_erase 0 "monitor" command not supported by this target. monitor sleep 500 "monitor" command not supported by this target. load /home/evgen/Work_New/eclipse/OB7_NEW/Debug/ob7 You can't do that when your target is `exec' monitor sleep 500 "monitor" command not supported by this target. symbol-file /home/evgen/Work_New/eclipse/OB7_NEW/Debug/ob7 /home/evgen/Work_New/eclipse/OB7_NEW/Debug/ob7: \320\235\320\265\321\202 \321\202\320\260\320\272\320\276\320\263\320\276 \321\204\320\260\320\271\320\273\320\260 \320\270\320\273\320\270 \320\272\320\260\321\202\320\260\320\273\320\276\320\263\320\260. monitor sleep 500 "monitor" command not supported by this target. monitor sleep 500 "monitor" command not supported by this target. b main During symbol reading, debug info gives in-file macro definition with zero line 0: __STDC__ 1. Breakpoint 1 at 0x80003aa: file ../main.cpp, line 85. monitor reset halt "monitor" command not supported by this target. Что оно от меня хочет? Мой target.ini здесь. http://rghost.ru/4266968 При попытке залить не объектник, а *.hex получаю такие ошибки Open On-Chip Debugger 0.4.0-rc2-dev-snapshot (2011-02-07-16:18) Licensed under GNU GPL v2 For bug reports, read http://openocd.berlios.de/doc/doxygen/bugs.html trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain 1000 kHz jtag_nsrst_delay: 100 jtag_ntrst_delay: 100 Warn : use 'mychip' as target identifier, not '0' Info : J-Link initialization started / target CPU reset initiated Info : J-Link ARM-Pro V1.x compiled Nov 26 2009 20:13:00 Info : JLink caps 0xb9ff7bbf Info : JLink hw version 3011000 Info : JLink max mem block 22976 Info : Vref = 3.306 TCK = 1 TDI = 0 TDO = 1 TMS = 0 SRST = 0 TRST = 0 Info : J-Link JTAG Interface ready Info : clock speed 1000 kHz Info : JTAG tap: auto0.tap tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) Info : JTAG tap: auto1.tap tap/device found: 0x06418041 (mfg: 0x020, part: 0x6418, ver: 0x0) Info : mychip: hardware has 6 breakpoints, 4 watchpoints Warn : mychip -- clearing lockup after double fault Info : JTAG tap: auto0.tap tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) Info : JTAG tap: auto1.tap tap/device found: 0x06418041 (mfg: 0x020, part: 0x6418, ver: 0x0) target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc background polling: on TAP: auto0.tap (enabled) target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc Info : device id = 0x10016418 Info : flash size = 256kbytes stm32x mass erase complete Info : accepting 'gdb' connection from 0 Warn : acknowledgment received, but no packet pending Info : dropped 'gdb' connection - error -400 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tdi@013h 0 9 февраля, 2011 Опубликовано 9 февраля, 2011 (изменено) · Жалоба При запуске тогоже самого через консоль та же байда. Изменено 9 февраля, 2011 пользователем tdi@013h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 9 февраля, 2011 Опубликовано 9 февраля, 2011 · Жалоба Добавил syscalls, не взлетело. Жалуется на отсутствие всё тех же вызовов. Как это так? Может куда-то не туда добавили? На этапе заливки начинает ругаться такими словами Во-первых, покажите, как запускается openocd (параметры). Во-вторых, в вот мой рабочий скрипт для gdb: target remote | openocd --pipe -f interface/arm-usb-ocd.cfg -f target/stm32.cfg load monitor soft_reset_halt set mem inaccessible-by-default off compare-sections tbreak main continue Поправьте интерфейс и таргет под свои реалии. Openocd при этом отдельно запускать не надо. Если ничего не поможет, возьмите стабильную версию openocd, dev-snapshot - может и сам дурить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tdi@013h 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 (изменено) · Жалоба openocd запускается так. openocd.cfg в аттаче. openocd.txt Изменено 10 февраля, 2011 пользователем tdi@013h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tdi@013h 0 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба Откатился по openocd до 0.3.1, но лыжи по прежнему не едут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tdi@013h 0 22 февраля, 2011 Опубликовано 22 февраля, 2011 (изменено) · Жалоба Пересобиранием openocd вылечилось. Теперь такая проблема с заливкой. Если общаться с gdb через консоль, то нехитрая последовательность команд target remote localhost:3333 monitor soft_reset_halt load /home/edd/workspace/OB7_NEW/Debug/ob7 b main monitor soft_reset_halt выполняется, и загружает прошивку в память железки. При попытке сделать всё тоже самое через связку Eclipse+Zylin имеем ругань source /home/edd/workspace/OB7_NEW/target.cfg target remote localhost:3333 Remote 'g' packet reply is too long: c80a00202f295aa5f53292e4a4ddbf0e0cb4a4779e 90377038c549e82d4c20065c1b8931542c8b121015b150a8e84ae862e89d40e4b90208ffffffff 1d000008000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000020000001 monitor soft_reset_halt "monitor" command not supported by this target. load /home/edd/workspace/OB7_NEW/Debug/ob7 You can't do that when your target is `exec' b main During symbol reading, debug info gives in-file macro definition with zero line 0: __STDC__ 1. Breakpoint 1 at 0x80003aa: file ../main.cpp, line 85. monitor soft_reset_halt "monitor" command not supported by this target. Куда смотреть? Также прошу помощи по команде (gdb) monitor flash write_image erase unlock /home/edd/workspace/OB7_NEW/Debug/ob7 0x08000000 auto erase enabled auto unlock enabled No flash at address 0x10000000 No flash at address 0x1002e7d8 Как в консольном режиме ей указать адреса флэша? Изменено 22 февраля, 2011 пользователем tdi@013h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 22 февраля, 2011 Опубликовано 22 февраля, 2011 · Жалоба Куда смотреть? Может запускаете не тот gdb? Как в консольном режиме ей указать адреса флэша? Так вроде в openocd.cfg указывается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tdi@013h 0 24 февраля, 2011 Опубликовано 24 февраля, 2011 · Жалоба К gdb путь явно прописал. /opt/codesource/bin/arm-none-eabi-gdb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tdi@013h 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба Поздравьте. Всю прошлую неделю насиловал "труп". Проблема была с железякой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба Бывает :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tdi@013h 0 1 марта, 2011 Опубликовано 1 марта, 2011 (изменено) · Жалоба Новую тему поднимать не буду, продолжу здесь. С заливкой, запуском и скриптами вроде разобрался. имеется такая мистика: Есть 2 машины. версии openocd, Codesourcery совпадают. (Немного отличаются версии ОС и эклипса) Одинаковым компилятором на машинах собирается бинарник проекта(из одинаковых исходников) разной длинны(около 100 кбайт разницы), соответственно проект неправильной длинны не запускается, ибо не совпадают указатели на память. Куда смотреть? Изменено 1 марта, 2011 пользователем tdi@013h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться