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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> LPC23xx, firmware upgrade, Intel HEX, Keil, Как выловить EPT из HEX-файла?
KRS
сообщение Jun 16 2011, 21:35
Сообщение #16


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(svss @ Jun 17 2011, 01:09) *
Table - обобщение. У контроллера LPC*subj это таки таблица. Таблица векторов прерываний.

ну вектора исключений то у LPC23xx располагаются строго по фиксированному адресу.

Цитата(svss @ Jun 17 2011, 01:09) *
Возможно. Причём IAR этого не замечает, оба (IAR & Keil) через Jlink всё правильно заливают и отлаживают,

так отладка стартует все равно по Reset вектору.
A iar просто по умолчанию брекпоинт на main ставит. (в опциях run to main)


Цитата(svss @ Jun 17 2011, 01:09) *
(кроме секретного слова "main")

ну main то уж точно точкой входа не может быть!
точка входа обычно в библиотеке находится, там стек инитится, сегменты и т.п.
Go to the top of the page
 
+Quote Post
svss
сообщение Jun 17 2011, 01:37
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(aaarrr @ Jun 17 2011, 04:25) *
Приложите лучше получившиеся scat и map. Галки и визарды - это всегда плохо.

Да-да, выведите меня, пожалуйста, на чистую воду поскорее. Скучно тонуть в болоте. sm.gif

Цитата(KRS @ Jun 17 2011, 04:35) *
так отладка стартует все равно по Reset вектору.

ну main то уж точно точкой входа не может быть!
точка входа обычно в библиотеке находится, там стек инитится, сегменты и т.п.

Да, причём этот вектор указывает на boot loader. Он, boot loader, всё "инитит", что может,
проверяет валидность "настоящей" области векторов и передаёт туда управление.

IAR генерирует первую инструкцию, исполняемую после ResetVector, -
"B __iar_program_start" - переход в область update кода - то, что нужно.

Keil - делает что-то другое, там участвует выше упомянутый ("от Бога" даденный) файл lpc2300.s
На этом глубина моего познания Keil заканчивается и начинается мель проблем.

Внутренний голос мне уже подсказывает, что вы (команда уделивших внимание теме) сказали
достаточно полезных слов, чтоб я "дожал" проблему до внятного результата.
Тема, однако, пока не закрыта и если кто (например, aaarrr) сможет/захочет чего добавить,
упростить мне задачу - заранее спасибо.
Прикрепленные файлы
Прикрепленный файл  blade_ipmi.sct.txt ( 608 байт ) Кол-во скачиваний: 77
Прикрепленный файл  blade_ipmi.map.txt ( 110 килобайт ) Кол-во скачиваний: 415
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 17 2011, 06:46
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(svss @ Jun 17 2011, 05:37) *
Да-да, выведите меня, пожалуйста, на чистую воду поскорее. Скучно тонуть в болоте. sm.gif

Ваш проект имеет два load region'а, с адресами 0x00 и 0x20000. HEX получился совершенно корректный - двумя кусками с этими адресами. Так какие претензии к Keil'у?
Go to the top of the page
 
+Quote Post
svss
сообщение Jun 17 2011, 09:26
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(aaarrr @ Jun 17 2011, 13:46) *
Ваш проект имеет два load region'а, с адресами 0x00 и 0x20000. HEX получился совершенно корректный - двумя кусками с этими адресами. Так какие претензии к Keil'у?

Это-то (то, что код корректный и работает) меня, похоже и сбило с толку, как я начинаю догадываться.

Региона - да- два, а вот кусков в HEX-файле три. (правда, между вторым и третьим нет дырки)
Претензия к Кейлу - в том, что *каждый* из трёх HEX-кусков сопровождается RecType5. Нужны только RecType4.
RecType5 должен быть единственным - описывающим адрес старта.

А пепел сыплю голова потому, что моё предположение о том, что код должен *работать* было, похоже, ошибочным.
Нужно генерировать Update код целиком в Update сегменте, тогда стартовый адрес совпадёт с базовым адресом сегмента и
один из трёх RecType5 имени Keil укажет на него.
(Как бы ещё гуманно выбрать из трёх наилучший? По наибольшей похожести на "ноль"?)

Однако такой код запустить из-под uVision IDE и пройти "по шагам" едва ли получится.
Пожелание к Кейлу есть. Указать бы как-то стартовый адрес, отличный от базового адреса сегмента.
Тогда описанное неудобство исчезнет.

Спасибо, Ваш комментарий добавил уверенности в том, что нет грубого промаха в проекте.

Сообщение отредактировал svss - Jun 17 2011, 09:27
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 17 2011, 10:18
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(svss @ Jun 17 2011, 13:26) *
тогда стартовый адрес совпадёт с базовым адресом сегмента и
один из трёх RecType5 имени Keil укажет на него.

Если базовый адрес сегмента (и, следовательно, точка входа) заранее известны, то зачем искать RecType5, который его сообщит?

Цитата(svss @ Jun 17 2011, 13:26) *
Однако такой код запустить из-под uVision IDE и пройти "по шагам" едва ли получится.

Получится. Отладчик uVision умеет много такого, о чём вы и не догадываетесь. Посказка: см. тут.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 17 2011, 11:08
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (scifi @ Jun 17 2011, 13:18) *
Если базовый адрес сегмента (и, следовательно, точка входа) заранее известны, то зачем искать RecType5, который его сообщит?

Речь идет, насколько я понял, не о полном образе, для которого точка входа совпадает с вектором сброса и совпадает с началом образа, а о некоем подменяемом приложении. Для этого случая возможны варианты.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 17 2011, 11:35
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(zltigo @ Jun 17 2011, 15:08) *
Речь идет, насколько я понял, не о полном образе, для которого точка входа совпадает с вектором сброса и совпадает с началом образа, а о некоем подменяемом приложении. Для этого случая возможны варианты.

Ну так я и агитирую за вариант, при котором у подменяемого приложения точка входа была в самом младшем адресе двоичного образа. Тогда нет нужды искать эту точку в формате HEX. В конце концов, на загружаемый образ накладываются и иные требования (прежде всего разрешённый диапазон адресов, неплохо ещё добавить поле размера и контрольной суммы), так что фиксация точки входа не сильно затруднит.
Кроме того, есть интересная "уязвимость" формата Intel HEX, ведь в нём могут быть повторяющиеся или перекрывающиеся записи, а также записи с обратным порядком адресов. Так что должна быть гарантия, что файл прошивки пришёл из добросовестного источника, либо защита от дурака и/или хулигана.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 17 2011, 12:20
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (scifi @ Jun 17 2011, 14:35) *
Ну так я и агитирую за вариант, при котором у подменяемого приложения точка входа была в самом младшем адресе двоичного образа.

Ну и делайте в startup, все, что душа пожелает. Но в общем это не проблема. Сдается мне, что вы своими руками изобразили какую-то кашу из загрузчиков-ядер-приложений в ОДНОМ, а не разных проектах и теперь думаете а чего это оно получилось-то такое????
QUOTE (scifi @ Jun 17 2011, 14:35) *
Так что должна быть гарантия, что файл прошивки пришёл из добросовестного источника, либо защита от дурака и/или хулигана.

Ну так заливаете шифрованные. Я в HEX лью обычно только вторичный загрузчик. Дальше работает он. Заливку в HEX он тоже поддерживает, если очень попросить, но с контролем адресов - себя затереть не даст.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 17 2011, 14:19
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(zltigo @ Jun 17 2011, 16:20) *
Ну и делайте в startup, все, что душа пожелает.
...
Ну так заливаете шифрованные.

Спасибо, у меня уже давно всё работает :-) Это я топикстартеру забот накидываю, чтобы не расслаблялся :-)
Go to the top of the page
 
+Quote Post
svss
сообщение Jun 18 2011, 04:46
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(scifi @ Jun 17 2011, 17:18) *
Если базовый адрес сегмента (и, следовательно, точка входа) заранее известны, то зачем искать RecType5, который его сообщит?

Хороший вопрос. (Правда я на него неявно ответил выше)
Действительно искать не нужно, если код отлажен и его не нужно ходить по шагам.
Иначе стартовый адрес, как известно, всегда равен нулю, а точку входа нужно искать самому,
либо уговорить Keil поместить нужное в RecType5.

(Спасиб за ссылк.)

Цитата(scifi @ Jun 17 2011, 21:19) *
Спасибо, у меня уже давно всё работает :-) Это я топикстартеру забот накидываю, чтобы не расслаблялся :-)

Да, это дело.
Правда и у меня уже всё работает.

Тему можно было бы считать закрытой, но остался один вопрос, заданный в самом начале темы относительно
"правильного" lpc2300.s файла для Update кода. В случае его применения Update код можно отлаживать по
шагам.
Следуем правилу: "спросил-не ответили-ответь сам"

lpc2300_update.s
Код
;/*****************************************************************************/
;/* LPC2300_upd.S: Startup file for NXP LPC23xx/LPC24xx devices (update area) */
;/*****************************************************************************/
; Author: svss
; Note: this file was created using LPC2300.s (c)Philips/NXP/Keil as a sample.
; All copyrights are recognized.

; Area Definition and Entry Point
;  Startup Code must be linked first at Address at which it expects to run.

                AREA    RESET, CODE, READONLY
                ARM
Vectors         LDR     PC, __main        
;               LDR     PC, Undef_Addr
;               LDR     PC, SWI_Addr
;               LDR     PC, PAbt_Addr
;               LDR     PC, DAbt_Addr
                END
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 18 2011, 08:48
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (svss @ Jun 18 2011, 07:46) *
Следуем правилу: "спросил-не ответили-ответь сам"

Лично я ни то, что спросили и уж тем более ни то, что Вы сами себе ответили зачем-то напрочь изуродовав startup, как минимум, вынеся из него всю инициализацию не понял. Ну да ладно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 18 2011, 09:37
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(svss @ Jun 18 2011, 08:46) *
Тему можно было бы считать закрытой, но остался один вопрос, заданный в самом начале темы относительно
"правильного" lpc2300.s файла для Update кода. В случае его применения Update код можно отлаживать по
шагам.

Правильно будет настроить стек и кучу, а затем перейти на __main. То что вы привели не есть правильно, хотя при определенных условиях работоспособно.
Go to the top of the page
 
+Quote Post
svss
сообщение Jun 18 2011, 11:17
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(aaarrr @ Jun 18 2011, 16:37) *
Правильно будет настроить стек и кучу, а затем перейти на __main. То что вы привели не есть правильно, хотя при определенных условиях работоспособно.

Спасибо.
Я здесь же отвечу и zltigo.
Правильно ли, нет ли писать максимум кода на C, оставляя ассемблера не более, чем обойтись нельзя, наверное, спорить смысла нет.
Нельзя обойтись числом ассемблерных инструкций, меньшим одной.

То, что код из одной ассемблерной инструкции уродлив я предлагаю считать частным мнением автора высказывания,
зато он позволяет с помощью Keil получать результат эквивалентный IAR.

Тут нелишне пожаловаться на судьбу и на рок в лице заказывающего музЫку и объяснить, что я всюду имел в виду Keil 3.0.
Я это умалчивал, чтоб не исчез интерес пишущих к теме и избежать совета потребовать от свышестоящих заменить среду разработки.
Такие дела. rolleyes.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 18 2011, 15:24
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (svss @ Jun 18 2011, 14:17) *
Я здесь же отвечу и zltigo.

Нихрена, простите, Вы не поняли. И что творите не ведаете. Счастливо оставаться.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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