реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Обьясните пожалуйста как OpenOCD/gdb загружает отлаживаемую программу в target и запускает ее
islavv
сообщение Dec 11 2008, 21:32
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 11-11-08
Пользователь №: 41 522



1) Поскольку openOCD не пишет ничего в файловую систему на таргете
- используется единственная возможность залить прогу через JTAG в RAM

2) почему при этом программа не конфликтует с ядром Linux которое там исполняется и памятью которая
ее занимает или я могу только ядро загрузить отлаживать?

3) если я могу hello_world.c скомпилировать и загрузить откуда мне узнать где свободное место в памяти

Если кто отлаживал приложения через отладчик и openocd приведите пожалуйста пример команд и последовательность действий для загрузки программы в target и отладки
Спасибо
Go to the top of the page
 
+Quote Post
amw
сообщение Dec 12 2008, 08:54
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(islavv @ Dec 11 2008, 23:32) *
1) Поскольку openOCD не пишет ничего в файловую систему на таргете
- используется единственная возможность залить прогу через JTAG в RAM

2) почему при этом программа не конфликтует с ядром Linux которое там исполняется и памятью которая
ее занимает или я могу только ядро загрузить отлаживать?

3) если я могу hello_world.c скомпилировать и загрузить откуда мне узнать где свободное место в памяти

Если кто отлаживал приложения через отладчик и openocd приведите пожалуйста пример команд и последовательность действий для загрузки программы в target и отладки
Спасибо

На сколько я понимаю, JTAG вообще и OpenOCD в часности пофтг что там у Вас таргете Linux. Могу ошибаться, JTAG отладку пользую очень редко и всегда на этапе когда ОС еще нет или ее нет вообще.
"Грузите" программу средствами линукс (NFS например).
Для отладки программы на таргете с линукс лучше используйте gdb-server на таргете и target remote в кросс gdb на хосте. Хоть по UART хоть по TCP/IP.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
islavv
сообщение Dec 12 2008, 10:10
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 11-11-08
Пользователь №: 41 522



Цитата(amw @ Dec 12 2008, 11:54) *
Для отладки программы на таргете с линукс лучше используйте gdb-server на таргете и target remote в кросс gdb на хосте. Хоть по UART хоть по TCP/IP.

Для этого нужно GDB на таргет залить и еще скомпилированный -g еxeшник
они OpenOCD специально сделали чтобы этого избежать
вот и интересно как они это делают
Go to the top of the page
 
+Quote Post
Harbour
сообщение Dec 12 2008, 10:53
Сообщение #4


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



openocd программу может сам заливать, но это доп-функция и к отладчику имеет слабое отношение. во первых нужно определиться - у Вас linux + прога или embeded вариант. Если первый, то зачем openocd ? обычный gdb + ftrace/systemtap/kernelprobe спокойно справляется. Если второй вариант, то берется проект, собирается с отладочной инфой, шьется до спины какими средствами в MCU, и потом тупо reset;halt, запускаем remote gdb session, пишем "bp чего-нам нужно"; resume и вперед wink.gif
Go to the top of the page
 
+Quote Post
islavv
сообщение Dec 12 2008, 14:51
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 11-11-08
Пользователь №: 41 522



Цитата(Harbour @ Dec 12 2008, 13:53) *
openocd программу может сам заливать, но это доп-функция и к отладчику имеет слабое отношение. во первых нужно определиться - у Вас linux + прога или embeded вариант. Если первый, то зачем openocd ? обычный gdb + ftrace/systemtap/kernelprobe спокойно справляется. Если второй вариант, то берется проект, собирается с отладочной инфой, шьется до спины какими средствами в MCU, и потом тупо reset;halt, запускаем remote gdb session, пишем "bp чего-нам нужно"; resume и вперед wink.gif

1) у меня embedded вариант
2) "берется проект, собирается с отладочной инфой,"
Проект это обычное приложение - hello world или ядро вместе с embedded приложением?
я понимаю как jtag с openocd могут залить ядро и запустить его
а вот как hello_world elf в уже установленный линукс - не понимаю
и какими командами этот hello_world загружается в openocd
хотелось бы на примере увидеть
спасибо
Go to the top of the page
 
+Quote Post
Harbour
сообщение Dec 13 2008, 06:04
Сообщение #6


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



еще раз о понятиях - "embedded" - это отсутствие в контроллере напрочь linux ядра - т.е. это самописная или готовая примитивная ось с вкомпилированным намертво приложением. чаще даже ось не применяют - а так, набор из 2-3 обработчиков прерываний (timer/serial/ether for ex.). Если linux - еще раз повторюсь - openocd мало чем поможет в отладке app, так как MCU выполняет ядро в первую очередь, а приложение в его контексте - во-вторую. сложно будет отгрести из отладки где у нас ядро исполнялось а где приложение. для отладки приложений в данном случае применяются штатные средства linux, которые я указал в своем посте. определитесь наконец - ядро нужно отлаживать или app ? вообще имеет смысл как-то поставить себе куда-то linux для x86 и поиграться на досуге - 99% вопросов отпадают сами собой.
Go to the top of the page
 
+Quote Post
islavv
сообщение Dec 13 2008, 07:45
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 11-11-08
Пользователь №: 41 522



Цитата(Harbour @ Dec 13 2008, 09:04) *
еще раз о понятиях - "embedded" - это отсутствие в контроллере напрочь linux ядра - т.е. это самописная или готовая примитивная ось с вкомпилированным намертво приложением. чаще даже ось не применяют - а так, набор из 2-3 обработчиков прерываний (timer/serial/ether for ex.). Если linux - еще раз повторюсь - openocd мало чем поможет в отладке app, так как MCU выполняет ядро в первую очередь, а приложение в его контексте - во-вторую. сложно будет отгрести из отладки где у нас ядро исполнялось а где приложение. для отладки приложений в данном случае применяются штатные средства linux, которые я указал в своем посте. определитесь наконец - ядро нужно отлаживать или app ? вообще имеет смысл как-то поставить себе куда-то linux для x86 и поиграться на досуге - 99% вопросов отпадают сами собой.

Harbor, Спасибо!!
я тоже уже сообразил что не все с linux работают и на контроллере очень часто памяти 256К а то и меньше
С Linux я давно играюсь а вот не одной примитивной оси не видел - разве что redboot
с gdb я знаком
ядро мне не надо отлаживать - может только один загружаемый драйвер
Получается что мне нужно binutils а именно gdb скомпилировать для ARM
и протащить в мои 32Mb ОЗУ на плате
Кстати если подскажете какое с каким нибудь микроядром для контроллеров и C буду признателен
Что нибудь еще проще чем eCOS
Go to the top of the page
 
+Quote Post
amw
сообщение Dec 13 2008, 22:32
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(islavv @ Dec 13 2008, 09:45) *

Такое впечатление, что немой пытается объяснить слепому что такое красный. smile.gif

Вы смешиваете все и вся в одну кучу в вопросах и получается неразбериха.

Начнем сначала.

1. RedBoot не ОС. Это загрузчик в первую очередь. И во вторую, некая "прокладка" позволяющая использовать gdb для отладки приложения ПРИЛИНКОВАННОГО К REDBOOT. На хосте, опять таки, используется gdb и target remote. По последовательному порту. RedBoot в данном случае заменяет openocd. Когда я с ним работал (вернее пытался) он не умел отлаживаться по TCP/IP,

2. Все таки не понятно что у Вас на тергете. Есть там linux или нет. И если нет - то что там.

3. Таргет (или target) это Ваша плата, которую Вы хотите включать, программировать и т.д. и т.п. В общем объект разработки.

4. Хост (или host) это компьютер, за которым Вы сидите, на котором пишете программу для Таргета, на котором эту программу компилируете используя кросс-компилятор (например), и на котором Вы будете запускать отладчик (тот же gdb).

5. Под понятием embedded в контексте этой ветки понимается такой таргет, в который программа прошивается в ПЗУ, либо загружается в ОЗУ таргета. Никакой ОС там нет. Может быть использована так называемая RTOS. Примером может быть eCos, uC/OS, FreeRTOS, scmRTOS и др. Конечно все зависит от точки зрения, но в общем случае они не есть то, что в этой ветке называют ОС.
Будем считать для простоты, что если у Вас embedded вариант, то у Вас только Ваша программа. Никаких Linux и пр. ОС на таргете нет.

6. Если у Вас на таргете запускается Linux, WinCE, WinXP, FreeBSD, QNX или им подобные по функциональности "настоящие" ОС, то у Вас НЕ embedded вариант, а вариант с ОС.

7. Какой все таки у Вас процессор на таргете?. Что из себя представляет плата?
Примр 1: Процессор типа ARM9, типа AT92SAM9260, PXA2xx, IXP4xx или другой им подобный. Плата одна из Development Board производителя процессора или собственная на базе схемы такой платы и т.п.
Пример 2: Процессор VIA C7 на плате от Kontron. Т.е. полностью x86 совместимый.
Это нужно для понимания Ваших же вопросов. От понимания зависят ответы smile.gif.

8. Какой набор средств разработки Вы используете? Для примера 1 в п7 это может быть кросс-компилятор arm-linux-gcc. Для примера 2 - кросс-компилятор не нужен. Все что работает на хосте будут работать и на таргете без изменений.

9. Если у Вас embedded вариант, то тут можно (и наверное нужно) использовать JTAG и OpenOCD. Для отладки все равно будет использоваться gdb. Он использует openocd для связи с таргет. Этому посвящена отдельная ветка этого форума http://electronix.ru/forum/index.php?showtopic=45936

10. Если у Вас вариант с ОС. Т.е. на таргете у Вас Linux, то OpenOCD и JTAG Вам не помогут, а помешают в отладке. Поскольку они ничего не знают не знают о наличии ОС. В этом варианте можно разместить на таргете gdb-server и запустить Вашу программу через него. А на хосте запустить соответствующий (т.е. например arm-linux-gdb если у вас на таргете ARM) и указать, что отлаживать нужно удаленно, т.е. remote. В gdb есть такая команда terget remote (не путать с п3).
В таком случае, как "залить" программу, вопрос не к openocd (его нет) и не к gdb. Любым доступным способом разместите на файловой системе таргета вашу программу (скажем ее имя tst), запустите ее примерно так
gdb-server host:1234 tst
и присоединитесь из запущенного на хосте gdb к gdb-server на таргете. И отлаживайте.

Уфф.

Сомневаюся, что ответил на Ваш вопрос, но, как говорится, чтобы получить нужный ответ нужно правильно задааать вопрос. smile.gif


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
Harbour
сообщение Dec 14 2008, 11:56
Сообщение #9


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



Цитата(islavv @ Dec 13 2008, 09:45) *
Harbor, Спасибо!!
я тоже уже сообразил что не все с linux работают и на контроллере очень часто памяти 256К а то и меньше
С Linux я давно играюсь а вот не одной примитивной оси не видел - разве что redboot
с gdb я знаком
ядро мне не надо отлаживать - может только один загружаемый драйвер
Получается что мне нужно binutils а именно gdb скомпилировать для ARM
и протащить в мои 32Mb ОЗУ на плате
Кстати если подскажете какое с каким нибудь микроядром для контроллеров и C буду признателен
Что нибудь еще проще чем eCOS


32MB озу - это очень и очень много, так-что "протащить" можно все - нужен обычно только gdbserver, его применение позволяет отлаживать stripped екзешник на тарджете, не тратя память на сам gdb и место на файловой системе тарджета от распухшей проги с отладочной инфой.
Микроядра для своих контроллеров я пишу сам - задачи слишком простые. А так есть куча веток в форуме по теме "а шо мине усе-таки выбрать ?". Перечислять можно долго - гляньте основные/бесплатные - bertos/contiki/tnkernel/nut/rtems/threadx/mantis/rtt/smx/scmrtos/xmkrtos/freertos/tinyos - скомпилируйте, напишите пару hello-world/led-blink - глядишь что-то и подойдет wink.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 07:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.06627 секунд с 7
ELECTRONIX ©2004-2016