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

 
 
> Обьясните пожалуйста как 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
 
Start new topic
Ответов
Harbour
сообщение Dec 13 2008, 06:04
Сообщение #2


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

Группа: 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
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:53
Рейтинг@Mail.ru


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